diff --git a/.next/app-build-manifest.json b/.next/app-build-manifest.json index b25523e..64e345d 100644 --- a/.next/app-build-manifest.json +++ b/.next/app-build-manifest.json @@ -1,9 +1,9 @@ { "pages": { - "/gunbuilder/[categoryId]/[partId]/page": [ + "/gunbuilder/page": [ "static/chunks/webpack.js", "static/chunks/main-app.js", - "static/chunks/app/gunbuilder/[categoryId]/[partId]/page.js" + "static/chunks/app/gunbuilder/page.js" ], "/layout": [ "static/chunks/webpack.js", @@ -11,20 +11,10 @@ "static/css/app/layout.css", "static/chunks/app/layout.js" ], - "/gunbuilder/page": [ - "static/chunks/webpack.js", - "static/chunks/main-app.js", - "static/chunks/app/gunbuilder/page.js" - ], "/gunbuilder/[categoryId]/page": [ "static/chunks/webpack.js", "static/chunks/main-app.js", "static/chunks/app/gunbuilder/[categoryId]/page.js" - ], - "/gunbuilder/build/page": [ - "static/chunks/webpack.js", - "static/chunks/main-app.js", - "static/chunks/app/gunbuilder/build/page.js" ] } } \ No newline at end of file diff --git a/.next/cache/webpack/client-development/0.pack.gz b/.next/cache/webpack/client-development/0.pack.gz index c3ae994..cf63a99 100644 Binary files a/.next/cache/webpack/client-development/0.pack.gz and b/.next/cache/webpack/client-development/0.pack.gz differ diff --git a/.next/cache/webpack/client-development/1.pack.gz b/.next/cache/webpack/client-development/1.pack.gz index 1e02bd7..964162d 100644 Binary files a/.next/cache/webpack/client-development/1.pack.gz and b/.next/cache/webpack/client-development/1.pack.gz differ diff --git a/.next/cache/webpack/client-development/14.pack.gz b/.next/cache/webpack/client-development/14.pack.gz index cc92307..8291a97 100644 Binary files a/.next/cache/webpack/client-development/14.pack.gz and b/.next/cache/webpack/client-development/14.pack.gz differ diff --git a/.next/cache/webpack/client-development/15.pack.gz b/.next/cache/webpack/client-development/15.pack.gz index 5682884..2381ee9 100644 Binary files a/.next/cache/webpack/client-development/15.pack.gz and b/.next/cache/webpack/client-development/15.pack.gz differ diff --git a/.next/cache/webpack/client-development/16.pack.gz b/.next/cache/webpack/client-development/16.pack.gz index 225ec7d..b9ffbf7 100644 Binary files a/.next/cache/webpack/client-development/16.pack.gz and b/.next/cache/webpack/client-development/16.pack.gz differ diff --git a/.next/cache/webpack/client-development/17.pack.gz b/.next/cache/webpack/client-development/17.pack.gz new file mode 100644 index 0000000..a3a2d03 Binary files /dev/null and b/.next/cache/webpack/client-development/17.pack.gz differ diff --git a/.next/cache/webpack/client-development/18.pack.gz b/.next/cache/webpack/client-development/18.pack.gz new file mode 100644 index 0000000..cd35140 Binary files /dev/null and b/.next/cache/webpack/client-development/18.pack.gz differ diff --git a/.next/cache/webpack/client-development/2.pack.gz b/.next/cache/webpack/client-development/2.pack.gz index 5b4b8c2..b7f81e4 100644 Binary files a/.next/cache/webpack/client-development/2.pack.gz and b/.next/cache/webpack/client-development/2.pack.gz differ diff --git a/.next/cache/webpack/client-development/4.pack.gz b/.next/cache/webpack/client-development/4.pack.gz index 1dbbbb4..9f2812e 100644 Binary files a/.next/cache/webpack/client-development/4.pack.gz and b/.next/cache/webpack/client-development/4.pack.gz differ diff --git a/.next/cache/webpack/client-development/index.pack.gz b/.next/cache/webpack/client-development/index.pack.gz index 0d2157b..e1f56d0 100644 Binary files a/.next/cache/webpack/client-development/index.pack.gz and b/.next/cache/webpack/client-development/index.pack.gz differ diff --git a/.next/cache/webpack/client-development/index.pack.gz.old b/.next/cache/webpack/client-development/index.pack.gz.old index ea8d284..a6fcef0 100644 Binary files a/.next/cache/webpack/client-development/index.pack.gz.old and b/.next/cache/webpack/client-development/index.pack.gz.old differ diff --git a/.next/cache/webpack/server-development/0.pack.gz b/.next/cache/webpack/server-development/0.pack.gz index 490741d..2424059 100644 Binary files a/.next/cache/webpack/server-development/0.pack.gz and b/.next/cache/webpack/server-development/0.pack.gz differ diff --git a/.next/cache/webpack/server-development/1.pack.gz b/.next/cache/webpack/server-development/1.pack.gz index b656e8b..a15ed12 100644 Binary files a/.next/cache/webpack/server-development/1.pack.gz and b/.next/cache/webpack/server-development/1.pack.gz differ diff --git a/.next/cache/webpack/server-development/2.pack.gz b/.next/cache/webpack/server-development/2.pack.gz index d8b0707..3ed6931 100644 Binary files a/.next/cache/webpack/server-development/2.pack.gz and b/.next/cache/webpack/server-development/2.pack.gz differ diff --git a/.next/cache/webpack/server-development/3.pack.gz b/.next/cache/webpack/server-development/3.pack.gz index ca4b689..4c636f7 100644 Binary files a/.next/cache/webpack/server-development/3.pack.gz and b/.next/cache/webpack/server-development/3.pack.gz differ diff --git a/.next/cache/webpack/server-development/4.pack.gz b/.next/cache/webpack/server-development/4.pack.gz index 05056df..f222b36 100644 Binary files a/.next/cache/webpack/server-development/4.pack.gz and b/.next/cache/webpack/server-development/4.pack.gz differ diff --git a/.next/cache/webpack/server-development/5.pack.gz b/.next/cache/webpack/server-development/5.pack.gz index 2a60d94..467e9c6 100644 Binary files a/.next/cache/webpack/server-development/5.pack.gz and b/.next/cache/webpack/server-development/5.pack.gz differ diff --git a/.next/cache/webpack/server-development/8.pack.gz b/.next/cache/webpack/server-development/8.pack.gz index 0ee9437..f4c36ae 100644 Binary files a/.next/cache/webpack/server-development/8.pack.gz and b/.next/cache/webpack/server-development/8.pack.gz differ diff --git a/.next/cache/webpack/server-development/9.pack.gz b/.next/cache/webpack/server-development/9.pack.gz index 38b885a..84de477 100644 Binary files a/.next/cache/webpack/server-development/9.pack.gz and b/.next/cache/webpack/server-development/9.pack.gz differ diff --git a/.next/cache/webpack/server-development/index.pack.gz b/.next/cache/webpack/server-development/index.pack.gz index 86cc9a3..043c212 100644 Binary files a/.next/cache/webpack/server-development/index.pack.gz and b/.next/cache/webpack/server-development/index.pack.gz differ diff --git a/.next/cache/webpack/server-development/index.pack.gz.old b/.next/cache/webpack/server-development/index.pack.gz.old index e119e8e..e0b559e 100644 Binary files a/.next/cache/webpack/server-development/index.pack.gz.old and b/.next/cache/webpack/server-development/index.pack.gz.old differ diff --git a/.next/server/app-paths-manifest.json b/.next/server/app-paths-manifest.json index b1444c2..4b3a9ac 100644 --- a/.next/server/app-paths-manifest.json +++ b/.next/server/app-paths-manifest.json @@ -1,6 +1,4 @@ { "/gunbuilder/[categoryId]/page": "app/gunbuilder/[categoryId]/page.js", - "/gunbuilder/[categoryId]/[partId]/page": "app/gunbuilder/[categoryId]/[partId]/page.js", - "/gunbuilder/page": "app/gunbuilder/page.js", - "/gunbuilder/build/page": "app/gunbuilder/build/page.js" + "/gunbuilder/page": "app/gunbuilder/page.js" } \ No newline at end of file diff --git a/.next/server/app/_not-found/page.js b/.next/server/app/_not-found/page.js deleted file mode 100644 index 2158863..0000000 --- a/.next/server/app/_not-found/page.js +++ /dev/null @@ -1,155 +0,0 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -(() => { -var exports = {}; -exports.id = "app/_not-found/page"; -exports.ids = ["app/_not-found/page"]; -exports.modules = { - -/***/ "./action-async-storage.external": -/*!****************************************************************************!*\ - !*** external "next/dist/client/components/action-async-storage.external" ***! - \****************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/action-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/action-async-storage.external": -/*!*******************************************************************************!*\ - !*** external "next/dist/client/components/action-async-storage.external.js" ***! - \*******************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/action-async-storage.external.js"); - -/***/ }), - -/***/ "./request-async-storage.external": -/*!*****************************************************************************!*\ - !*** external "next/dist/client/components/request-async-storage.external" ***! - \*****************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/request-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/request-async-storage.external": -/*!********************************************************************************!*\ - !*** external "next/dist/client/components/request-async-storage.external.js" ***! - \********************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/request-async-storage.external.js"); - -/***/ }), - -/***/ "./static-generation-async-storage.external": -/*!***************************************************************************************!*\ - !*** external "next/dist/client/components/static-generation-async-storage.external" ***! - \***************************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/static-generation-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/static-generation-async-storage.external": -/*!******************************************************************************************!*\ - !*** external "next/dist/client/components/static-generation-async-storage.external.js" ***! - \******************************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/static-generation-async-storage.external.js"); - -/***/ }), - -/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js": -/*!*************************************************************************!*\ - !*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***! - \*************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js"); - -/***/ }), - -/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!": -/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***! - \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlobalError: () => (/* reexport default from dynamic */ next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default.a),\n/* harmony export */ __next_app__: () => (/* binding */ __next_app__),\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ pages: () => (/* binding */ pages),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ tree: () => (/* binding */ tree)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-page/module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?d969\");\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/client/components/error-boundary */ \"(rsc)/./node_modules/next/dist/client/components/error-boundary.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/server/app-render/entry-base */ \"(rsc)/./node_modules/next/dist/server/app-render/entry-base.js\");\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__) if([\"default\",\"tree\",\"pages\",\"GlobalError\",\"originalPathname\",\"__next_app__\",\"routeModule\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\"TURBOPACK { transition: next-ssr }\";\n\n\n// We inject the tree and pages here so that we can use them in the route\n// module.\nconst tree = {\n children: [\n '',\n {\n children: [\"/_not-found\", {\n children: ['__PAGE__', {}, {\n page: [\n () => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/not-found-error */ \"(rsc)/./node_modules/next/dist/client/components/not-found-error.js\", 23)),\n \"next/dist/client/components/not-found-error\"\n ]\n }]\n }, {}]\n },\n {\n 'layout': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(rsc)/./app/layout.tsx\")), \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\"],\n'not-found': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/not-found-error */ \"(rsc)/./node_modules/next/dist/client/components/not-found-error.js\", 23)), \"next/dist/client/components/not-found-error\"],\n \n }\n ]\n }.children;\nconst pages = [];\n\n\nconst __next_app_require__ = __webpack_require__\nconst __next_app_load_chunk__ = () => Promise.resolve()\nconst originalPathname = \"/_not-found/page\";\nconst __next_app__ = {\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__\n};\n\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppPageRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_PAGE,\n page: \"/_not-found/page\",\n pathname: \"/_not-found\",\n // The following aren't used in production.\n bundlePath: \"\",\n filename: \"\",\n appPaths: []\n },\n userland: {\n loaderTree: tree\n }\n});\n\n//# sourceMappingURL=app-page.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZfbm90LWZvdW5kJTJGcGFnZSZwYWdlPSUyRl9ub3QtZm91bmQlMkZwYWdlJmFwcFBhdGhzPSZwYWdlUGF0aD1ub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmNsaWVudCUyRmNvbXBvbmVudHMlMkZub3QtZm91bmQtZXJyb3IuanMmYXBwRGlyPSUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGYXBwJnBhZ2VFeHRlbnNpb25zPXRzeCZwYWdlRXh0ZW5zaW9ucz10cyZwYWdlRXh0ZW5zaW9ucz1qc3gmcGFnZUV4dGVuc2lvbnM9anMmcm9vdERpcj0lMkZVc2VycyUyRnNlYW4lMkZEZXYlMkZndW5idWlsZGVyLXByb3RvdHlwZSZpc0Rldj10cnVlJnRzY29uZmlnUGF0aD10c2NvbmZpZy5qc29uJmJhc2VQYXRoPSZhc3NldFByZWZpeD0mbmV4dENvbmZpZ091dHB1dD0mcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGFBQWEsc0JBQXNCO0FBQ2lFO0FBQ3JDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0Esc0JBQXNCLDBOQUFnRjtBQUN0RztBQUNBO0FBQ0EsYUFBYTtBQUNiLFdBQVcsSUFBSTtBQUNmLFNBQVM7QUFDVDtBQUNBLHlCQUF5Qiw0SUFBd0Y7QUFDakgsb0JBQW9CLDBOQUFnRjtBQUNwRztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDdUI7QUFDNkQ7QUFDcEYsNkJBQTZCLG1CQUFtQjtBQUNoRDtBQUNPO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDdUQ7QUFDdkQ7QUFDTyx3QkFBd0IsOEdBQWtCO0FBQ2pEO0FBQ0EsY0FBYyx5RUFBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLz8wZTY0Il0sInNvdXJjZXNDb250ZW50IjpbIlwiVFVSQk9QQUNLIHsgdHJhbnNpdGlvbjogbmV4dC1zc3IgfVwiO1xuaW1wb3J0IHsgQXBwUGFnZVJvdXRlTW9kdWxlIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLW1vZHVsZXMvYXBwLXBhZ2UvbW9kdWxlLmNvbXBpbGVkXCI7XG5pbXBvcnQgeyBSb3V0ZUtpbmQgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUta2luZFwiO1xuLy8gV2UgaW5qZWN0IHRoZSB0cmVlIGFuZCBwYWdlcyBoZXJlIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGluIHRoZSByb3V0ZVxuLy8gbW9kdWxlLlxuY29uc3QgdHJlZSA9IHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgJycsXG4gICAgICAgIHtcbiAgICAgICAgICBjaGlsZHJlbjogW1wiL19ub3QtZm91bmRcIiwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFsnX19QQUdFX18nLCB7fSwge1xuICAgICAgICAgICAgICBwYWdlOiBbXG4gICAgICAgICAgICAgICAgKCkgPT4gaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yXCIpLFxuICAgICAgICAgICAgICAgIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvclwiXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfSwge31dXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgJ2xheW91dCc6IFsoKSA9PiBpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9hcHAvbGF5b3V0LnRzeFwiKSwgXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2xheW91dC50c3hcIl0sXG4nbm90LWZvdW5kJzogWygpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvclwiKSwgXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yXCJdLFxuICAgICAgICBcbiAgICAgIH1cbiAgICAgIF1cbiAgICAgIH0uY2hpbGRyZW47XG5jb25zdCBwYWdlcyA9IFtdO1xuZXhwb3J0IHsgdHJlZSwgcGFnZXMgfTtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2xvYmFsRXJyb3IgfSBmcm9tIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5XCI7XG5jb25zdCBfX25leHRfYXBwX3JlcXVpcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX19cbmNvbnN0IF9fbmV4dF9hcHBfbG9hZF9jaHVua19fID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKClcbmV4cG9ydCBjb25zdCBvcmlnaW5hbFBhdGhuYW1lID0gXCIvX25vdC1mb3VuZC9wYWdlXCI7XG5leHBvcnQgY29uc3QgX19uZXh0X2FwcF9fID0ge1xuICAgIHJlcXVpcmU6IF9fbmV4dF9hcHBfcmVxdWlyZV9fLFxuICAgIGxvYWRDaHVuazogX19uZXh0X2FwcF9sb2FkX2NodW5rX19cbn07XG5leHBvcnQgKiBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL2VudHJ5LWJhc2VcIjtcbi8vIENyZWF0ZSBhbmQgZXhwb3J0IHRoZSByb3V0ZSBtb2R1bGUgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuZXhwb3J0IGNvbnN0IHJvdXRlTW9kdWxlID0gbmV3IEFwcFBhZ2VSb3V0ZU1vZHVsZSh7XG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgICBraW5kOiBSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIHBhZ2U6IFwiL19ub3QtZm91bmQvcGFnZVwiLFxuICAgICAgICBwYXRobmFtZTogXCIvX25vdC1mb3VuZFwiLFxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIGluIHByb2R1Y3Rpb24uXG4gICAgICAgIGJ1bmRsZVBhdGg6IFwiXCIsXG4gICAgICAgIGZpbGVuYW1lOiBcIlwiLFxuICAgICAgICBhcHBQYXRoczogW11cbiAgICB9LFxuICAgIHVzZXJsYW5kOiB7XG4gICAgICAgIGxvYWRlclRyZWU6IHRyZWVcbiAgICB9XG59KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXBhZ2UuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n"); - -/***/ }), - -/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=true!": -/*!********************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***! - \********************************************************************************************************************************************************************************************************************************/ -/***/ (() => { - - - -/***/ }), - -/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!": -/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***! - \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { - -eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/app-router.js */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/client-page.js */ \"(ssr)/./node_modules/next/dist/client/components/client-page.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/error-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/layout-router.js */ \"(ssr)/./node_modules/next/dist/client/components/layout-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/not-found-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/render-from-template-context.js */ \"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js\", 23));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGYXBwLXJvdXRlci5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRnNlYW4lMkZEZXYlMkZndW5idWlsZGVyLXByb3RvdHlwZSUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmNsaWVudC1wYWdlLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGZXJyb3ItYm91bmRhcnkuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZzZWFuJTJGRGV2JTJGZ3VuYnVpbGRlci1wcm90b3R5cGUlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmNsaWVudCUyRmNvbXBvbmVudHMlMkZsYXlvdXQtcm91dGVyLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGbm90LWZvdW5kLWJvdW5kYXJ5LmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsa09BQWdJO0FBQ2hJO0FBQ0Esb09BQWlJO0FBQ2pJO0FBQ0EsME9BQW9JO0FBQ3BJO0FBQ0Esd09BQW1JO0FBQ25JO0FBQ0Esa1BBQXdJO0FBQ3hJO0FBQ0Esc1FBQWtKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvPzdiMjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtcGFnZS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnkuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXIuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1ib3VuZGFyeS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qc1wiKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n"); - -/***/ }), - -/***/ "(rsc)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"8e3b978f6080\");\nif (false) {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvZ2xvYmFscy5jc3MiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlFQUFlLGNBQWM7QUFDN0IsSUFBSSxLQUFVLEVBQUUsRUFBdUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2FwcC9nbG9iYWxzLmNzcz9jZDI4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiOGUzYjk3OGY2MDgwXCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./app/globals.css\n"); - -/***/ }), - -/***/ "(rsc)/./app/layout.tsx": -/*!************************!*\ - !*** ./app/layout.tsx ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RootLayout),\n/* harmony export */ metadata: () => (/* binding */ metadata)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./globals.css */ \"(rsc)/./app/globals.css\");\n\n\nconst metadata = {\n title: \"Gunbuilder Prototype | Shadow Standard\",\n description: \"Prototype AR-15 build tool by Shadow Standard.\"\n};\nfunction RootLayout({ children }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n children: children\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 12,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 11,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvbGF5b3V0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBdUI7QUFHaEIsTUFBTUEsV0FBVztJQUN0QkMsT0FBTztJQUNQQyxhQUFhO0FBQ2YsRUFBRTtBQUVhLFNBQVNDLFdBQVcsRUFBRUMsUUFBUSxFQUEyQjtJQUN0RSxxQkFDRSw4REFBQ0M7UUFBS0MsTUFBSztrQkFDVCw0RUFBQ0M7c0JBQU1IOzs7Ozs7Ozs7OztBQUdiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvLi9hcHAvbGF5b3V0LnRzeD85OTg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vZ2xvYmFscy5jc3NcIjtcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjb25zdCBtZXRhZGF0YSA9IHtcbiAgdGl0bGU6IFwiR3VuYnVpbGRlciBQcm90b3R5cGUgfCBTaGFkb3cgU3RhbmRhcmRcIixcbiAgZGVzY3JpcHRpb246IFwiUHJvdG90eXBlIEFSLTE1IGJ1aWxkIHRvb2wgYnkgU2hhZG93IFN0YW5kYXJkLlwiLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUm9vdExheW91dCh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWwgbGFuZz1cImVuXCI+XG4gICAgICA8Ym9keT57Y2hpbGRyZW59PC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJtZXRhZGF0YSIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJSb290TGF5b3V0IiwiY2hpbGRyZW4iLCJodG1sIiwibGFuZyIsImJvZHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./app/layout.tsx\n"); - -/***/ }) - -}; -; - -// load runtime -var __webpack_require__ = require("../../webpack-runtime.js"); -__webpack_require__.C(exports); -var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) -var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"))); -module.exports = __webpack_exports__; - -})(); \ No newline at end of file diff --git a/.next/server/app/_not-found/page_client-reference-manifest.js b/.next/server/app/_not-found/page_client-reference-manifest.js deleted file mode 100644 index 0b99a5c..0000000 --- a/.next/server/app/_not-found/page_client-reference-manifest.js +++ /dev/null @@ -1 +0,0 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_not-found/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/_not-found/page":[]}} \ No newline at end of file diff --git a/.next/server/app/gunbuilder/[categoryId]/[partId]/page.js b/.next/server/app/gunbuilder/[categoryId]/[partId]/page.js deleted file mode 100644 index 1dcc896..0000000 --- a/.next/server/app/gunbuilder/[categoryId]/[partId]/page.js +++ /dev/null @@ -1,227 +0,0 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -(() => { -var exports = {}; -exports.id = "app/gunbuilder/[categoryId]/[partId]/page"; -exports.ids = ["app/gunbuilder/[categoryId]/[partId]/page"]; -exports.modules = { - -/***/ "./action-async-storage.external": -/*!****************************************************************************!*\ - !*** external "next/dist/client/components/action-async-storage.external" ***! - \****************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/action-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/action-async-storage.external": -/*!*******************************************************************************!*\ - !*** external "next/dist/client/components/action-async-storage.external.js" ***! - \*******************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/action-async-storage.external.js"); - -/***/ }), - -/***/ "./request-async-storage.external": -/*!*****************************************************************************!*\ - !*** external "next/dist/client/components/request-async-storage.external" ***! - \*****************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/request-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/request-async-storage.external": -/*!********************************************************************************!*\ - !*** external "next/dist/client/components/request-async-storage.external.js" ***! - \********************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/request-async-storage.external.js"); - -/***/ }), - -/***/ "./static-generation-async-storage.external": -/*!***************************************************************************************!*\ - !*** external "next/dist/client/components/static-generation-async-storage.external" ***! - \***************************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/static-generation-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/static-generation-async-storage.external": -/*!******************************************************************************************!*\ - !*** external "next/dist/client/components/static-generation-async-storage.external.js" ***! - \******************************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/static-generation-async-storage.external.js"); - -/***/ }), - -/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js": -/*!*************************************************************************!*\ - !*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***! - \*************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js"); - -/***/ }), - -/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!": -/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***! - \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlobalError: () => (/* reexport default from dynamic */ next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default.a),\n/* harmony export */ __next_app__: () => (/* binding */ __next_app__),\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ pages: () => (/* binding */ pages),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ tree: () => (/* binding */ tree)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-page/module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?d969\");\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/client/components/error-boundary */ \"(rsc)/./node_modules/next/dist/client/components/error-boundary.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/server/app-render/entry-base */ \"(rsc)/./node_modules/next/dist/server/app-render/entry-base.js\");\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__) if([\"default\",\"tree\",\"pages\",\"GlobalError\",\"originalPathname\",\"__next_app__\",\"routeModule\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\"TURBOPACK { transition: next-ssr }\";\n\n\n// We inject the tree and pages here so that we can use them in the route\n// module.\nconst tree = {\n children: [\n '',\n {\n children: [\n 'gunbuilder',\n {\n children: [\n '[categoryId]',\n {\n children: [\n '[partId]',\n {\n children: ['__PAGE__', {}, {\n page: [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/gunbuilder/[categoryId]/[partId]/page.tsx */ \"(rsc)/./app/gunbuilder/[categoryId]/[partId]/page.tsx\")), \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\"],\n \n }]\n },\n {\n \n \n }\n ]\n },\n {\n \n \n }\n ]\n },\n {\n \n \n }\n ]\n },\n {\n 'layout': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(rsc)/./app/layout.tsx\")), \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\"],\n'not-found': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/not-found-error */ \"(rsc)/./node_modules/next/dist/client/components/not-found-error.js\", 23)), \"next/dist/client/components/not-found-error\"],\n \n }\n ]\n }.children;\nconst pages = [\"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\"];\n\n\nconst __next_app_require__ = __webpack_require__\nconst __next_app_load_chunk__ = () => Promise.resolve()\nconst originalPathname = \"/gunbuilder/[categoryId]/[partId]/page\";\nconst __next_app__ = {\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__\n};\n\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppPageRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_PAGE,\n page: \"/gunbuilder/[categoryId]/[partId]/page\",\n pathname: \"/gunbuilder/[categoryId]/[partId]\",\n // The following aren't used in production.\n bundlePath: \"\",\n filename: \"\",\n appPaths: []\n },\n userland: {\n loaderTree: tree\n }\n});\n\n//# sourceMappingURL=app-page.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZndW5idWlsZGVyJTJGJTVCY2F0ZWdvcnlJZCU1RCUyRiU1QnBhcnRJZCU1RCUyRnBhZ2UmcGFnZT0lMkZndW5idWlsZGVyJTJGJTVCY2F0ZWdvcnlJZCU1RCUyRiU1QnBhcnRJZCU1RCUyRnBhZ2UmYXBwUGF0aHM9JTJGZ3VuYnVpbGRlciUyRiU1QmNhdGVnb3J5SWQlNUQlMkYlNUJwYXJ0SWQlNUQlMkZwYWdlJnBhZ2VQYXRoPXByaXZhdGUtbmV4dC1hcHAtZGlyJTJGZ3VuYnVpbGRlciUyRiU1QmNhdGVnb3J5SWQlNUQlMkYlNUJwYXJ0SWQlNUQlMkZwYWdlLnRzeCZhcHBEaXI9JTJGVXNlcnMlMkZzZWFuJTJGRGV2JTJGZ3VuYnVpbGRlci1wcm90b3R5cGUlMkZhcHAmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZyb290RGlyPSUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJmlzRGV2PXRydWUmdHNjb25maWdQYXRoPXRzY29uZmlnLmpzb24mYmFzZVBhdGg9JmFzc2V0UHJlZml4PSZuZXh0Q29uZmlnT3V0cHV0PSZwcmVmZXJyZWRSZWdpb249Jm1pZGRsZXdhcmVDb25maWc9ZTMwJTNEISIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsYUFBYSxzQkFBc0I7QUFDaUU7QUFDckM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLHVCQUF1QiwwTUFBdUg7QUFDOUk7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EseUJBQXlCLDRJQUF3RjtBQUNqSCxvQkFBb0IsME5BQWdGO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUN1QjtBQUM2RDtBQUNwRiw2QkFBNkIsbUJBQW1CO0FBQ2hEO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUN1RDtBQUN2RDtBQUNPLHdCQUF3Qiw4R0FBa0I7QUFDakQ7QUFDQSxjQUFjLHlFQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvP2RlNWIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJUVVJCT1BBQ0sgeyB0cmFuc2l0aW9uOiBuZXh0LXNzciB9XCI7XG5pbXBvcnQgeyBBcHBQYWdlUm91dGVNb2R1bGUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS9tb2R1bGUuY29tcGlsZWRcIjtcbmltcG9ydCB7IFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1raW5kXCI7XG4vLyBXZSBpbmplY3QgdGhlIHRyZWUgYW5kIHBhZ2VzIGhlcmUgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZW0gaW4gdGhlIHJvdXRlXG4vLyBtb2R1bGUuXG5jb25zdCB0cmVlID0ge1xuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAnJyxcbiAgICAgICAge1xuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAnZ3VuYnVpbGRlcicsXG4gICAgICAgIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgJ1tjYXRlZ29yeUlkXScsXG4gICAgICAgIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgJ1twYXJ0SWRdJyxcbiAgICAgICAge1xuICAgICAgICBjaGlsZHJlbjogWydfX1BBR0VfXycsIHt9LCB7XG4gICAgICAgICAgcGFnZTogWygpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9bcGFydElkXS9wYWdlLnRzeFwiKSwgXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2d1bmJ1aWxkZXIvW2NhdGVnb3J5SWRdL1twYXJ0SWRdL3BhZ2UudHN4XCJdLFxuICAgICAgICAgIFxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICB9XG4gICAgICBdXG4gICAgICB9LFxuICAgICAgICB7XG4gICAgICAgIFxuICAgICAgICBcbiAgICAgIH1cbiAgICAgIF1cbiAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgfVxuICAgICAgXVxuICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAnbGF5b3V0JzogWygpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL2FwcC9sYXlvdXQudHN4XCIpLCBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9hcHAvbGF5b3V0LnRzeFwiXSxcbidub3QtZm91bmQnOiBbKCkgPT4gaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yXCIpLCBcIm5leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9ub3QtZm91bmQtZXJyb3JcIl0sXG4gICAgICAgIFxuICAgICAgfVxuICAgICAgXVxuICAgICAgfS5jaGlsZHJlbjtcbmNvbnN0IHBhZ2VzID0gW1wiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9bcGFydElkXS9wYWdlLnRzeFwiXTtcbmV4cG9ydCB7IHRyZWUsIHBhZ2VzIH07XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbEVycm9yIH0gZnJvbSBcIm5leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9lcnJvci1ib3VuZGFyeVwiO1xuY29uc3QgX19uZXh0X2FwcF9yZXF1aXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fXG5jb25zdCBfX25leHRfYXBwX2xvYWRfY2h1bmtfXyA9ICgpID0+IFByb21pc2UucmVzb2x2ZSgpXG5leHBvcnQgY29uc3Qgb3JpZ2luYWxQYXRobmFtZSA9IFwiL2d1bmJ1aWxkZXIvW2NhdGVnb3J5SWRdL1twYXJ0SWRdL3BhZ2VcIjtcbmV4cG9ydCBjb25zdCBfX25leHRfYXBwX18gPSB7XG4gICAgcmVxdWlyZTogX19uZXh0X2FwcF9yZXF1aXJlX18sXG4gICAgbG9hZENodW5rOiBfX25leHRfYXBwX2xvYWRfY2h1bmtfX1xufTtcbmV4cG9ydCAqIGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2FwcC1yZW5kZXIvZW50cnktYmFzZVwiO1xuLy8gQ3JlYXRlIGFuZCBleHBvcnQgdGhlIHJvdXRlIG1vZHVsZSB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG5leHBvcnQgY29uc3Qgcm91dGVNb2R1bGUgPSBuZXcgQXBwUGFnZVJvdXRlTW9kdWxlKHtcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgIGtpbmQ6IFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgcGFnZTogXCIvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vW3BhcnRJZF0vcGFnZVwiLFxuICAgICAgICBwYXRobmFtZTogXCIvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vW3BhcnRJZF1cIixcbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCBpbiBwcm9kdWN0aW9uLlxuICAgICAgICBidW5kbGVQYXRoOiBcIlwiLFxuICAgICAgICBmaWxlbmFtZTogXCJcIixcbiAgICAgICAgYXBwUGF0aHM6IFtdXG4gICAgfSxcbiAgICB1c2VybGFuZDoge1xuICAgICAgICBsb2FkZXJUcmVlOiB0cmVlXG4gICAgfVxufSk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC1wYWdlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n"); - -/***/ }), - -/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=true!": -/*!********************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***! - \********************************************************************************************************************************************************************************************************************************/ -/***/ (() => { - - - -/***/ }), - -/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!": -/*!****************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***! - \****************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { - -eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/gunbuilder/[categoryId]/[partId]/page.tsx */ \"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGYXBwJTJGZ3VuYnVpbGRlciUyRiU1QmNhdGVnb3J5SWQlNUQlMkYlNUJwYXJ0SWQlNUQlMkZwYWdlLnRzeCUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsME1BQXVIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvPzQxZDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2d1bmJ1aWxkZXIvW2NhdGVnb3J5SWRdL1twYXJ0SWRdL3BhZ2UudHN4XCIpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n"); - -/***/ }), - -/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!": -/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***! - \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { - -eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/app-router.js */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/client-page.js */ \"(ssr)/./node_modules/next/dist/client/components/client-page.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/error-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/layout-router.js */ \"(ssr)/./node_modules/next/dist/client/components/layout-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/not-found-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/render-from-template-context.js */ \"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js\", 23));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGYXBwLXJvdXRlci5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRnNlYW4lMkZEZXYlMkZndW5idWlsZGVyLXByb3RvdHlwZSUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmNsaWVudC1wYWdlLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGZXJyb3ItYm91bmRhcnkuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZzZWFuJTJGRGV2JTJGZ3VuYnVpbGRlci1wcm90b3R5cGUlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmNsaWVudCUyRmNvbXBvbmVudHMlMkZsYXlvdXQtcm91dGVyLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGbm90LWZvdW5kLWJvdW5kYXJ5LmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsa09BQWdJO0FBQ2hJO0FBQ0Esb09BQWlJO0FBQ2pJO0FBQ0EsME9BQW9JO0FBQ3BJO0FBQ0Esd09BQW1JO0FBQ25JO0FBQ0Esa1BBQXdJO0FBQ3hJO0FBQ0Esc1FBQWtKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvPzdiMjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtcGFnZS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnkuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXIuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1ib3VuZGFyeS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qc1wiKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n"); - -/***/ }), - -/***/ "(ssr)/./app/gunbuilder/[categoryId]/[partId]/data.ts": -/*!******************************************************!*\ - !*** ./app/gunbuilder/[categoryId]/[partId]/data.ts ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getPricingHistory: () => (/* binding */ getPricingHistory),\n/* harmony export */ getRetailerOffers: () => (/* binding */ getRetailerOffers)\n/* harmony export */ });\n// app/gunbuilder/[categoryId]/[partId]/data.ts\n// Simulated data functions - Replace these with API calls when ready\n// Example: export async function getPricingHistory(partId: string) { ... }\nconst API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL ?? \"http://localhost:8080\";\n/**\n * Get pricing history for a part\n * TODO: Replace with API call: GET /api/parts/{partId}/pricing-history\n *\n * For now, we keep this simulated.\n */ function getPricingHistory(partId, basePrice) {\n // Generate 30 days of price history with some variation\n const days = 30;\n const history = [];\n const today = new Date();\n for(let i = days - 1; i >= 0; i--){\n const date = new Date(today);\n date.setDate(date.getDate() - i);\n // Simulate price fluctuations (±15% variation)\n const variation = (Math.random() - 0.5) * 0.3; // -15% to +15%\n const price = basePrice * (1 + variation);\n history.push({\n date: date.toISOString().split(\"T\")[0],\n price: Math.round(price * 100) / 100\n });\n }\n return history;\n}\n/**\n * Get retailer offers for a part\n * Real implementation using Ballistic backend:\n * GET /api/products/{productId}/offers\n */ async function getRetailerOffers(productId) {\n const res = await fetch(`${API_BASE_URL}/api/products/${productId}/offers`, {\n // This will be called from the client detail page,\n // so we *don't* use cache here.\n cache: \"no-store\"\n });\n if (!res.ok) {\n throw new Error(`Failed to load retailer offers (${res.status}) for product ${productId}`);\n }\n // Expected backend payload (example):\n // [\n // {\n // \"id\": \"uuid-or-int\",\n // \"merchantName\": \"Aero Precision\",\n // \"price\": 189.99,\n // \"originalPrice\": 210.0,\n // \"inStock\": true,\n // \"buyUrl\": \"https://classic.avantlink.com/click.php?...\",\n // \"lastUpdated\": \"2025-11-30T15:22:00Z\"\n // },\n // ...\n // ]\n const data = await res.json();\n const offers = data.map((o)=>({\n id: String(o.id),\n retailerName: o.merchantName,\n price: o.price,\n originalPrice: o.originalPrice ?? undefined,\n inStock: o.inStock,\n affiliateUrl: o.buyUrl,\n lastUpdated: o.lastUpdated\n }))// Sort by lowest price first\n .sort((a, b)=>a.price - b.price);\n return offers;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vW3BhcnRJZF0vZGF0YS50cyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtDQUErQztBQUUvQyxxRUFBcUU7QUFDckUsMkVBQTJFO0FBRTNFLE1BQU1BLGVBQ0pDLFFBQVFDLEdBQUcsQ0FBQ0Msd0JBQXdCLElBQUk7QUFpQjFDOzs7OztDQUtDLEdBQ00sU0FBU0Msa0JBQ2RDLE1BQWMsRUFDZEMsU0FBaUI7SUFFakIsd0RBQXdEO0lBQ3hELE1BQU1DLE9BQU87SUFDYixNQUFNQyxVQUErQixFQUFFO0lBQ3ZDLE1BQU1DLFFBQVEsSUFBSUM7SUFFbEIsSUFBSyxJQUFJQyxJQUFJSixPQUFPLEdBQUdJLEtBQUssR0FBR0EsSUFBSztRQUNsQyxNQUFNQyxPQUFPLElBQUlGLEtBQUtEO1FBQ3RCRyxLQUFLQyxPQUFPLENBQUNELEtBQUtFLE9BQU8sS0FBS0g7UUFFOUIsK0NBQStDO1FBQy9DLE1BQU1JLFlBQVksQ0FBQ0MsS0FBS0MsTUFBTSxLQUFLLEdBQUUsSUFBSyxLQUFLLGVBQWU7UUFDOUQsTUFBTUMsUUFBUVosWUFBYSxLQUFJUyxTQUFRO1FBRXZDUCxRQUFRVyxJQUFJLENBQUM7WUFDWFAsTUFBTUEsS0FBS1EsV0FBVyxHQUFHQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdENILE9BQU9GLEtBQUtNLEtBQUssQ0FBQ0osUUFBUSxPQUFPO1FBQ25DO0lBQ0Y7SUFFQSxPQUFPVjtBQUNUO0FBRUE7Ozs7Q0FJQyxHQUNNLGVBQWVlLGtCQUNwQkMsU0FBaUI7SUFFakIsTUFBTUMsTUFBTSxNQUFNQyxNQUNoQixDQUFDLEVBQUUxQixhQUFhLGNBQWMsRUFBRXdCLFVBQVUsT0FBTyxDQUFDLEVBQ2xEO1FBQ0UsbURBQW1EO1FBQ25ELGdDQUFnQztRQUNoQ0csT0FBTztJQUNUO0lBR0YsSUFBSSxDQUFDRixJQUFJRyxFQUFFLEVBQUU7UUFDWCxNQUFNLElBQUlDLE1BQ1IsQ0FBQyxnQ0FBZ0MsRUFBRUosSUFBSUssTUFBTSxDQUFDLGNBQWMsRUFBRU4sVUFBVSxDQUFDO0lBRTdFO0lBRUEsc0NBQXNDO0lBQ3RDLElBQUk7SUFDSixNQUFNO0lBQ04sMkJBQTJCO0lBQzNCLHdDQUF3QztJQUN4Qyx1QkFBdUI7SUFDdkIsOEJBQThCO0lBQzlCLHVCQUF1QjtJQUN2QiwrREFBK0Q7SUFDL0QsNENBQTRDO0lBQzVDLE9BQU87SUFDUCxRQUFRO0lBQ1IsSUFBSTtJQUNKLE1BQU1PLE9BUUQsTUFBTU4sSUFBSU8sSUFBSTtJQUVuQixNQUFNQyxTQUEwQkYsS0FDN0JHLEdBQUcsQ0FBQyxDQUFDQyxJQUFPO1lBQ1hDLElBQUlDLE9BQU9GLEVBQUVDLEVBQUU7WUFDZkUsY0FBY0gsRUFBRUksWUFBWTtZQUM1QnJCLE9BQU9pQixFQUFFakIsS0FBSztZQUNkc0IsZUFBZUwsRUFBRUssYUFBYSxJQUFJQztZQUNsQ0MsU0FBU1AsRUFBRU8sT0FBTztZQUNsQkMsY0FBY1IsRUFBRVMsTUFBTTtZQUN0QkMsYUFBYVYsRUFBRVUsV0FBVztRQUM1QixHQUNBLDZCQUE2QjtLQUM1QkMsSUFBSSxDQUFDLENBQUNDLEdBQUdDLElBQU1ELEVBQUU3QixLQUFLLEdBQUc4QixFQUFFOUIsS0FBSztJQUVuQyxPQUFPZTtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vW3BhcnRJZF0vZGF0YS50cz9kNzM1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGFwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9bcGFydElkXS9kYXRhLnRzXG5cbi8vIFNpbXVsYXRlZCBkYXRhIGZ1bmN0aW9ucyAtIFJlcGxhY2UgdGhlc2Ugd2l0aCBBUEkgY2FsbHMgd2hlbiByZWFkeVxuLy8gRXhhbXBsZTogZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByaWNpbmdIaXN0b3J5KHBhcnRJZDogc3RyaW5nKSB7IC4uLiB9XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByaWNlSGlzdG9yeVBvaW50IHtcbiAgZGF0ZTogc3RyaW5nOyAvLyBJU08gZGF0ZSBzdHJpbmdcbiAgcHJpY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXRhaWxlck9mZmVyIHtcbiAgaWQ6IHN0cmluZztcbiAgcmV0YWlsZXJOYW1lOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXI7XG4gIG9yaWdpbmFsUHJpY2U/OiBudW1iZXI7XG4gIGluU3RvY2s6IGJvb2xlYW47XG4gIGFmZmlsaWF0ZVVybDogc3RyaW5nO1xuICBsYXN0VXBkYXRlZDogc3RyaW5nOyAvLyBJU08gZGF0ZSBzdHJpbmdcbn1cblxuLyoqXG4gKiBHZXQgcHJpY2luZyBoaXN0b3J5IGZvciBhIHBhcnRcbiAqIFRPRE86IFJlcGxhY2Ugd2l0aCBBUEkgY2FsbDogR0VUIC9hcGkvcGFydHMve3BhcnRJZH0vcHJpY2luZy1oaXN0b3J5XG4gKlxuICogRm9yIG5vdywgd2Uga2VlcCB0aGlzIHNpbXVsYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByaWNpbmdIaXN0b3J5KFxuICBwYXJ0SWQ6IHN0cmluZyxcbiAgYmFzZVByaWNlOiBudW1iZXIsXG4pOiBQcmljZUhpc3RvcnlQb2ludFtdIHtcbiAgLy8gR2VuZXJhdGUgMzAgZGF5cyBvZiBwcmljZSBoaXN0b3J5IHdpdGggc29tZSB2YXJpYXRpb25cbiAgY29uc3QgZGF5cyA9IDMwO1xuICBjb25zdCBoaXN0b3J5OiBQcmljZUhpc3RvcnlQb2ludFtdID0gW107XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcblxuICBmb3IgKGxldCBpID0gZGF5cyAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBpKTtcblxuICAgIC8vIFNpbXVsYXRlIHByaWNlIGZsdWN0dWF0aW9ucyAowrExNSUgdmFyaWF0aW9uKVxuICAgIGNvbnN0IHZhcmlhdGlvbiA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDAuMzsgLy8gLTE1JSB0byArMTUlXG4gICAgY29uc3QgcHJpY2UgPSBiYXNlUHJpY2UgKiAoMSArIHZhcmlhdGlvbik7XG5cbiAgICBoaXN0b3J5LnB1c2goe1xuICAgICAgZGF0ZTogZGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSxcbiAgICAgIHByaWNlOiBNYXRoLnJvdW5kKHByaWNlICogMTAwKSAvIDEwMCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoaXN0b3J5O1xufVxuXG4vKipcbiAqIEdldCByZXRhaWxlciBvZmZlcnMgZm9yIGEgcGFydFxuICogUmVhbCBpbXBsZW1lbnRhdGlvbiB1c2luZyBCYWxsaXN0aWMgYmFja2VuZDpcbiAqICAgR0VUIC9hcGkvcHJvZHVjdHMve3Byb2R1Y3RJZH0vb2ZmZXJzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZXRhaWxlck9mZmVycyhcbiAgcHJvZHVjdElkOiBzdHJpbmcsXG4pOiBQcm9taXNlPFJldGFpbGVyT2ZmZXJbXT4ge1xuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy8ke3Byb2R1Y3RJZH0vb2ZmZXJzYCxcbiAgICB7XG4gICAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIGNsaWVudCBkZXRhaWwgcGFnZSxcbiAgICAgIC8vIHNvIHdlICpkb24ndCogdXNlIGNhY2hlIGhlcmUuXG4gICAgICBjYWNoZTogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gICk7XG5cbiAgaWYgKCFyZXMub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGxvYWQgcmV0YWlsZXIgb2ZmZXJzICgke3Jlcy5zdGF0dXN9KSBmb3IgcHJvZHVjdCAke3Byb2R1Y3RJZH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBFeHBlY3RlZCBiYWNrZW5kIHBheWxvYWQgKGV4YW1wbGUpOlxuICAvLyBbXG4gIC8vICAge1xuICAvLyAgICAgXCJpZFwiOiBcInV1aWQtb3ItaW50XCIsXG4gIC8vICAgICBcIm1lcmNoYW50TmFtZVwiOiBcIkFlcm8gUHJlY2lzaW9uXCIsXG4gIC8vICAgICBcInByaWNlXCI6IDE4OS45OSxcbiAgLy8gICAgIFwib3JpZ2luYWxQcmljZVwiOiAyMTAuMCxcbiAgLy8gICAgIFwiaW5TdG9ja1wiOiB0cnVlLFxuICAvLyAgICAgXCJidXlVcmxcIjogXCJodHRwczovL2NsYXNzaWMuYXZhbnRsaW5rLmNvbS9jbGljay5waHA/Li4uXCIsXG4gIC8vICAgICBcImxhc3RVcGRhdGVkXCI6IFwiMjAyNS0xMS0zMFQxNToyMjowMFpcIlxuICAvLyAgIH0sXG4gIC8vICAgLi4uXG4gIC8vIF1cbiAgY29uc3QgZGF0YTogQXJyYXk8e1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgbWVyY2hhbnROYW1lOiBzdHJpbmc7XG4gICAgcHJpY2U6IG51bWJlcjtcbiAgICBvcmlnaW5hbFByaWNlPzogbnVtYmVyIHwgbnVsbDtcbiAgICBpblN0b2NrOiBib29sZWFuO1xuICAgIGJ1eVVybDogc3RyaW5nO1xuICAgIGxhc3RVcGRhdGVkOiBzdHJpbmc7XG4gIH0+ID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICBjb25zdCBvZmZlcnM6IFJldGFpbGVyT2ZmZXJbXSA9IGRhdGFcbiAgICAubWFwKChvKSA9PiAoe1xuICAgICAgaWQ6IFN0cmluZyhvLmlkKSxcbiAgICAgIHJldGFpbGVyTmFtZTogby5tZXJjaGFudE5hbWUsXG4gICAgICBwcmljZTogby5wcmljZSxcbiAgICAgIG9yaWdpbmFsUHJpY2U6IG8ub3JpZ2luYWxQcmljZSA/PyB1bmRlZmluZWQsXG4gICAgICBpblN0b2NrOiBvLmluU3RvY2ssXG4gICAgICBhZmZpbGlhdGVVcmw6IG8uYnV5VXJsLFxuICAgICAgbGFzdFVwZGF0ZWQ6IG8ubGFzdFVwZGF0ZWQsXG4gICAgfSkpXG4gICAgLy8gU29ydCBieSBsb3dlc3QgcHJpY2UgZmlyc3RcbiAgICAuc29ydCgoYSwgYikgPT4gYS5wcmljZSAtIGIucHJpY2UpO1xuXG4gIHJldHVybiBvZmZlcnM7XG59Il0sIm5hbWVzIjpbIkFQSV9CQVNFX1VSTCIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJnZXRQcmljaW5nSGlzdG9yeSIsInBhcnRJZCIsImJhc2VQcmljZSIsImRheXMiLCJoaXN0b3J5IiwidG9kYXkiLCJEYXRlIiwiaSIsImRhdGUiLCJzZXREYXRlIiwiZ2V0RGF0ZSIsInZhcmlhdGlvbiIsIk1hdGgiLCJyYW5kb20iLCJwcmljZSIsInB1c2giLCJ0b0lTT1N0cmluZyIsInNwbGl0Iiwicm91bmQiLCJnZXRSZXRhaWxlck9mZmVycyIsInByb2R1Y3RJZCIsInJlcyIsImZldGNoIiwiY2FjaGUiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJvZmZlcnMiLCJtYXAiLCJvIiwiaWQiLCJTdHJpbmciLCJyZXRhaWxlck5hbWUiLCJtZXJjaGFudE5hbWUiLCJvcmlnaW5hbFByaWNlIiwidW5kZWZpbmVkIiwiaW5TdG9jayIsImFmZmlsaWF0ZVVybCIsImJ1eVVybCIsImxhc3RVcGRhdGVkIiwic29ydCIsImEiLCJiIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./app/gunbuilder/[categoryId]/[partId]/data.ts\n"); - -/***/ }), - -/***/ "(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx": -/*!*******************************************************!*\ - !*** ./app/gunbuilder/[categoryId]/[partId]/page.tsx ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PartDetailPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(ssr)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./data */ \"(ssr)/./app/gunbuilder/[categoryId]/[partId]/data.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\n\nconst API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL ?? \"http://localhost:8080\";\nfunction PartDetailPage() {\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const partId = params.partId; // this is the UUID we passed in the link\n const [product, setProduct] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [offers, setOffers] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [offersLoading, setOffersLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [offersError, setOffersError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n // 1) Load product (same as before)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!partId) return;\n const controller = new AbortController();\n async function fetchProduct() {\n try {\n setLoading(true);\n setError(null);\n // For now, pull the full AR-15 list and find by UUID.\n // We can optimize with a dedicated /api/products/{uuid} later.\n const url = `${API_BASE_URL}/api/products/gunbuilder?platform=AR-15`;\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(`Failed to load product (${res.status})`);\n }\n const data = await res.json();\n const found = data.find((p)=>p.id === partId) ?? null;\n if (!found) {\n setError(\"Product not found\");\n }\n setProduct(found);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n setError(err.message ?? \"Failed to load product\");\n } finally{\n setLoading(false);\n }\n }\n fetchProduct();\n return ()=>controller.abort();\n }, [\n partId\n ]);\n // 2) Load offers for this product from Ballistic backend\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!partId) return;\n let cancelled = false;\n async function fetchOffers() {\n try {\n setOffersLoading(true);\n setOffersError(null);\n const data = await (0,_data__WEBPACK_IMPORTED_MODULE_5__.getRetailerOffers)(partId);\n if (!cancelled) {\n setOffers(data);\n }\n } catch (err) {\n if (!cancelled) {\n setOffersError(err.message ?? \"Failed to load retailer offers\");\n }\n } finally{\n if (!cancelled) {\n setOffersLoading(false);\n }\n }\n }\n fetchOffers();\n return ()=>{\n cancelled = true;\n };\n }, [\n partId\n ]);\n // Best price: prefer live offers, fall back to summary product.price\n const bestPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n if (offers.length > 0) {\n return offers[0].price;\n }\n return product?.price ?? null;\n }, [\n offers,\n product\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 132,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 133,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 131,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 130,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-5xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"mb-4 text-xs text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"hover:text-zinc-300 transition-colors\",\n children: \"Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 149,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"mx-1\",\n children: \"/\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 155,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: `/gunbuilder/${categoryId}`,\n className: \"hover:text-zinc-300 transition-colors\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 156,\n columnNumber: 11\n }, this),\n product && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"mx-1\",\n children: \"/\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 164,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: product.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 165,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 148,\n columnNumber: 9\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading product…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 171,\n columnNumber: 11\n }, this) : error || !product ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-xl font-semibold mb-2\",\n children: \"Product Unavailable\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 174,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 mb-4\",\n children: error ?? \"We couldn’t find this product.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 175,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: `/gunbuilder/${categoryId}`,\n className: \"text-amber-300 hover:text-amber-200 underline text-sm\",\n children: [\n \"Back to \",\n category.name,\n \" parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 173,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-6 md:grid-cols-[minmax(0,2fr)_minmax(0,1.3fr)] items-start\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n product.mainImageUrl && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-hidden rounded-lg border border-zinc-800 bg-zinc-950\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: product.mainImageUrl,\n alt: product.name,\n className: \"w-full object-contain max-h-80 bg-zinc-950\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 192,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 190,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: product.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 199,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl md:text-3xl font-semibold tracking-tight\",\n children: product.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 202,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Platform:\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: product.platform\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 207,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 205,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Role: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: product.partRole\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 210,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 209,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 188,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/70 p-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs uppercase tracking-[0.2em] text-zinc-500 mb-1\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: bestPrice && bestPrice > 0 ? `$${bestPrice.toFixed(2)}` : \"—\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 220,\n columnNumber: 17\n }, this),\n !bestPrice && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-500\",\n children: \"Pricing not available yet. Live pricing will appear once offers are imported.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 226,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n offersLoading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: \"Loading offers…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 236,\n columnNumber: 19\n }, this),\n offersError && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-red-400\",\n children: offersError\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 239,\n columnNumber: 19\n }, this),\n !offersLoading && !offersError && offers.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1\",\n children: offers.map((offer)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: offer.affiliateUrl,\n target: \"_blank\",\n rel: \"noreferrer\",\n className: \"flex items-center justify-between rounded-md border border-zinc-700 bg-zinc-900 px-3 py-1.5 text-xs hover:bg-zinc-800 transition-colors\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200\",\n children: offer.retailerName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 253,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold text-amber-300\",\n children: [\n \"$\",\n offer.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 256,\n columnNumber: 25\n }, this)\n ]\n }, offer.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 244,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 234,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: `/gunbuilder?select=${categoryId}:${product.id}`,\n className: \"block w-full rounded-md bg-amber-400 text-black text-sm font-semibold text-center py-2.5 hover:bg-amber-300 transition-colors\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 266,\n columnNumber: 17\n }, this),\n product.buyUrl ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: product.buyUrl,\n target: \"_blank\",\n rel: \"noreferrer\",\n className: \"block w-full rounded-md border border-zinc-700 bg-zinc-900 text-xs font-medium text-zinc-200 text-center py-2 hover:bg-zinc-800 transition-colors\",\n children: \"View on Merchant Site\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n disabled: true,\n className: \"block w-full rounded-md border border-zinc-800 bg-zinc-900/60 text-xs font-medium text-zinc-500 text-center py-2 cursor-not-allowed\",\n children: \"External link coming soon\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 283,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 265,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 215,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 186,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 146,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 145,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vW3BhcnRJZF0vcGFnZS50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUVxRDtBQUN4QjtBQUNlO0FBQ1E7QUFLcEM7QUFhaEIsTUFBTU8sZUFDSkMsUUFBUUMsR0FBRyxDQUFDQyx3QkFBd0IsSUFBSTtBQUUzQixTQUFTQztJQUN0QixNQUFNQyxTQUFTUiwwREFBU0E7SUFDeEIsTUFBTVMsYUFBYUQsT0FBT0MsVUFBVTtJQUNwQyxNQUFNQyxTQUFTRixPQUFPRSxNQUFNLEVBQVkseUNBQXlDO0lBRWpGLE1BQU0sQ0FBQ0MsU0FBU0MsV0FBVyxHQUFHZCwrQ0FBUUEsQ0FBa0M7SUFDeEUsTUFBTSxDQUFDZSxTQUFTQyxXQUFXLEdBQUdoQiwrQ0FBUUEsQ0FBQztJQUN2QyxNQUFNLENBQUNpQixPQUFPQyxTQUFTLEdBQUdsQiwrQ0FBUUEsQ0FBZ0I7SUFFbEQsTUFBTSxDQUFDbUIsUUFBUUMsVUFBVSxHQUFHcEIsK0NBQVFBLENBQWtCLEVBQUU7SUFDeEQsTUFBTSxDQUFDcUIsZUFBZUMsaUJBQWlCLEdBQUd0QiwrQ0FBUUEsQ0FBQztJQUNuRCxNQUFNLENBQUN1QixhQUFhQyxlQUFlLEdBQUd4QiwrQ0FBUUEsQ0FBZ0I7SUFFOUQsTUFBTXlCLFdBQVcxQiw4Q0FBT0EsQ0FDdEIsSUFBTUksNkRBQVVBLENBQUN1QixJQUFJLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUMsRUFBRSxLQUFLakIsYUFDdEM7UUFBQ0E7S0FBVztJQUdkLG1DQUFtQztJQUNuQ2IsZ0RBQVNBLENBQUM7UUFDUixJQUFJLENBQUNjLFFBQVE7UUFFYixNQUFNaUIsYUFBYSxJQUFJQztRQUV2QixlQUFlQztZQUNiLElBQUk7Z0JBQ0ZmLFdBQVc7Z0JBQ1hFLFNBQVM7Z0JBRVQsc0RBQXNEO2dCQUN0RCwrREFBK0Q7Z0JBQy9ELE1BQU1jLE1BQU0sQ0FBQyxFQUFFM0IsYUFBYSx1Q0FBdUMsQ0FBQztnQkFDcEUsTUFBTTRCLE1B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OERBQUNxQjs0Q0FBRVcsV0FBVTtzREFBd0I7Ozs7Ozt3Q0FFdEM5Qiw2QkFDQyw4REFBQ21COzRDQUFFVyxXQUFVO3NEQUNWOUI7Ozs7Ozt3Q0FHSixDQUFDRixpQkFBaUIsQ0FBQ0UsZUFBZUosT0FBTytCLE1BQU0sR0FBRyxtQkFDakQsOERBQUNJOzRDQUFJRCxXQUFVO3NEQUNabEMsT0FBT2lELEdBQUcsQ0FBQyxDQUFDQyxzQkFDWCw4REFBQ0M7b0RBRUNkLE1BQU1hLE1BQU1FLFlBQVk7b0RBQ3hCQyxRQUFPO29EQUNQQyxLQUFJO29EQUNKcEIsV0FBVTs7c0VBRVYsOERBQUNLOzREQUFLTCxXQUFVO3NFQUNiZ0IsTUFBTUssWUFBWTs7Ozs7O3NFQUVyQiw4REFBQ2hCOzREQUFLTCxXQUFVOztnRUFBK0I7Z0VBQzNDZ0IsTUFBTWxCLEtBQUssQ0FBQ2dCLE9BQU8sQ0FBQzs7Ozs7Ozs7bURBVm5CRSxNQUFNekMsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs4Q0FrQnZCLDhEQUFDMEI7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDcEQsaURBQUlBOzRDQUNIdUQsTUFBTSxDQUFDLG1CQUFtQixFQUFFN0MsV0FBVyxDQUFDLEVBQUVFLFFBQVFlLEVBQUUsQ0FBQyxDQUFDOzRDQUN0RHlCLFdBQVU7c0RBQ1g7Ozs7Ozt3Q0FJQXhDLFFBQVE4RCxNQUFNLGlCQUNiLDhEQUFDTDs0Q0FDQ2QsTUFBTTNDLFFBQVE4RCxNQUFNOzRDQUNwQkgsUUFBTzs0Q0FDUEMsS0FBSTs0Q0FDSnBCLFdBQVU7c0RBQ1g7Ozs7O2lFQUlELDhEQUFDdUI7NENBQ0NDLE1BQUs7NENBQ0xDLFFBQVE7NENBQ1J6QixXQUFVO3NEQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVduQiIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLy4vYXBwL2d1bmJ1aWxkZXIvW2NhdGVnb3J5SWRdL1twYXJ0SWRdL3BhZ2UudHN4PzQyYzEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVBhcmFtcyB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkIH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHtcbiAgZ2V0UmV0YWlsZXJPZmZlcnMsXG4gIHR5cGUgUmV0YWlsZXJPZmZlcixcbn0gZnJvbSBcIi4vZGF0YVwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZzsgLy8gYmFja2VuZCBVVUlEIHN0cmluZ1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYXJ0RGV0YWlsUGFnZSgpIHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGNhdGVnb3J5SWQgPSBwYXJhbXMuY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkO1xuICBjb25zdCBwYXJ0SWQgPSBwYXJhbXMucGFydElkIGFzIHN0cmluZzsgLy8gdGhpcyBpcyB0aGUgVVVJRCB3ZSBwYXNzZWQgaW4gdGhlIGxpbmtcblxuICBjb25zdCBbcHJvZHVjdCwgc2V0UHJvZHVjdF0gPSB1c2VTdGF0ZTxHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgW29mZmVycywgc2V0T2ZmZXJzXSA9IHVzZVN0YXRlPFJldGFpbGVyT2ZmZXJbXT4oW10pO1xuICBjb25zdCBbb2ZmZXJzTG9hZGluZywgc2V0T2ZmZXJzTG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW29mZmVyc0Vycm9yLCBzZXRPZmZlcnNFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgLy8gMSkgTG9hZCBwcm9kdWN0IChzYW1lIGFzIGJlZm9yZSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXBhcnRJZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJvZHVjdCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIC8vIEZvciBub3csIHB1bGwgdGhlIGZ1bGwgQVItMTUgbGlzdCBhbmQgZmluZCBieSBVVUlELlxuICAgICAgICAvLyBXZSBjYW4gb3B0aW1pemUgd2l0aCBhIGRlZGljYXRlZCAvYXBpL3Byb2R1Y3RzL3t1dWlkfSBsYXRlci5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWA7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0ICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBjb25zdCBmb3VuZCA9IGRhdGEuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkKSA/PyBudWxsO1xuXG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICBzZXRFcnJvcihcIlByb2R1Y3Qgbm90IGZvdW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0UHJvZHVjdChmb3VuZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdFwiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoUHJvZHVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW3BhcnRJZF0pO1xuXG4gIC8vIDIpIExvYWQgb2ZmZXJzIGZvciB0aGlzIHByb2R1Y3QgZnJvbSBCYWxsaXN0aWMgYmFja2VuZFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcGFydElkKSByZXR1cm47XG5cbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaE9mZmVycygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldE9mZmVyc0xvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldE9mZmVyc0Vycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZXRhaWxlck9mZmVycyhwYXJ0SWQpO1xuXG4gICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgc2V0T2ZmZXJzKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldE9mZmVyc0Vycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcmV0YWlsZXIgb2ZmZXJzXCIpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldE9mZmVyc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hPZmZlcnMoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgIH07XG4gIH0sIFtwYXJ0SWRdKTtcblxuICAvLyBCZXN0IHByaWNlOiBwcmVmZXIgbGl2ZSBvZmZlcnMsIGZhbGwgYmFjayB0byBzdW1tYXJ5IHByb2R1Y3QucHJpY2VcbiAgY29uc3QgYmVzdFByaWNlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKG9mZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gb2ZmZXJzWzBdLnByaWNlO1xuICAgIH1cbiAgICByZXR1cm4gcHJvZHVjdD8ucHJpY2UgPz8gbnVsbDtcbiAgfSwgW29mZmVycywgcHJvZHVjdF0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIG1iLTRcIj5DYXRlZ29yeSBOb3QgRm91bmQ8L2gxPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBSZXR1cm4gdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTV4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEJyZWFkY3J1bWJzICovfVxuICAgICAgICA8bmF2IGNsYXNzTmFtZT1cIm1iLTQgdGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJob3Zlcjp0ZXh0LXppbmMtMzAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBHdW5idWlsZGVyXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm14LTFcIj4vPC9zcGFuPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJob3Zlcjp0ZXh0LXppbmMtMzAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX1cbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAge3Byb2R1Y3QgJiYgKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXgtMVwiPi88L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0zMDBcIj57cHJvZHVjdC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbmF2PlxuXG4gICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkxvYWRpbmcgcHJvZHVjdOKApjwvcD5cbiAgICAgICAgKSA6IGVycm9yIHx8ICFwcm9kdWN0ID8gKFxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LXNlbWlib2xkIG1iLTJcIj5Qcm9kdWN0IFVuYXZhaWxhYmxlPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCBtYi00XCI+XG4gICAgICAgICAgICAgIHtlcnJvciA/PyBcIldlIGNvdWxkbuKAmXQgZmluZCB0aGlzIHByb2R1Y3QuXCJ9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfWB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZSB0ZXh0LXNtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQmFjayB0byB7Y2F0ZWdvcnkubmFtZX0gcGFydHNcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTYgbWQ6Z3JpZC1jb2xzLVttaW5tYXgoMCwyZnIpX21pbm1heCgwLDEuM2ZyKV0gaXRlbXMtc3RhcnRcIj5cbiAgICAgICAgICAgIHsvKiBMZWZ0OiBpbWFnZSArIG1ldGEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICB7cHJvZHVjdC5tYWluSW1hZ2VVcmwgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MFwiPlxuICAgICAgICAgICAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAbmV4dC9uZXh0L25vLWltZy1lbGVtZW50ICovfVxuICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICBzcmM9e3Byb2R1Y3QubWFpbkltYWdlVXJsfVxuICAgICAgICAgICAgICAgICAgICBhbHQ9e3Byb2R1Y3QubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIG9iamVjdC1jb250YWluIG1heC1oLTgwIGJnLXppbmMtOTUwXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICB7cHJvZHVjdC5icmFuZH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge3Byb2R1Y3QubmFtZX1cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgUGxhdGZvcm06e1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0zMDBcIj57cHJvZHVjdC5wbGF0Zm9ybX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgUm9sZTogPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTMwMFwiPntwcm9kdWN0LnBhcnRSb2xlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBSaWdodDogcHJpY2luZyArIGFjdGlvbnMgKi99XG4gICAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzcwIHAtNCBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIHRleHQtemluYy01MDAgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgUHJpY2VcbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAgICAge2Jlc3RQcmljZSAmJiBiZXN0UHJpY2UgPiAwXG4gICAgICAgICAgICAgICAgICAgID8gYCQke2Jlc3RQcmljZS50b0ZpeGVkKDIpfWBcbiAgICAgICAgICAgICAgICAgICAgOiBcIuKAlFwifVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICB7IWJlc3RQcmljZSAmJiAoXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICBQcmljaW5nIG5vdCBhdmFpbGFibGUgeWV0LiBMaXZlIHByaWNpbmcgd2lsbCBhcHBlYXIgb25jZVxuICAgICAgICAgICAgICAgICAgICBvZmZlcnMgYXJlIGltcG9ydGVkLlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBPZmZlcnMgbGlzdCAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7b2ZmZXJzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIG9mZmVyc+KApjwvcD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtvZmZlcnNFcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICB7b2ZmZXJzRXJyb3J9XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7IW9mZmVyc0xvYWRpbmcgJiYgIW9mZmVyc0Vycm9yICYmIG9mZmVycy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHtvZmZlcnMubWFwKChvZmZlcikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29mZmVyLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17b2ZmZXIuYWZmaWxpYXRlVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCBweC0zIHB5LTEuNSB0ZXh0LXhzIGhvdmVyOmJnLXppbmMtODAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtvZmZlci5yZXRhaWxlck5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7b2ZmZXIucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyP3NlbGVjdD0ke2NhdGVnb3J5SWR9OiR7cHJvZHVjdC5pZH1gfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYmctYW1iZXItNDAwIHRleHQtYmxhY2sgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtY2VudGVyIHB5LTIuNSBob3ZlcjpiZy1hbWJlci0zMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEFkZCB0byBCdWlsZFxuICAgICAgICAgICAgICAgIDwvTGluaz5cblxuICAgICAgICAgICAgICAgIHtwcm9kdWN0LmJ1eVVybCA/IChcbiAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9e3Byb2R1Y3QuYnV5VXJsfVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICByZWw9XCJub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0yMDAgdGV4dC1jZW50ZXIgcHktMiBob3ZlcjpiZy16aW5jLTgwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFZpZXcgb24gTWVyY2hhbnQgU2l0ZVxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTAwLzYwIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS0yIGN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEV4dGVybmFsIGxpbmsgY29taW5nIHNvb25cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTGluayIsInVzZVBhcmFtcyIsIkNBVEVHT1JJRVMiLCJnZXRSZXRhaWxlck9mZmVycyIsIkFQSV9CQVNFX1VSTCIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQYXJ0RGV0YWlsUGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJwYXJ0SWQiLCJwcm9kdWN0Iiwic2V0UHJvZHVjdCIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsIm9mZmVycyIsInNldE9mZmVycyIsIm9mZmVyc0xvYWRpbmciLCJzZXRPZmZlcnNMb2FkaW5nIiwib2ZmZXJzRXJyb3IiLCJzZXRPZmZlcnNFcnJvciIsImNhdGVnb3J5IiwiZmluZCIsImMiLCJpZCIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3QiLCJ1cmwiLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsImZvdW5kIiwicCIsImVyciIsIm5hbWUiLCJtZXNzYWdlIiwiYWJvcnQiLCJjYW5jZWxsZWQiLCJmZXRjaE9mZmVycyIsImJlc3RQcmljZSIsImxlbmd0aCIsInByaWNlIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsIm5hdiIsInNwYW4iLCJtYWluSW1hZ2VVcmwiLCJpbWciLCJzcmMiLCJhbHQiLCJicmFuZCIsInBsYXRmb3JtIiwicGFydFJvbGUiLCJhc2lkZSIsInRvRml4ZWQiLCJtYXAiLCJvZmZlciIsImEiLCJhZmZpbGlhdGVVcmwiLCJ0YXJnZXQiLCJyZWwiLCJyZXRhaWxlck5hbWUiLCJidXlVcmwiLCJidXR0b24iLCJ0eXBlIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx\n"); - -/***/ }), - -/***/ "(ssr)/./data/gunbuilderParts.ts": -/*!*********************************!*\ - !*** ./data/gunbuilderParts.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CATEGORIES: () => (/* binding */ CATEGORIES),\n/* harmony export */ PARTS: () => (/* binding */ PARTS)\n/* harmony export */ });\nconst CATEGORIES = [\n {\n id: \"lower\",\n name: \"Lower Receiver\"\n },\n {\n id: \"upper\",\n name: \"Upper Receiver\"\n },\n {\n id: \"barrel\",\n name: \"Barrel\"\n },\n {\n id: \"handguard\",\n name: \"Handguard\"\n },\n {\n id: \"stock\",\n name: \"Stock\"\n },\n {\n id: \"optic\",\n name: \"Optic\"\n }\n];\nconst PARTS = [\n {\n id: \"lower-aero-m4e1\",\n name: \"M4E1 Stripped Lower Receiver\",\n brand: \"Aero Precision\",\n categoryId: \"lower\",\n price: 129.99,\n affiliateUrl: \"https://example.com/aero-m4e1\",\n notes: \"Forged 7075-T6, threaded bolt catch\"\n },\n {\n id: \"lower-solgw\",\n name: \"Loyal 9 Stripped Lower\",\n brand: \"Sons of Liberty Gun Works\",\n categoryId: \"lower\",\n price: 189.0,\n affiliateUrl: \"https://example.com/solgw-lower\"\n },\n {\n id: \"upper-aero-enhanced\",\n name: \"Enhanced Upper Receiver\",\n brand: \"Aero Precision\",\n categoryId: \"upper\",\n price: 149.99,\n affiliateUrl: \"https://example.com/aero-enhanced-upper\"\n },\n {\n id: \"upper-bcm-m4\",\n name: \"M4 Upper Receiver\",\n brand: \"BCM\",\n categoryId: \"upper\",\n price: 159.99,\n affiliateUrl: \"https://example.com/bcm-m4-upper\"\n },\n {\n id: \"barrel-criterion-16\",\n name: '16\" Hybrid Barrel',\n brand: \"Criterion\",\n categoryId: \"barrel\",\n price: 279.99,\n affiliateUrl: \"https://example.com/criterion-16\",\n notes: \"Mid-length gas, chrome-lined\"\n },\n {\n id: \"barrel-ba-13-9\",\n name: '13.9\" Hanson Performance Series',\n brand: \"Ballistic Advantage\",\n categoryId: \"barrel\",\n price: 209.99,\n affiliateUrl: \"https://example.com/ba-13-9\"\n },\n {\n id: \"hg-geissele-mk8\",\n name: 'MK8 Rail 13.5\"',\n brand: \"Geissele\",\n categoryId: \"handguard\",\n price: 324.99,\n affiliateUrl: \"https://example.com/geissele-mk8\"\n },\n {\n id: \"hg-centurion-c4\",\n name: 'C4 M-LOK 12\"',\n brand: \"Centurion Arms\",\n categoryId: \"handguard\",\n price: 284.99,\n affiliateUrl: \"https://example.com/centurion-c4\"\n },\n {\n id: \"stock-b5-bravo\",\n name: \"BRAVO Stock\",\n brand: \"B5 Systems\",\n categoryId: \"stock\",\n price: 74.99,\n affiliateUrl: \"https://example.com/b5-bravo\"\n },\n {\n id: \"stock-magpul-sl\",\n name: \"MOE SL Carbine Stock\",\n brand: \"Magpul\",\n categoryId: \"stock\",\n price: 69.99,\n affiliateUrl: \"https://example.com/magpul-sl\"\n },\n {\n id: \"optic-eotech-exps3\",\n name: \"EXPS3 Holographic Sight\",\n brand: \"EOTECH\",\n categoryId: \"optic\",\n price: 749.0,\n affiliateUrl: \"https://example.com/eotech-exps3\"\n },\n {\n id: \"optic-holosun-509t\",\n name: \"HE509T Red Dot\",\n brand: \"Holosun\",\n categoryId: \"optic\",\n price: 349.99,\n affiliateUrl: \"https://example.com/holosun-509t\"\n }\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9kYXRhL2d1bmJ1aWxkZXJQYXJ0cy50cyIsIm1hcHBpbmdzIjoiOzs7OztBQUVPLE1BQU1BLGFBQXlCO0lBQ3BDO1FBQUVDLElBQUk7UUFBU0MsTUFBTTtJQUFpQjtJQUN0QztRQUFFRCxJQUFJO1FBQVNDLE1BQU07SUFBaUI7SUFDdEM7UUFBRUQsSUFBSTtRQUFVQyxNQUFNO0lBQVM7SUFDL0I7UUFBRUQsSUFBSTtRQUFhQyxNQUFNO0lBQVk7SUFDckM7UUFBRUQsSUFBSTtRQUFTQyxNQUFNO0lBQVE7SUFDN0I7UUFBRUQsSUFBSTtRQUFTQyxNQUFNO0lBQVE7Q0FDOUIsQ0FBQztBQUVLLE1BQU1DLFFBQWdCO0lBQzNCO1FBQ0VGLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO1FBQ2RDLE9BQU87SUFDVDtJQUNBO1FBQ0VQLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO1FBQ2RDLE9BQU87SUFDVDtJQUNBO1FBQ0VQLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0NBQ0QsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLy4vZGF0YS9ndW5idWlsZGVyUGFydHMudHM/NzNhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhdGVnb3J5LCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUklFUzogQ2F0ZWdvcnlbXSA9IFtcbiAgeyBpZDogXCJsb3dlclwiLCBuYW1lOiBcIkxvd2VyIFJlY2VpdmVyXCIgfSxcbiAgeyBpZDogXCJ1cHBlclwiLCBuYW1lOiBcIlVwcGVyIFJlY2VpdmVyXCIgfSxcbiAgeyBpZDogXCJiYXJyZWxcIiwgbmFtZTogXCJCYXJyZWxcIiB9LFxuICB7IGlkOiBcImhhbmRndWFyZFwiLCBuYW1lOiBcIkhhbmRndWFyZFwiIH0sXG4gIHsgaWQ6IFwic3RvY2tcIiwgbmFtZTogXCJTdG9ja1wiIH0sXG4gIHsgaWQ6IFwib3B0aWNcIiwgbmFtZTogXCJPcHRpY1wiIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgUEFSVFM6IFBhcnRbXSA9IFtcbiAge1xuICAgIGlkOiBcImxvd2VyLWFlcm8tbTRlMVwiLFxuICAgIG5hbWU6IFwiTTRFMSBTdHJpcHBlZCBMb3dlciBSZWNlaXZlclwiLFxuICAgIGJyYW5kOiBcIkFlcm8gUHJlY2lzaW9uXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJsb3dlclwiLFxuICAgIHByaWNlOiAxMjkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYWVyby1tNGUxXCIsXG4gICAgbm90ZXM6IFwiRm9yZ2VkIDcwNzUtVDYsIHRocmVhZGVkIGJvbHQgY2F0Y2hcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcImxvd2VyLXNvbGd3XCIsXG4gICAgbmFtZTogXCJMb3lhbCA5IFN0cmlwcGVkIExvd2VyXCIsXG4gICAgYnJhbmQ6IFwiU29ucyBvZiBMaWJlcnR5IEd1biBXb3Jrc1wiLFxuICAgIGNhdGVnb3J5SWQ6IFwibG93ZXJcIixcbiAgICBwcmljZTogMTg5LjAsXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vc29sZ3ctbG93ZXJcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcInVwcGVyLWFlcm8tZW5oYW5jZWRcIixcbiAgICBuYW1lOiBcIkVuaGFuY2VkIFVwcGVyIFJlY2VpdmVyXCIsXG4gICAgYnJhbmQ6IFwiQWVybyBQcmVjaXNpb25cIixcbiAgICBjYXRlZ29yeUlkOiBcInVwcGVyXCIsXG4gICAgcHJpY2U6IDE0OS45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZXJvLWVuaGFuY2VkLXVwcGVyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ1cHBlci1iY20tbTRcIixcbiAgICBuYW1lOiBcIk00IFVwcGVyIFJlY2VpdmVyXCIsXG4gICAgYnJhbmQ6IFwiQkNNXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJ1cHBlclwiLFxuICAgIHByaWNlOiAxNTkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmNtLW00LXVwcGVyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJiYXJyZWwtY3JpdGVyaW9uLTE2XCIsXG4gICAgbmFtZTogXCIxNlxcXCIgSHlicmlkIEJhcnJlbFwiLFxuICAgIGJyYW5kOiBcIkNyaXRlcmlvblwiLFxuICAgIGNhdGVnb3J5SWQ6IFwiYmFycmVsXCIsXG4gICAgcHJpY2U6IDI3OS45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9jcml0ZXJpb24tMTZcIixcbiAgICBub3RlczogXCJNaWQtbGVuZ3RoIGdhcywgY2hyb21lLWxpbmVkXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJiYXJyZWwtYmEtMTMtOVwiLFxuICAgIG5hbWU6IFwiMTMuOVxcXCIgSGFuc29uIFBlcmZvcm1hbmNlIFNlcmllc1wiLFxuICAgIGJyYW5kOiBcIkJhbGxpc3RpYyBBZHZhbnRhZ2VcIixcbiAgICBjYXRlZ29yeUlkOiBcImJhcnJlbFwiLFxuICAgIHByaWNlOiAyMDkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmEtMTMtOVwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiaGctZ2Vpc3NlbGUtbWs4XCIsXG4gICAgbmFtZTogXCJNSzggUmFpbCAxMy41XFxcIlwiLFxuICAgIGJyYW5kOiBcIkdlaXNzZWxlXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJoYW5kZ3VhcmRcIixcbiAgICBwcmljZTogMzI0Ljk5LFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2dlaXNzZWxlLW1rOFwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiaGctY2VudHVyaW9uLWM0XCIsXG4gICAgbmFtZTogXCJDNCBNLUxPSyAxMlxcXCJcIixcbiAgICBicmFuZDogXCJDZW50dXJpb24gQXJtc1wiLFxuICAgIGNhdGVnb3J5SWQ6IFwiaGFuZGd1YXJkXCIsXG4gICAgcHJpY2U6IDI4NC45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9jZW50dXJpb24tYzRcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcInN0b2NrLWI1LWJyYXZvXCIsXG4gICAgbmFtZTogXCJCUkFWTyBTdG9ja1wiLFxuICAgIGJyYW5kOiBcIkI1IFN5c3RlbXNcIixcbiAgICBjYXRlZ29yeUlkOiBcInN0b2NrXCIsXG4gICAgcHJpY2U6IDc0Ljk5LFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2I1LWJyYXZvXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzdG9jay1tYWdwdWwtc2xcIixcbiAgICBuYW1lOiBcIk1PRSBTTCBDYXJiaW5lIFN0b2NrXCIsXG4gICAgYnJhbmQ6IFwiTWFncHVsXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJzdG9ja1wiLFxuICAgIHByaWNlOiA2OS45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9tYWdwdWwtc2xcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcIm9wdGljLWVvdGVjaC1leHBzM1wiLFxuICAgIG5hbWU6IFwiRVhQUzMgSG9sb2dyYXBoaWMgU2lnaHRcIixcbiAgICBicmFuZDogXCJFT1RFQ0hcIixcbiAgICBjYXRlZ29yeUlkOiBcIm9wdGljXCIsXG4gICAgcHJpY2U6IDc0OS4wLFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2VvdGVjaC1leHBzM1wiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwib3B0aWMtaG9sb3N1bi01MDl0XCIsXG4gICAgbmFtZTogXCJIRTUwOVQgUmVkIERvdFwiLFxuICAgIGJyYW5kOiBcIkhvbG9zdW5cIixcbiAgICBjYXRlZ29yeUlkOiBcIm9wdGljXCIsXG4gICAgcHJpY2U6IDM0OS45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9ob2xvc3VuLTUwOXRcIixcbiAgfSxcbl07XG4iXSwibmFtZXMiOlsiQ0FURUdPUklFUyIsImlkIiwibmFtZSIsIlBBUlRTIiwiYnJhbmQiLCJjYXRlZ29yeUlkIiwicHJpY2UiLCJhZmZpbGlhdGVVcmwiLCJub3RlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./data/gunbuilderParts.ts\n"); - -/***/ }), - -/***/ "(rsc)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"8e3b978f6080\");\nif (false) {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvZ2xvYmFscy5jc3MiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlFQUFlLGNBQWM7QUFDN0IsSUFBSSxLQUFVLEVBQUUsRUFBdUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2FwcC9nbG9iYWxzLmNzcz9jZDI4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiOGUzYjk3OGY2MDgwXCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./app/globals.css\n"); - -/***/ }), - -/***/ "(rsc)/./app/gunbuilder/[categoryId]/[partId]/page.tsx": -/*!*******************************************************!*\ - !*** ./app/gunbuilder/[categoryId]/[partId]/page.tsx ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ $$typeof: () => (/* binding */ $$typeof), -/* harmony export */ __esModule: () => (/* binding */ __esModule), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js"); - -const proxy = (0,next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__.createProxy)(String.raw`/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx`) - -// Accessing the __esModule property and exporting $$typeof are required here. -// The __esModule getter forces the proxy target to create the default export -// and the $$typeof value is for rendering logic to determine if the module -// is a client boundary. -const { __esModule, $$typeof } = proxy; -const __default__ = proxy.default; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__.createProxy)(String.raw`/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx#default`)); - - -/***/ }), - -/***/ "(rsc)/./app/layout.tsx": -/*!************************!*\ - !*** ./app/layout.tsx ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RootLayout),\n/* harmony export */ metadata: () => (/* binding */ metadata)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./globals.css */ \"(rsc)/./app/globals.css\");\n\n\nconst metadata = {\n title: \"Gunbuilder Prototype | Shadow Standard\",\n description: \"Prototype AR-15 build tool by Shadow Standard.\"\n};\nfunction RootLayout({ children }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n children: children\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 12,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 11,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvbGF5b3V0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBdUI7QUFHaEIsTUFBTUEsV0FBVztJQUN0QkMsT0FBTztJQUNQQyxhQUFhO0FBQ2YsRUFBRTtBQUVhLFNBQVNDLFdBQVcsRUFBRUMsUUFBUSxFQUEyQjtJQUN0RSxxQkFDRSw4REFBQ0M7UUFBS0MsTUFBSztrQkFDVCw0RUFBQ0M7c0JBQU1IOzs7Ozs7Ozs7OztBQUdiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvLi9hcHAvbGF5b3V0LnRzeD85OTg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vZ2xvYmFscy5jc3NcIjtcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjb25zdCBtZXRhZGF0YSA9IHtcbiAgdGl0bGU6IFwiR3VuYnVpbGRlciBQcm90b3R5cGUgfCBTaGFkb3cgU3RhbmRhcmRcIixcbiAgZGVzY3JpcHRpb246IFwiUHJvdG90eXBlIEFSLTE1IGJ1aWxkIHRvb2wgYnkgU2hhZG93IFN0YW5kYXJkLlwiLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUm9vdExheW91dCh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWwgbGFuZz1cImVuXCI+XG4gICAgICA8Ym9keT57Y2hpbGRyZW59PC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJtZXRhZGF0YSIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJSb290TGF5b3V0IiwiY2hpbGRyZW4iLCJodG1sIiwibGFuZyIsImJvZHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./app/layout.tsx\n"); - -/***/ }) - -}; -; - -// load runtime -var __webpack_require__ = require("../../../../webpack-runtime.js"); -__webpack_require__.C(exports); -var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) -var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"))); -module.exports = __webpack_exports__; - -})(); \ No newline at end of file diff --git a/.next/server/app/gunbuilder/[categoryId]/[partId]/page_client-reference-manifest.js b/.next/server/app/gunbuilder/[categoryId]/[partId]/page_client-reference-manifest.js deleted file mode 100644 index df6c256..0000000 --- a/.next/server/app/gunbuilder/[categoryId]/[partId]/page_client-reference-manifest.js +++ /dev/null @@ -1 +0,0 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/[categoryId]/[partId]/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":["app/gunbuilder/[categoryId]/[partId]/page","static/chunks/app/gunbuilder/%5BcategoryId%5D/%5BpartId%5D/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":["app/gunbuilder/[categoryId]/page","static/chunks/app/gunbuilder/%5BcategoryId%5D/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page":[]}} \ No newline at end of file diff --git a/.next/server/app/gunbuilder/[categoryId]/page.js b/.next/server/app/gunbuilder/[categoryId]/page.js index fbc1d61..56eb3eb 100644 --- a/.next/server/app/gunbuilder/[categoryId]/page.js +++ b/.next/server/app/gunbuilder/[categoryId]/page.js @@ -137,7 +137,7 @@ eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__w /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CategoryPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(ssr)/./data/gunbuilderParts.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\nconst API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL ?? \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // NEW: filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n // NEW: build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) return {};\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n const roles = CATEGORY_TO_PART_ROLES[categoryId] ?? [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = `${API_BASE_URL}/api/products/gunbuilder${roles.length ? `?${search.toString()}` : \"\"}`;\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(`Failed to load products (${res.status})`);\n }\n const data = await res.json();\n const normalized = data.map((p)=>({\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: p.price ?? 0,\n imageUrl: p.mainImageUrl ?? undefined,\n url: p.buyUrl ?? undefined,\n notes: undefined\n }));\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n setError(err.message ?? \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // NEW: persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) return;\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch {\n // ignore\n }\n }, [\n build\n ]);\n // NEW: handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // NEW: available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // NEW: filtered + sorted parts\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 196,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 195,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 194,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 225,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 229,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 228,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 231,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: `px-3 py-1.5 text-xs font-medium rounded transition-colors ${viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"}`,\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: `px-3 py-1.5 text-xs font-medium rounded transition-colors ${viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"}`,\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 250,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 223,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 278,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 272,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 285,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 297,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 291,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 284,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 317,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 318,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 319,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 320,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 283,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 271,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 328,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 332,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 353,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 356,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 350,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 361,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 349,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: `/gunbuilder/${categoryId}/${part.id}`,\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: `flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center ${isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"}`,\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 372,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 365,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 345,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 392,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 393,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 394,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 395,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 391,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 409,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 413,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 408,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 418,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 421,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: `/gunbuilder/${categoryId}/${part.id}`,\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 425,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: `rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap ${isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"}`,\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 431,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 424,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 407,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 398,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 268,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 214,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 213,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7QUFnQnBELE1BQU1PLGVBQ0pDLFFBQVFDLEdBQUcsQ0FBQ0Msd0JBQXdCLElBQUk7QUFFMUMsTUFBTUMseUJBQXVEO0lBQzNEQyxPQUFPO1FBQUM7S0FBaUI7SUFDekJDLFFBQVE7UUFBQztLQUFTO0lBQ2xCQyxXQUFXO1FBQUM7S0FBWTtJQUN4QkMsZ0JBQWdCO1FBQUM7S0FBa0I7SUFDbkNDLFFBQVE7UUFBQztLQUFhO0lBQ3RCQyxZQUFZO1FBQUM7S0FBa0I7SUFDL0JDLFFBQVE7UUFBQztLQUFRO0FBQ25CO0FBT0EsTUFBTUMsY0FBYztBQUVMLFNBQVNDO0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCwyQkFBMkI7SUFDM0IsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFFakQsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQ2tDLE9BQU9DLFNBQVMsR0FBR25DLCtDQUFRQSxDQUFhO1FBQzdDLElBQUksSUFBNkIsRUFBRSxPQUFPLENBQUM7UUFDM0MsSUFBSTtZQUNGLE1BQU1vQyxTQUFTQyxPQUFPQyxZQUFZLENBQUND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QUNDQyxNQUFLO2dFQUNMQyxTQUFTLElBQ1A1QixpQkFBaUIvRCxZQUFZc0csS0FBSzdFLEVBQUU7Z0VBRXRDeUQsV0FBVyxDQUFDLGlGQUFpRixFQUMzRmpCLGFBQ0ksdUVBQ0EsNkNBQ0wsQ0FBQzswRUFFREEsYUFBYSxzQkFBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0F0Q3JDcUMsS0FBSzdFLEVBQUU7Ozs7O29DQTRDbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeD84YjVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG50eXBlIFZpZXdNb2RlID0gXCJjYXJkXCIgfCBcImxpc3RcIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbmNvbnN0IENBVEVHT1JZX1RPX1BBUlRfUk9MRVM6IFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmdbXT4gPSB7XG4gIHVwcGVyOiBbXCJ1cHBlci1yZWNlaXZlclwiXSxcbiAgYmFycmVsOiBbXCJiYXJyZWxcIl0sXG4gIGhhbmRndWFyZDogW1wiaGFuZGd1YXJkXCJdLFxuICBjaGFyZ2luZ0hhbmRsZTogW1wiY2hhcmdpbmctaGFuZGxlXCJdLFxuICBidWZmZXI6IFtcImJ1ZmZlci1raXRcIl0sXG4gIGxvd2VyUGFydHM6IFtcImxvd2VyLXBhcnRzLWtpdFwiXSxcbiAgc2lnaHRzOiBbXCJzaWdodFwiXSxcbn07XG5cbi8vIE5FVzogc29ydCBvcHRpb25zXG50eXBlIFNvcnRPcHRpb24gPSBcInJlbGV2YW5jZVwiIHwgXCJwcmljZS1hc2NcIiB8IFwicHJpY2UtZGVzY1wiIHwgXCJicmFuZC1hc2NcIjtcblxuLy8gTkVXOiBidWlsZCBzdGF0ZSB0eXBlICsgc3RvcmFnZSBrZXkgKG1hdGNoZXMgL2d1bmJ1aWxkZXIpXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjtcbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhdGVnb3J5UGFnZSgpIHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGNhdGVnb3J5SWQgPSBwYXJhbXMuY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcblxuICBjb25zdCBbdmlld01vZGUsIHNldFZpZXdNb2RlXSA9IHVzZVN0YXRlPFZpZXdNb2RlPihcImxpc3RcIik7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIE5FVzogZmlsdGVyICsgc29ydCBzdGF0ZVxuICBjb25zdCBbYnJhbmRGaWx0ZXIsIHNldEJyYW5kRmlsdGVyXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJhbGxcIik7XG4gIGNvbnN0IFtzb3J0QnksIHNldFNvcnRCeV0gPSB1c2VTdGF0ZTxTb3J0T3B0aW9uPihcInJlbGV2YW5jZVwiKTtcblxuICAvLyBORVc6IGJ1aWxkIHN0YXRlIGZvciB0aGlzIHBhZ2UsIHN5bmNlZCB3aXRoIGxvY2FsU3RvcmFnZVxuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHt9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgcmV0dXJuIHN0b3JlZCA/IChKU09OLnBhcnNlKHN0b3JlZCkgYXMgQnVpbGRTdGF0ZSkgOiB7fTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNhdGVnb3J5ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBDQVRFR09SSUVTLmZpbmQoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpLFxuICAgIFtjYXRlZ29yeUlkXSxcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2F0ZWdvcnlJZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoQ2F0ZWdvcnlQYXJ0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJvbGVzID0gQ0FURUdPUllfVE9fUEFSVF9ST0xFU1tjYXRlZ29yeUlkXSA/PyBbXTtcblxuICAgICAgICBjb25zdCBzZWFyY2ggPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgIHNlYXJjaC5zZXQoXCJwbGF0Zm9ybVwiLCBcIkFSLTE1XCIpO1xuICAgICAgICByb2xlcy5mb3JFYWNoKChyKSA9PiBzZWFyY2guYXBwZW5kKFwicGFydFJvbGVzXCIsIHIpKTtcblxuICAgICAgICBjb25zdCB1cmwgPSBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyJHtcbiAgICAgICAgICByb2xlcy5sZW5ndGggPyBgPyR7c2VhcmNoLnRvU3RyaW5nKCl9YCA6IFwiXCJcbiAgICAgICAgfWA7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGEubWFwKChwKSA9PiAoe1xuICAgICAgICAgIGlkOiBwLmlkLFxuICAgICAgICAgIGNhdGVnb3J5SWQsXG4gICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgIHByaWNlOiBwLnByaWNlID8/IDAsXG4gICAgICAgICAgaW1hZ2VVcmw6IHAubWFpbkltYWdlVXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICBub3RlczogdW5kZWZpbmVkLFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaENhdGVnb3J5UGFydHMoKTtcblxuICAgIHJldHVybiAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIFtjYXRlZ29yeUlkXSk7XG5cbiAgLy8gTkVXOiBwZXJzaXN0IGJ1aWxkIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICAvLyBORVc6IGhhbmRsZXIgdG8gdG9nZ2xlIEFkZCAvIFJlbW92ZSBmb3IgdGhpcyBjYXRlZ29yeVxuICBjb25zdCBoYW5kbGVUb2dnbGVQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0SWQ7XG5cbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgLy8gUmVtb3ZlIGZyb20gYnVpbGRcbiAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQ6IEJ1aWxkU3RhdGUgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRbY2F0ZWdvcnlJZF07XG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCB0byBidWlsZCBhbmQgbmF2aWdhdGUgYmFjayB0byBtYWluIGd1bmJ1aWxkZXIgcGFnZVxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgfSkpO1xuICAgICAgcm91dGVyLnB1c2goXCIvZ3VuYnVpbGRlclwiKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gTkVXOiBhdmFpbGFibGUgYnJhbmRzIGZvciBmaWx0ZXJcbiAgY29uc3QgYXZhaWxhYmxlQnJhbmRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgQXJyYXkuZnJvbShuZXcgU2V0KHBhcnRzLm1hcCgocCkgPT4gcC5icmFuZCkpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpLFxuICAgIFtwYXJ0c10sXG4gICk7XG5cbiAgLy8gTkVXOiBmaWx0ZXJlZCArIHNvcnRlZCBwYXJ0c1xuICBjb25zdCBmaWx0ZXJlZFBhcnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9IFsuLi5wYXJ0c107XG5cbiAgICBpZiAoYnJhbmRGaWx0ZXIgIT09IFwiYWxsXCIpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHAuYnJhbmQgPT09IGJyYW5kRmlsdGVyKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNvcnRCeSkge1xuICAgICAgY2FzZSBcInByaWNlLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5wcmljZSAtIGIucHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwcmljZS1kZXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJyYW5kLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5icmFuZC5sb2NhbGVDb21wYXJlKGIuYnJhbmQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmVsZXZhbmNlXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBsZWF2ZSBpbiBiYWNrZW5kIG9yZGVyXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtwYXJ0cywgYnJhbmRGaWx0ZXIsIHNvcnRCeV0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtemluYy01MCBtYi00XCI+XG4gICAgICAgICAgICAgIENhdGVnb3J5IE5vdCBGb3VuZFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJldHVybiB0byBHdW5idWlsZGVyXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYWluPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDAgbWItNCBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKGkCBCYWNrIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UGFydHM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgICAgQnJvd3NlIGFsbCBhdmFpbGFibGUge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX0gb3B0aW9ucyBmb3JcbiAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkLCBwdWxsZWQgbGl2ZSBmcm9tIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIGJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTEgYmctemluYy05NTAvNjBcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwiY2FyZFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNhcmQgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FyZFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJsaXN0XCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGlzdCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBMaXN0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFBhcnRzIEdyaWQvTGlzdCAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7LyogRmlsdGVyICsgc29ydCB0b29sYmFyICovfVxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgZmxleCBmbGV4LWNvbCBnYXAtMyBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hvd2luZ3tcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBvZntcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7cGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgcGFydHNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJyYW5kXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXticmFuZEZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRCcmFuZEZpbHRlcihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsIGJyYW5kczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7YXZhaWxhYmxlQnJhbmRzLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtifSB2YWx1ZT17Yn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yn1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInNvcnQtYnlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgU29ydFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NvcnRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnRCeShlLnRhcmdldC52YWx1ZSBhcyBTb3J0T3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVsZXZhbmNlXCI+UmVsZXZhbmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1hc2NcIj5QcmljZTogTG93IOKGkiBIaWdoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1kZXNjXCI+UHJpY2U6IEhpZ2gg4oaSIExvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJhbmQtYXNjXCI+QnJhbmQ6IEEg4oaSIFo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZmlsdGVyZWRQYXJ0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBObyBwYXJ0cyBhdmFpbGFibGUgZm9yIHRoaXMgY2F0ZWdvcnkgeWV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiB2aWV3TW9kZSA9PT0gXCJjYXJkXCIgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJncm91cCByZWxhdGl2ZSBib3JkZXIgYm9yZGVyLXppbmMtNzAwIHJvdW5kZWQtbWQgcC0zIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBmbGV4IGZsZXgtY29sXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW5vcm1hbFwiPuKAlCB7cGFydC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0yIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BmbGV4LTEgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNjAwIGhvdmVyOmJnLXppbmMtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7LyogSGVhZGVyIHJvdyBmb3IgbGlzdCB2aWV3ICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpncmlkIGdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gZ2FwLTQgcHgtMyBwYi0yIHRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5QYXJ0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkJyYW5kPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHRcIj5QcmljZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0IHByLTJcIj5BY3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdyb3VwIHJlbGF0aXZlIGJvcmRlciBib3JkZXItemluYy03MDAgcm91bmRlZC1tZCBwLTMgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpncmlkIG1kOmdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gbWQ6aXRlbXMtY2VudGVyIG1kOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBtZDp0ZXh0LXNtIHRleHQtemluYy00MDAgbWQ6dGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCBtZDp0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBcIlJlbW92ZSBmcm9tIEJ1aWxkXCIgOiBcIkFkZCB0byBCdWlsZFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJMaW5rIiwidXNlUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkFQSV9CQVNFX1VSTCIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJDQVRFR09SWV9UT19QQVJUX1JPTEVTIiwidXBwZXIiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJjaGFyZ2luZ0hhbmRsZSIsImJ1ZmZlciIsImxvd2VyUGFydHMiLCJzaWdodHMiLCJTVE9SQUdFX0tFWSIsIkNhdGVnb3J5UGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJyb3V0ZXIiLCJ2aWV3TW9kZSIsInNldFZpZXdNb2RlIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJyYW5kRmlsdGVyIiwic2V0QnJhbmRGaWx0ZXIiLCJzb3J0QnkiLCJzZXRTb3J0QnkiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwid2luZG93IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNhdGVnb3J5IiwiZmluZCIsImMiLCJpZCIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaENhdGVnb3J5UGFydHMiLCJyb2xlcyIsInNlYXJjaCIsIlVSTFNlYXJjaFBhcmFtcyIsInNldCIsImZvckVhY2giLCJyIiwiYXBwZW5kIiwidXJsIiwibGVuZ3RoIiwidG9TdHJpbmciLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsImJ1eVVybCIsIm5vdGVzIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImhhbmRsZVRvZ2dsZVBhcnQiLCJwYXJ0SWQiLCJpc1NlbGVjdGVkIiwicHJldiIsInVwZGF0ZWQiLCJwdXNoIiwiYXZhaWxhYmxlQnJhbmRzIiwiQXJyYXkiLCJmcm9tIiwiU2V0IiwiZmlsdGVyIiwiQm9vbGVhbiIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJmaWx0ZXJlZFBhcnRzIiwicmVzdWx0IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJ0b0xvd2VyQ2FzZSIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwiYXJpYS1sYWJlbCIsInNlY3Rpb24iLCJsYWJlbCIsImh0bWxGb3IiLCJzZWxlY3QiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsIm9wdGlvbiIsInBhcnQiLCJ0b0ZpeGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./app/gunbuilder/[categoryId]/page.tsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CategoryPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(ssr)/./data/gunbuilderParts.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\nconst API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL ?? \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) return {};\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n const roles = CATEGORY_TO_PART_ROLES[categoryId] ?? [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = `${API_BASE_URL}/api/products/gunbuilder${roles.length ? `?${search.toString()}` : \"\"}`;\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(`Failed to load products (${res.status})`);\n }\n const data = await res.json();\n const normalized = data.map((p)=>({\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: p.price ?? 0,\n imageUrl: p.mainImageUrl ?? undefined,\n url: p.buyUrl ?? undefined,\n notes: undefined\n }));\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n setError(err.message ?? \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) return;\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch {\n // ignore\n }\n }, [\n build\n ]);\n // handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n const normalizedQuery = searchQuery.trim().toLowerCase();\n if (normalizedQuery) {\n result = result.filter((p)=>{\n const name = p.name.toLowerCase();\n const brand = p.brand.toLowerCase();\n return name.includes(normalizedQuery) || brand.includes(normalizedQuery);\n });\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId,\n searchQuery\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 215,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 250,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: `px-3 py-1.5 text-xs font-medium rounded transition-colors ${viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"}`,\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 259,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: `px-3 py-1.5 text-xs font-medium rounded transition-colors ${viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"}`,\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 271,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 244,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"part-search\",\n className: \"text-xs text-zinc-500\",\n children: \"Search\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"part-search\",\n type: \"text\",\n value: searchQuery,\n onChange: (e)=>setSearchQuery(e.target.value),\n placeholder: `Search ${category.name.toLowerCase()}...`,\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 pr-6 focus:outline-none focus:ring-1 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 310,\n columnNumber: 19\n }, this),\n searchQuery && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setSearchQuery(\"\"),\n className: \"absolute right-1 top-1/2 -translate-y-1/2 text-zinc-500 hover:text-zinc-300 text-xs leading-none\",\n \"aria-label\": \"Clear search\",\n children: \"\\xd7\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 319,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 331,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 343,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 345,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 337,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 330,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 352,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 363,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 364,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 365,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 355,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 304,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 374,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 378,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 382,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `group relative rounded-md p-3 transition-all duration-200 flex flex-col border ${isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"}`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 401,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 406,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 400,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 411,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 399,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: `/gunbuilder/${categoryId}/${part.id}`,\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 416,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: `flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center ${isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"}`,\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 422,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 415,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 391,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 386,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 442,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 443,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 444,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 445,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 441,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `group relative rounded-md p-3 transition-all duration-200 border ${isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"}`,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 463,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 467,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 462,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 472,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 475,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: `/gunbuilder/${categoryId}/${part.id}`,\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 479,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: `rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap ${isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"}`,\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 485,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 478,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 461,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 453,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 448,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 289,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 234,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7QUFnQnBELE1BQU1PLGVBQ0pDLFFBQVFDLEdBQUcsQ0FBQ0Msd0JBQXdCLElBQUk7QUFFMUMsTUFBTUMseUJBQXVEO0lBQzNEQyxPQUFPO1FBQUM7S0FBaUI7SUFDekJDLFFBQVE7UUFBQztLQUFTO0lBQ2xCQyxXQUFXO1FBQUM7S0FBWTtJQUN4QkMsZ0JBQWdCO1FBQUM7S0FBa0I7SUFDbkNDLFFBQVE7UUFBQztLQUFhO0lBQ3RCQyxZQUFZO1FBQUM7S0FBa0I7SUFDL0JDLFFBQVE7UUFBQztLQUFRO0FBQ25CO0FBT0EsTUFBTUMsY0FBYztBQUVMLFNBQVNDO0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCxzQkFBc0I7SUFDdEIsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFDakQsTUFBTSxDQUFDa0MsYUFBYUMsZUFBZSxHQUFHbkMsK0NBQVFBLENBQVM7SUFFdkQsdURBQXVEO0lBQ3ZELE1BQU0sQ0FBQ29DLE9BQU9DLFNBQVMsR0FBR3JDLCtDQUFRQSxDQUFhO1FBQzdDLElBQUksSUFBNkIsRUFBRSxPQUFPLENB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REFBQ3JCO3dEQUFJRCxXQUFVOzswRUFDYiw4REFBQzlHLGlEQUFJQTtnRUFDSGlILE1BQU0sQ0FBQyxZQUFZLEVBQUU5RixXQUFXLENBQUMsRUFBRWdILEtBQUtyRixFQUFFLENBQUMsQ0FBQztnRUFDNUNnRSxXQUFVOzBFQUNYOzs7Ozs7MEVBR0QsOERBQUNNO2dFQUNDQyxNQUFLO2dFQUNMQyxTQUFTLElBQ1BsQyxpQkFBaUJqRSxZQUFZZ0gsS0FBS3JGLEVBQUU7Z0VBRXRDZ0UsV0FBVyxDQUFDLGlGQUFpRixFQUMzRnhCLGFBQ0ksdUVBQ0EsNkNBQ0wsQ0FBQzswRUFFREEsYUFBYSxzQkFBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0ExQ3JDNkMsS0FBS3JGLEVBQUU7Ozs7O29DQWdEbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeD84YjVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG50eXBlIFZpZXdNb2RlID0gXCJjYXJkXCIgfCBcImxpc3RcIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbmNvbnN0IENBVEVHT1JZX1RPX1BBUlRfUk9MRVM6IFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmdbXT4gPSB7XG4gIHVwcGVyOiBbXCJ1cHBlci1yZWNlaXZlclwiXSxcbiAgYmFycmVsOiBbXCJiYXJyZWxcIl0sXG4gIGhhbmRndWFyZDogW1wiaGFuZGd1YXJkXCJdLFxuICBjaGFyZ2luZ0hhbmRsZTogW1wiY2hhcmdpbmctaGFuZGxlXCJdLFxuICBidWZmZXI6IFtcImJ1ZmZlci1raXRcIl0sXG4gIGxvd2VyUGFydHM6IFtcImxvd2VyLXBhcnRzLWtpdFwiXSxcbiAgc2lnaHRzOiBbXCJzaWdodFwiXSxcbn07XG5cbi8vIHNvcnQgb3B0aW9uc1xudHlwZSBTb3J0T3B0aW9uID0gXCJyZWxldmFuY2VcIiB8IFwicHJpY2UtYXNjXCIgfCBcInByaWNlLWRlc2NcIiB8IFwiYnJhbmQtYXNjXCI7XG5cbi8vIGJ1aWxkIHN0YXRlIHR5cGUgKyBzdG9yYWdlIGtleSAobWF0Y2hlcyAvZ3VuYnVpbGRlcilcbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+O1xuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2F0ZWdvcnlQYWdlKCkge1xuICBjb25zdCBwYXJhbXMgPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgY2F0ZWdvcnlJZCA9IHBhcmFtcy5jYXRlZ29yeUlkIGFzIENhdGVnb3J5SWQ7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuXG4gIGNvbnN0IFt2aWV3TW9kZSwgc2V0Vmlld01vZGVdID0gdXNlU3RhdGU8Vmlld01vZGU+KFwibGlzdFwiKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gZmlsdGVyICsgc29ydCBzdGF0ZVxuICBjb25zdCBbYnJhbmRGaWx0ZXIsIHNldEJyYW5kRmlsdGVyXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJhbGxcIik7XG4gIGNvbnN0IFtzb3J0QnksIHNldFNvcnRCeV0gPSB1c2VTdGF0ZTxTb3J0T3B0aW9uPihcInJlbGV2YW5jZVwiKTtcbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuXG4gIC8vICBidWlsZCBzdGF0ZSBmb3IgdGhpcyBwYWdlLCBzeW5jZWQgd2l0aCBsb2NhbFN0b3JhZ2VcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB7fTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIHJldHVybiBzdG9yZWQgPyAoSlNPTi5wYXJzZShzdG9yZWQpIGFzIEJ1aWxkU3RhdGUpIDoge307XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNhdGVnb3J5SWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaENhdGVnb3J5UGFydHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByb2xlcyA9IENBVEVHT1JZX1RPX1BBUlRfUk9MRVNbY2F0ZWdvcnlJZF0gPz8gW107XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBzZWFyY2guc2V0KFwicGxhdGZvcm1cIiwgXCJBUi0xNVwiKTtcbiAgICAgICAgcm9sZXMuZm9yRWFjaCgocikgPT4gc2VhcmNoLmFwcGVuZChcInBhcnRSb2xlc1wiLCByKSk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlciR7XG4gICAgICAgICAgcm9sZXMubGVuZ3RoID8gYD8ke3NlYXJjaC50b1N0cmluZygpfWAgOiBcIlwiXG4gICAgICAgIH1gO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hDYXRlZ29yeVBhcnRzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbY2F0ZWdvcnlJZF0pO1xuXG4gIC8vICBwZXJzaXN0IGJ1aWxkIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICAvLyAgaGFuZGxlciB0byB0b2dnbGUgQWRkIC8gUmVtb3ZlIGZvciB0aGlzIGNhdGVnb3J5XG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnRJZDtcblxuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAvLyBSZW1vdmUgZnJvbSBidWlsZFxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZDogQnVpbGRTdGF0ZSA9IHsgLi4ucHJldiB9O1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtjYXRlZ29yeUlkXTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIHRvIGJ1aWxkIGFuZCBuYXZpZ2F0ZSBiYWNrIHRvIG1haW4gZ3VuYnVpbGRlciBwYWdlXG4gICAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICB9KSk7XG4gICAgICByb3V0ZXIucHVzaChcIi9ndW5idWlsZGVyXCIpO1xuICAgIH1cbiAgfTtcblxuICAvLyBhdmFpbGFibGUgYnJhbmRzIGZvciBmaWx0ZXJcbiAgY29uc3QgYXZhaWxhYmxlQnJhbmRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgQXJyYXkuZnJvbShuZXcgU2V0KHBhcnRzLm1hcCgocCkgPT4gcC5icmFuZCkpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpLFxuICAgIFtwYXJ0c10sXG4gICk7XG5cbiAgLy8gZmlsdGVyZWQgKyBzb3J0ZWQgcGFydHMgd2l0aCBzZWxlY3RlZCBwYXJ0IHBpbm5lZCB0byB0b3BcbiAgY29uc3QgZmlsdGVyZWRQYXJ0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBbLi4ucGFydHNdO1xuXG4gICAgaWYgKGJyYW5kRmlsdGVyICE9PSBcImFsbFwiKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmJyYW5kID09PSBicmFuZEZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gc2VhcmNoUXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vcm1hbGl6ZWRRdWVyeSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gcC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGJyYW5kID0gcC5icmFuZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG5hbWUuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KSB8fFxuICAgICAgICAgIGJyYW5kLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc29ydEJ5KSB7XG4gICAgICBjYXNlIFwicHJpY2UtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInByaWNlLWRlc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnJhbmQtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmJyYW5kLmxvY2FsZUNvbXBhcmUoYi5icmFuZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWxldmFuY2VcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGxlYXZlIGluIGJhY2tlbmQgb3JkZXJcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGFydCAoZm9yIHRoaXMgY2F0ZWdvcnkpIHRvIHRoZSB0b3AsIGlmIGFueVxuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSBidWlsZFtjYXRlZ29yeUlkXTtcbiAgICBpZiAoc2VsZWN0ZWRJZCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmlkID09PSBzZWxlY3RlZElkKTtcbiAgICAgIGNvbnN0IG90aGVycyA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHAuaWQgIT09IHNlbGVjdGVkSWQpO1xuICAgICAgcmVzdWx0ID0gWy4uLnNlbGVjdGVkLCAuLi5vdGhlcnNdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtwYXJ0cywgYnJhbmRGaWx0ZXIsIHNvcnRCeSwgYnVpbGQsIGNhdGVnb3J5SWQsIHNlYXJjaFF1ZXJ5XSk7XG5cbiAgaWYgKCFjYXRlZ29yeSkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgQ2F0ZWdvcnkgTm90IEZvdW5kXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmV0dXJuIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX0gPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5QYXJ0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgICBCcm93c2UgYWxsIGF2YWlsYWJsZSB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfSBvcHRpb25zIGZvclxuICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQsIHB1bGxlZCBsaXZlIGZyb20geW91ciBCYWxsaXN0aWMgYmFja2VuZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTIgYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMSBiZy16aW5jLTk1MC82MFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJjYXJkXCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImNhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2FyZCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYXJkXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImxpc3RcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJMaXN0IHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIExpc3RcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogUGFydHMgR3JpZC9MaXN0ICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHsvKiBGaWx0ZXIgKyBzb3J0IHRvb2xiYXIgKi99XG4gICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCBmbGV4IGZsZXgtY29sIGdhcC0zIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaG93aW5ne1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgIG9me1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtwYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtM1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJwYXJ0LXNlYXJjaFwiIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgU2VhcmNoXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJwYXJ0LXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaFF1ZXJ5KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2BTZWFyY2ggJHtjYXRlZ29yeS5uYW1lLnRvTG93ZXJDYXNlKCl9Li4uYH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgcHItNiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctYW1iZXItNDAwXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7c2VhcmNoUXVlcnkgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VhcmNoUXVlcnkoXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgdGV4dC16aW5jLTUwMCBob3Zlcjp0ZXh0LXppbmMtMzAwIHRleHQteHMgbGVhZGluZy1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXIgc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIMOXXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9XCJicmFuZC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBCcmFuZFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJicmFuZC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YnJhbmRGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0QnJhbmRGaWx0ZXIoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNzAgdGV4dC14cyB0ZXh0LXppbmMtMjAwIHB4LTIgcHktMSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctYW1iZXItNDAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPkFsbCBicmFuZHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAge2F2YWlsYWJsZUJyYW5kcy5tYXAoKGIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17Yn0gdmFsdWU9e2J9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2J9XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJzb3J0LWJ5XCIgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIFNvcnRcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwic29ydC1ieVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzb3J0Qnl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXRTb3J0QnkoZS50YXJnZXQudmFsdWUgYXMgU29ydE9wdGlvbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNzAgdGV4dC14cyB0ZXh0LXppbmMtMjAwIHB4LTIgcHktMSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctYW1iZXItNDAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJlbGV2YW5jZVwiPlJlbGV2YW5jZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicHJpY2UtYXNjXCI+UHJpY2U6IExvdyDihpIgSGlnaDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicHJpY2UtZGVzY1wiPlByaWNlOiBIaWdoIOKGkiBMb3c8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJyYW5kLWFzY1wiPkJyYW5kOiBBIOKGkiBaPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBMb2FkaW5nIHtjYXRlZ29yeS5uYW1lLnRvTG93ZXJDYXNlKCl94oCmXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IGVycm9yID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICB7ZXJyb3J9IOKAlCBjaGVjayB0aGF0IHRoZSBCYWxsaXN0aWMgQVBJIGlzIHJ1bm5pbmcuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IGZpbHRlcmVkUGFydHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAgTm8gcGFydHMgYXZhaWxhYmxlIGZvciB0aGlzIGNhdGVnb3J5IHlldC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogdmlld01vZGUgPT09IFwiY2FyZFwiID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBidWlsZFtjYXRlZ29yeUlkXSA9PT0gcGFydC5pZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17cGFydC5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZ3JvdXAgcmVsYXRpdmUgcm91bmRlZC1tZCBwLTMgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGZsZXggZmxleC1jb2wgYm9yZGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJvcmRlci1hbWJlci00MDAvNzAgYmctYW1iZXItNDAwLzEwIHNoYWRvdy1bMF8wXzBfMXB4X3JnYmEoMjUxLDE5MSwzNiwwLjI1KV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMFwiXG4gICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbm9ybWFsXCI+4oCUIHtwYXJ0Lm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlVG9nZ2xlUGFydChjYXRlZ29yeUlkLCBwYXJ0LmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGZsZXgtMSByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtMTAwIGJvcmRlciBib3JkZXItemluYy02MDAgaG92ZXI6YmctemluYy03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBcIlJlbW92ZSBmcm9tIEJ1aWxkXCIgOiBcIkFkZCB0byBCdWlsZFwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHsvKiBIZWFkZXIgcm93IGZvciBsaXN0IHZpZXcgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmdyaWQgZ3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBnYXAtNCBweC0zIHBiLTIgdGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlBhcnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+QnJhbmQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodFwiPlByaWNlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHQgcHItMlwiPkFjdGlvbnM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnQuaWQ7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZ3JvdXAgcmVsYXRpdmUgcm91bmRlZC1tZCBwLTMgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGJvcmRlciAke1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYm9yZGVyLWFtYmVyLTQwMC83MCBiZy1hbWJlci00MDAvMTAgc2hhZG93LVswXzBfMF8xcHhfcmdiYSgyNTEsMTkxLDM2LDAuMjUpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTBcIlxuICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmdyaWQgbWQ6Z3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBtZDppdGVtcy1jZW50ZXIgbWQ6Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIG1kOnRleHQtc20gdGV4dC16aW5jLTQwMCBtZDp0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIG1kOnRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlUGFydChjYXRlZ29yeUlkLCBwYXJ0LmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNjAwIGhvdmVyOmJnLXppbmMtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWxlY3RlZCA/IFwiUmVtb3ZlIGZyb20gQnVpbGRcIiA6IFwiQWRkIHRvIEJ1aWxkXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkxpbmsiLCJ1c2VQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiQVBJX0JBU0VfVVJMIiwicHJvY2VzcyIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIkNBVEVHT1JZX1RPX1BBUlRfUk9MRVMiLCJ1cHBlciIsImJhcnJlbCIsImhhbmRndWFyZCIsImNoYXJnaW5nSGFuZGxlIiwiYnVmZmVyIiwibG93ZXJQYXJ0cyIsInNpZ2h0cyIsIlNUT1JBR0VfS0VZIiwiQ2F0ZWdvcnlQYWdlIiwicGFyYW1zIiwiY2F0ZWdvcnlJZCIsInJvdXRlciIsInZpZXdNb2RlIiwic2V0Vmlld01vZGUiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnJhbmRGaWx0ZXIiLCJzZXRCcmFuZEZpbHRlciIsInNvcnRCeSIsInNldFNvcnRCeSIsInNlYXJjaFF1ZXJ5Iiwic2V0U2VhcmNoUXVlcnkiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwid2luZG93IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNhdGVnb3J5IiwiZmluZCIsImMiLCJpZCIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaENhdGVnb3J5UGFydHMiLCJyb2xlcyIsInNlYXJjaCIsIlVSTFNlYXJjaFBhcmFtcyIsInNldCIsImZvckVhY2giLCJyIiwiYXBwZW5kIiwidXJsIiwibGVuZ3RoIiwidG9TdHJpbmciLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsImJ1eVVybCIsIm5vdGVzIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImhhbmRsZVRvZ2dsZVBhcnQiLCJwYXJ0SWQiLCJpc1NlbGVjdGVkIiwicHJldiIsInVwZGF0ZWQiLCJwdXNoIiwiYXZhaWxhYmxlQnJhbmRzIiwiQXJyYXkiLCJmcm9tIiwiU2V0IiwiZmlsdGVyIiwiQm9vbGVhbiIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJmaWx0ZXJlZFBhcnRzIiwicmVzdWx0Iiwibm9ybWFsaXplZFF1ZXJ5IiwidHJpbSIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJzZWxlY3RlZElkIiwic2VsZWN0ZWQiLCJvdGhlcnMiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaDEiLCJocmVmIiwiaGVhZGVyIiwic3BhbiIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwiYXJpYS1sYWJlbCIsInNlY3Rpb24iLCJsYWJlbCIsImh0bWxGb3IiLCJpbnB1dCIsInZhbHVlIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0IiwicGxhY2Vob2xkZXIiLCJzZWxlY3QiLCJvcHRpb24iLCJwYXJ0IiwidG9GaXhlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./app/gunbuilder/[categoryId]/page.tsx\n"); /***/ }), diff --git a/.next/server/app/gunbuilder/[categoryId]/page_client-reference-manifest.js b/.next/server/app/gunbuilder/[categoryId]/page_client-reference-manifest.js index a11b082..817449c 100644 --- a/.next/server/app/gunbuilder/[categoryId]/page_client-reference-manifest.js +++ b/.next/server/app/gunbuilder/[categoryId]/page_client-reference-manifest.js @@ -1 +1 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/[categoryId]/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":["app/gunbuilder/[categoryId]/page","static/chunks/app/gunbuilder/%5BcategoryId%5D/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page":[]}} \ No newline at end of file +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/[categoryId]/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":["app/gunbuilder/[categoryId]/page","static/chunks/app/gunbuilder/%5BcategoryId%5D/page.js"],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page":[]}} \ No newline at end of file diff --git a/.next/server/app/gunbuilder/build/page.js b/.next/server/app/gunbuilder/build/page.js deleted file mode 100644 index d96eec5..0000000 --- a/.next/server/app/gunbuilder/build/page.js +++ /dev/null @@ -1,216 +0,0 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -(() => { -var exports = {}; -exports.id = "app/gunbuilder/build/page"; -exports.ids = ["app/gunbuilder/build/page"]; -exports.modules = { - -/***/ "./action-async-storage.external": -/*!****************************************************************************!*\ - !*** external "next/dist/client/components/action-async-storage.external" ***! - \****************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/action-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/action-async-storage.external": -/*!*******************************************************************************!*\ - !*** external "next/dist/client/components/action-async-storage.external.js" ***! - \*******************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/action-async-storage.external.js"); - -/***/ }), - -/***/ "./request-async-storage.external": -/*!*****************************************************************************!*\ - !*** external "next/dist/client/components/request-async-storage.external" ***! - \*****************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/request-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/request-async-storage.external": -/*!********************************************************************************!*\ - !*** external "next/dist/client/components/request-async-storage.external.js" ***! - \********************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/request-async-storage.external.js"); - -/***/ }), - -/***/ "./static-generation-async-storage.external": -/*!***************************************************************************************!*\ - !*** external "next/dist/client/components/static-generation-async-storage.external" ***! - \***************************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/static-generation-async-storage.external"); - -/***/ }), - -/***/ "../../client/components/static-generation-async-storage.external": -/*!******************************************************************************************!*\ - !*** external "next/dist/client/components/static-generation-async-storage.external.js" ***! - \******************************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/client/components/static-generation-async-storage.external.js"); - -/***/ }), - -/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js": -/*!*************************************************************************!*\ - !*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***! - \*************************************************************************/ -/***/ ((module) => { - -"use strict"; -module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js"); - -/***/ }), - -/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!": -/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***! - \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlobalError: () => (/* reexport default from dynamic */ next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default.a),\n/* harmony export */ __next_app__: () => (/* binding */ __next_app__),\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ pages: () => (/* binding */ pages),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ tree: () => (/* binding */ tree)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-page/module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?d969\");\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/client/components/error-boundary */ \"(rsc)/./node_modules/next/dist/client/components/error-boundary.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/server/app-render/entry-base */ \"(rsc)/./node_modules/next/dist/server/app-render/entry-base.js\");\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__) if([\"default\",\"tree\",\"pages\",\"GlobalError\",\"originalPathname\",\"__next_app__\",\"routeModule\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\"TURBOPACK { transition: next-ssr }\";\n\n\n// We inject the tree and pages here so that we can use them in the route\n// module.\nconst tree = {\n children: [\n '',\n {\n children: [\n 'gunbuilder',\n {\n children: [\n 'build',\n {\n children: ['__PAGE__', {}, {\n page: [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/gunbuilder/build/page.tsx */ \"(rsc)/./app/gunbuilder/build/page.tsx\")), \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\"],\n \n }]\n },\n {\n \n \n }\n ]\n },\n {\n \n \n }\n ]\n },\n {\n 'layout': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(rsc)/./app/layout.tsx\")), \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\"],\n'not-found': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/not-found-error */ \"(rsc)/./node_modules/next/dist/client/components/not-found-error.js\", 23)), \"next/dist/client/components/not-found-error\"],\n \n }\n ]\n }.children;\nconst pages = [\"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\"];\n\n\nconst __next_app_require__ = __webpack_require__\nconst __next_app_load_chunk__ = () => Promise.resolve()\nconst originalPathname = \"/gunbuilder/build/page\";\nconst __next_app__ = {\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__\n};\n\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppPageRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_PAGE,\n page: \"/gunbuilder/build/page\",\n pathname: \"/gunbuilder/build\",\n // The following aren't used in production.\n bundlePath: \"\",\n filename: \"\",\n appPaths: []\n },\n userland: {\n loaderTree: tree\n }\n});\n\n//# sourceMappingURL=app-page.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZndW5idWlsZGVyJTJGYnVpbGQlMkZwYWdlJnBhZ2U9JTJGZ3VuYnVpbGRlciUyRmJ1aWxkJTJGcGFnZSZhcHBQYXRocz0lMkZndW5idWlsZGVyJTJGYnVpbGQlMkZwYWdlJnBhZ2VQYXRoPXByaXZhdGUtbmV4dC1hcHAtZGlyJTJGZ3VuYnVpbGRlciUyRmJ1aWxkJTJGcGFnZS50c3gmYXBwRGlyPSUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGYXBwJnBhZ2VFeHRlbnNpb25zPXRzeCZwYWdlRXh0ZW5zaW9ucz10cyZwYWdlRXh0ZW5zaW9ucz1qc3gmcGFnZUV4dGVuc2lvbnM9anMmcm9vdERpcj0lMkZVc2VycyUyRnNlYW4lMkZEZXYlMkZndW5idWlsZGVyLXByb3RvdHlwZSZpc0Rldj10cnVlJnRzY29uZmlnUGF0aD10c2NvbmZpZy5qc29uJmJhc2VQYXRoPSZhc3NldFByZWZpeD0mbmV4dENvbmZpZ091dHB1dD0mcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGFBQWEsc0JBQXNCO0FBQ2lFO0FBQ3JDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyx1QkFBdUIsMEtBQXVHO0FBQzlIO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSx5QkFBeUIsNElBQXdGO0FBQ2pILG9CQUFvQiwwTkFBZ0Y7QUFDcEc7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ3VCO0FBQzZEO0FBQ3BGLDZCQUE2QixtQkFBbUI7QUFDaEQ7QUFDTztBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ3VEO0FBQ3ZEO0FBQ08sd0JBQXdCLDhHQUFrQjtBQUNqRDtBQUNBLGNBQWMseUVBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8/Y2M1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJcIlRVUkJPUEFDSyB7IHRyYW5zaXRpb246IG5leHQtc3NyIH1cIjtcbmltcG9ydCB7IEFwcFBhZ2VSb3V0ZU1vZHVsZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1wYWdlL21vZHVsZS5jb21waWxlZFwiO1xuaW1wb3J0IHsgUm91dGVLaW5kIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLWtpbmRcIjtcbi8vIFdlIGluamVjdCB0aGUgdHJlZSBhbmQgcGFnZXMgaGVyZSBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlbSBpbiB0aGUgcm91dGVcbi8vIG1vZHVsZS5cbmNvbnN0IHRyZWUgPSB7XG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICcnLFxuICAgICAgICB7XG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICdndW5idWlsZGVyJyxcbiAgICAgICAge1xuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAnYnVpbGQnLFxuICAgICAgICB7XG4gICAgICAgIGNoaWxkcmVuOiBbJ19fUEFHRV9fJywge30sIHtcbiAgICAgICAgICBwYWdlOiBbKCkgPT4gaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2d1bmJ1aWxkZXIvYnVpbGQvcGFnZS50c3hcIiksIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL2FwcC9ndW5idWlsZGVyL2J1aWxkL3BhZ2UudHN4XCJdLFxuICAgICAgICAgIFxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICB9XG4gICAgICBdXG4gICAgICB9LFxuICAgICAgICB7XG4gICAgICAgIFxuICAgICAgICBcbiAgICAgIH1cbiAgICAgIF1cbiAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgJ2xheW91dCc6IFsoKSA9PiBpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9hcHAvbGF5b3V0LnRzeFwiKSwgXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2xheW91dC50c3hcIl0sXG4nbm90LWZvdW5kJzogWygpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvclwiKSwgXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yXCJdLFxuICAgICAgICBcbiAgICAgIH1cbiAgICAgIF1cbiAgICAgIH0uY2hpbGRyZW47XG5jb25zdCBwYWdlcyA9IFtcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9hcHAvZ3VuYnVpbGRlci9idWlsZC9wYWdlLnRzeFwiXTtcbmV4cG9ydCB7IHRyZWUsIHBhZ2VzIH07XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbEVycm9yIH0gZnJvbSBcIm5leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9lcnJvci1ib3VuZGFyeVwiO1xuY29uc3QgX19uZXh0X2FwcF9yZXF1aXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fXG5jb25zdCBfX25leHRfYXBwX2xvYWRfY2h1bmtfXyA9ICgpID0+IFByb21pc2UucmVzb2x2ZSgpXG5leHBvcnQgY29uc3Qgb3JpZ2luYWxQYXRobmFtZSA9IFwiL2d1bmJ1aWxkZXIvYnVpbGQvcGFnZVwiO1xuZXhwb3J0IGNvbnN0IF9fbmV4dF9hcHBfXyA9IHtcbiAgICByZXF1aXJlOiBfX25leHRfYXBwX3JlcXVpcmVfXyxcbiAgICBsb2FkQ2h1bms6IF9fbmV4dF9hcHBfbG9hZF9jaHVua19fXG59O1xuZXhwb3J0ICogZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvYXBwLXJlbmRlci9lbnRyeS1iYXNlXCI7XG4vLyBDcmVhdGUgYW5kIGV4cG9ydCB0aGUgcm91dGUgbW9kdWxlIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbmV4cG9ydCBjb25zdCByb3V0ZU1vZHVsZSA9IG5ldyBBcHBQYWdlUm91dGVNb2R1bGUoe1xuICAgIGRlZmluaXRpb246IHtcbiAgICAgICAga2luZDogUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBwYWdlOiBcIi9ndW5idWlsZGVyL2J1aWxkL3BhZ2VcIixcbiAgICAgICAgcGF0aG5hbWU6IFwiL2d1bmJ1aWxkZXIvYnVpbGRcIixcbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCBpbiBwcm9kdWN0aW9uLlxuICAgICAgICBidW5kbGVQYXRoOiBcIlwiLFxuICAgICAgICBmaWxlbmFtZTogXCJcIixcbiAgICAgICAgYXBwUGF0aHM6IFtdXG4gICAgfSxcbiAgICB1c2VybGFuZDoge1xuICAgICAgICBsb2FkZXJUcmVlOiB0cmVlXG4gICAgfVxufSk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC1wYWdlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n"); - -/***/ }), - -/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=true!": -/*!********************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***! - \********************************************************************************************************************************************************************************************************************************/ -/***/ (() => { - - - -/***/ }), - -/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!": -/*!**************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***! - \**************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { - -eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/gunbuilder/build/page.tsx */ \"(ssr)/./app/gunbuilder/build/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGYXBwJTJGZ3VuYnVpbGRlciUyRmJ1aWxkJTJGcGFnZS50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0Qmc2VydmVyPXRydWUhIiwibWFwcGluZ3MiOiJBQUFBLDBLQUF1RyIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLz9lYzM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL2FwcC9ndW5idWlsZGVyL2J1aWxkL3BhZ2UudHN4XCIpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n"); - -/***/ }), - -/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!": -/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true! ***! - \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { - -eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/app-router.js */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/client-page.js */ \"(ssr)/./node_modules/next/dist/client/components/client-page.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/error-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/layout-router.js */ \"(ssr)/./node_modules/next/dist/client/components/layout-router.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/not-found-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\", 23));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/render-from-template-context.js */ \"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js\", 23));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGYXBwLXJvdXRlci5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZtb2R1bGVzPSU3QiUyMnJlcXVlc3QlMjIlM0ElMjIlMkZVc2VycyUyRnNlYW4lMkZEZXYlMkZndW5idWlsZGVyLXByb3RvdHlwZSUyRm5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRmNsaWVudC1wYWdlLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGZXJyb3ItYm91bmRhcnkuanMlMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZzZWFuJTJGRGV2JTJGZ3VuYnVpbGRlci1wcm90b3R5cGUlMkZub2RlX21vZHVsZXMlMkZuZXh0JTJGZGlzdCUyRmNsaWVudCUyRmNvbXBvbmVudHMlMkZsYXlvdXQtcm91dGVyLmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGbm90LWZvdW5kLWJvdW5kYXJ5LmpzJTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcyUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsa09BQWdJO0FBQ2hJO0FBQ0Esb09BQWlJO0FBQ2pJO0FBQ0EsME9BQW9JO0FBQ3BJO0FBQ0Esd09BQW1JO0FBQ25JO0FBQ0Esa1BBQXdJO0FBQ3hJO0FBQ0Esc1FBQWtKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvPzdiMjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLmpzXCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtcGFnZS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnkuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXIuanNcIik7XG47XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1ib3VuZGFyeS5qc1wiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qc1wiKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=true!\n"); - -/***/ }), - -/***/ "(ssr)/./app/gunbuilder/build/page.tsx": -/*!***************************************!*\ - !*** ./app/gunbuilder/build/page.tsx ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ BuildDetailsPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(ssr)/./data/gunbuilderParts.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nconst API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL ?? \"http://localhost:8080\";\n// Map backend partRole -> CategoryId (same as /gunbuilder page)\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\"\n};\n// Encode build state to URL-friendly string\nfunction encodeBuildState(build) {\n const entries = Object.entries(build).filter(([_, partId])=>partId).map(([categoryId, partId])=>`${categoryId}:${partId}`).join(\",\");\n return btoa(entries);\n}\n// Decode URL string to build state\nfunction decodeBuildState(encoded) {\n try {\n const decoded = atob(encoded);\n const build = {};\n decoded.split(\",\").forEach((entry)=>{\n const [categoryId, partId] = entry.split(\":\");\n if (categoryId && partId) {\n build[categoryId] = partId;\n }\n });\n return build;\n } catch {\n return {};\n }\n}\nfunction BuildDetailsPage() {\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const [shareUrl, setShareUrl] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [copied, setCopied] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loadingParts, setLoadingParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [partsError, setPartsError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Load build from URL params or localStorage\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const buildParam = searchParams.get(\"build\");\n if (buildParam) {\n const decoded = decodeBuildState(buildParam);\n setBuild(decoded);\n // Also save to localStorage\n localStorage.setItem(STORAGE_KEY, JSON.stringify(decoded));\n } else if (false) {}\n }, [\n searchParams\n ]);\n // Fetch live parts from backend (same source as /gunbuilder)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoadingParts(true);\n setPartsError(null);\n const res = await fetch(`${API_BASE_URL}/api/products/gunbuilder?platform=AR-15`, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(`Failed to load products (${res.status})`);\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) return null;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: p.price ?? 0,\n imageUrl: p.mainImageUrl ?? undefined,\n url: p.buyUrl ?? undefined,\n notes: undefined\n };\n }).filter(Boolean);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n setPartsError(err.message ?? \"Failed to load products\");\n } finally{\n setLoadingParts(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Generate shareable URL\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n }, [\n build\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n if (parts.length === 0) return [];\n return Object.entries(build).map(([categoryId, partId])=>parts.find((p)=>p.id === partId && p.categoryId === categoryId)).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleCopyLink = async ()=>{\n if (shareUrl) {\n try {\n await navigator.clipboard.writeText(shareUrl);\n setCopied(true);\n setTimeout(()=>setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy:\", err);\n }\n }\n };\n const handleShare = async ()=>{\n if (navigator.share && shareUrl) {\n try {\n await navigator.share({\n title: \"My AR-15 Build\",\n text: `Check out my AR-15 build: $${totalPrice.toFixed(2)}`,\n url: shareUrl\n });\n } catch {\n handleCopyLink();\n }\n } else {\n handleCopyLink();\n }\n };\n if (!loadingParts && selectedParts.length === 0) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-4xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"No Build Selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 208,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-400 mb-6\",\n children: \"You need to select at least one part to view your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 211,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"inline-block rounded-md border border-amber-400/60 bg-amber-400/10 px-4 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 transition-colors\",\n children: \"Go to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 214,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 207,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 206,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 205,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 231,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-4 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 239,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Build \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 243,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 242,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Review your build, purchase parts from our affiliate partners, or share your build with others.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 245,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 238,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Total Build Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-3xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 253,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" parts selected\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 256,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 251,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 237,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 230,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mb-6 rounded-lg border border-zinc-800 bg-zinc-950/60 p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-2\",\n children: \"Share Your Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 267,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-400\",\n children: \"Share this link to let others view your build or bookmark it to come back later.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 270,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 266,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleShare,\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-4 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"Share\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 276,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleCopyLink,\n className: `rounded-md border px-4 py-2 text-sm font-medium transition-colors ${copied ? \"border-green-500 bg-green-500/10 text-green-400\" : \"border-zinc-700 bg-zinc-900/50 text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600\"}`,\n children: copied ? \"Copied!\" : \"Copy Link\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 283,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 275,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 265,\n columnNumber: 11\n }, this),\n shareUrl && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 rounded-md bg-zinc-900/50 border border-zinc-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500 mb-1\",\n children: \"Shareable URL:\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 298,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-400 break-all font-mono\",\n children: shareUrl\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 297,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 264,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-4 md:p-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-4\",\n children: \"Selected Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 308,\n columnNumber: 11\n }, this),\n loadingParts && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 mb-4\",\n children: \"Loading parts…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 313,\n columnNumber: 13\n }, this),\n partsError && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 mb-4\",\n children: [\n partsError,\n \" — check the Ballistic API.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 316,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>{\n const selectedPartId = build[category.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === category.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-4 bg-zinc-900/30\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500 mb-2\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 337,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg font-semibold text-zinc-50 mb-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 343,\n columnNumber: 29\n }, this),\n \" \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 342,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 flex gap-2 flex-wrap\",\n children: [\n part.url && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: part.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"inline-flex items-center gap-2 rounded-md border border-amber-400/60 bg-amber-400/10 px-4 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 transition-colors\",\n children: [\n \"Purchase from Retailer\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 361,\n columnNumber: 35\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 355,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 348,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: `/gunbuilder/${category.id}/${part.id}`,\n className: \"inline-flex items-center rounded-md border border-zinc-700 bg-zinc-900/50 px-4 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 370,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 346,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 379,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 336,\n columnNumber: 21\n }, this),\n part && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-right\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 386,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 385,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 335,\n columnNumber: 19\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 331,\n columnNumber: 17\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 321,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 307,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 flex flex-col gap-3 sm:flex-row sm:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-6 py-3 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center\",\n children: \"Edit Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 400,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n localStorage.removeItem(STORAGE_KEY);\n router.push(\"/gunbuilder\");\n },\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-6 py-3 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 407,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 406,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 399,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 228,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 227,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDaUI7Z0ZBQ0NqQixXQUFVO2dGQUNWa0IsTUFBSztnRkFDTEMsUUFBTztnRkFDUEMsU0FBUTswRkFFUiw0RUFBQ0M7b0ZBQ0NDLGVBQWM7b0ZBQ2RDLGdCQUFlO29GQUNmQyxhQUFhO29GQUNiQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztrRkFLViw4REFBQ25JLGlEQUFJQTt3RUFDSDZHLE1BQU0sQ0FBQyxZQUFZLEVBQUVRLFNBQVNoRCxFQUFFLENBQUMsQ0FBQyxFQUFFa0QsS0FBS2xELEVBQUUsQ0FBQyxDQUFDO3dFQUM3Q3FDLFdBQVU7a0ZBQ1g7Ozs7Ozs7Ozs7Ozs7cUZBTUwsOERBQUNDO3dEQUFJRCxXQUFVO2tFQUF3Qjs7Ozs7Ozs7Ozs7OzRDQUsxQ2Esc0JBQ0MsOERBQUNaO2dEQUFJRCxXQUFVOzBEQUNiLDRFQUFDQztvREFBSUQsV0FBVTs7d0RBQXdDO3dEQUNuRGEsS0FBSy9DLEtBQUssQ0FBQ2dDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O21DQXZEeEJhLFNBQVNoRCxFQUFFOzs7Ozs0QkE4RHRCOzs7Ozs7Ozs7Ozs7OEJBS0osOERBQUNzQztvQkFBSUQsV0FBVTs7c0NBQ2IsOERBQUMxRyxpREFBSUE7NEJBQ0g2RyxNQUFLOzRCQUNMSCxXQUFVO3NDQUNYOzs7Ozs7c0NBR0QsOERBQUNDOzRCQUFJRCxXQUFVO3NDQUNiLDRFQUFDUTtnQ0FDQ0MsTUFBSztnQ0FDTEMsU0FBUztvQ0FDUHJFLGFBQWFxRixVQUFVLENBQUNoSTtvQ0FDeEI2QixPQUFPb0csSUFBSSxDQUFDO2dDQUNkO2dDQUNBM0IsV0FBVTswQ0FDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvLi9hcHAvZ3VuYnVpbGRlci9idWlsZC9wYWdlLnRzeD8wYzZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjsgLy8gY2F0ZWdvcnlJZCAtPiBwYXJ0SWRcbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZzsgLy8gYmFja2VuZCBVVUlEIHN0cmluZ1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIC0+IENhdGVnb3J5SWQgKHNhbWUgYXMgL2d1bmJ1aWxkZXIgcGFnZSlcbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiLFxuICBiYXJyZWw6IFwiYmFycmVsXCIsXG4gIGhhbmRndWFyZDogXCJoYW5kZ3VhcmRcIixcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIixcbiAgXCJsb3dlci1wYXJ0cy1raXRcIjogXCJsb3dlclBhcnRzXCIsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiLFxufTtcblxuLy8gRW5jb2RlIGJ1aWxkIHN0YXRlIHRvIFVSTC1mcmllbmRseSBzdHJpbmdcbmZ1bmN0aW9uIGVuY29kZUJ1aWxkU3RhdGUoYnVpbGQ6IEJ1aWxkU3RhdGUpOiBzdHJpbmcge1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgLmZpbHRlcigoW18sIHBhcnRJZF0pID0+IHBhcnRJZClcbiAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT4gYCR7Y2F0ZWdvcnlJZH06JHtwYXJ0SWR9YClcbiAgICAuam9pbihcIixcIik7XG4gIHJldHVybiBidG9hKGVudHJpZXMpO1xufVxuXG4vLyBEZWNvZGUgVVJMIHN0cmluZyB0byBidWlsZCBzdGF0ZVxuZnVuY3Rpb24gZGVjb2RlQnVpbGRTdGF0ZShlbmNvZGVkOiBzdHJpbmcpOiBCdWlsZFN0YXRlIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkZWNvZGVkID0gYXRvYihlbmNvZGVkKTtcbiAgICBjb25zdCBidWlsZDogQnVpbGRTdGF0ZSA9IHt9O1xuICAgIGRlY29kZWQuc3BsaXQoXCIsXCIpLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IGVudHJ5LnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCkge1xuICAgICAgICBidWlsZFtjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWRdID0gcGFydElkO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJ1aWxkRGV0YWlsc1BhZ2UoKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcblxuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KHt9KTtcbiAgY29uc3QgW3NoYXJlVXJsLCBzZXRTaGFyZVVybF0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nUGFydHMsIHNldExvYWRpbmdQYXJ0c10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW3BhcnRzRXJyb3IsIHNldFBhcnRzRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gTG9hZCBidWlsZCBmcm9tIFVSTCBwYXJhbXMgb3IgbG9jYWxTdG9yYWdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJidWlsZFwiKTtcbiAgICBpZiAoYnVpbGRQYXJhbSkge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUJ1aWxkU3RhdGUoYnVpbGRQYXJhbSk7XG4gICAgICBzZXRCdWlsZChkZWNvZGVkKTtcbiAgICAgIC8vIEFsc28gc2F2ZSB0byBsb2NhbFN0b3JhZ2VcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShkZWNvZGVkKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAvLyBMb2FkIGZyb20gbG9jYWxTdG9yYWdlXG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICAgIHNldEJ1aWxkKHBhcnNlZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEludmFsaWQgc3RvcmVkIGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtc10pO1xuXG4gIC8vIEZldGNoIGxpdmUgcGFydHMgZnJvbSBiYWNrZW5kIChzYW1lIHNvdXJjZSBhcyAvZ3VuYnVpbGRlcilcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmdQYXJ0cyh0cnVlKTtcbiAgICAgICAgc2V0UGFydHNFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyP3BsYXRmb3JtPUFSLTE1YCxcbiAgICAgICAgICB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YVxuICAgICAgICAgIC5tYXAoKHApOiBQYXJ0IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gUEFSVF9ST0xFX1RPX0NBVEVHT1JZW3AucGFydFJvbGVdO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IHAuaWQsIC8vIGFscmVhZHkgYSBzdHJpbmcgVVVJRFxuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0UGFydHNFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZ1BhcnRzKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gR2VuZXJhdGUgc2hhcmVhYmxlIFVSTFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIE9iamVjdC5rZXlzKGJ1aWxkKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlQnVpbGRTdGF0ZShidWlsZCk7XG4gICAgICBjb25zdCB1cmwgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9ndW5idWlsZGVyL2J1aWxkP2J1aWxkPSR7ZW5jb2RlZH1gO1xuICAgICAgc2V0U2hhcmVVcmwodXJsKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFydHM6IFBhcnRbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZChcbiAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgIHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IChjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWQpLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ29weUxpbmsgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHNoYXJlVXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChzaGFyZVVybCk7XG4gICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRDb3BpZWQoZmFsc2UpLCAyMDAwKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHk6XCIsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNoYXJlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChuYXZpZ2F0b3Iuc2hhcmUgJiYgc2hhcmVVcmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG5hdmlnYXRvci5zaGFyZSh7XG4gICAgICAgICAgdGl0bGU6IFwiTXkgQVItMTUgQnVpbGRcIixcbiAgICAgICAgICB0ZXh0OiBgQ2hlY2sgb3V0IG15IEFSLTE1IGJ1aWxkOiAkJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9YCxcbiAgICAgICAgICB1cmw6IHNoYXJlVXJsLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBoYW5kbGVDb3B5TGluaygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVDb3B5TGluaygpO1xuICAgIH1cbiAgfTtcblxuICBpZiAoIWxvYWRpbmdQYXJ0cyAmJiBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy00eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgTm8gQnVpbGQgU2VsZWN0ZWRcbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy00MDAgbWItNlwiPlxuICAgICAgICAgICAgICBZb3UgbmVlZCB0byBzZWxlY3QgYXQgbGVhc3Qgb25lIHBhcnQgdG8gdmlldyB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWJsb2NrIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEdvIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTQgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAgQnVpbGQgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5TdW1tYXJ5PC9zcGFuPlxuICAgICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICAgIFJldmlldyB5b3VyIGJ1aWxkLCBwdXJjaGFzZSBwYXJ0cyBmcm9tIG91ciBhZmZpbGlhdGUgcGFydG5lcnMsIG9yXG4gICAgICAgICAgICAgICAgc2hhcmUgeW91ciBidWlsZCB3aXRoIG90aGVycy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBtZDptdC0wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+VG90YWwgQnVpbGQgUHJpY2U8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IHBhcnRzIHNlbGVjdGVkXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBTaGFyZSBTZWN0aW9uICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtYi02IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTMgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyIHNtOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgU2hhcmUgWW91ciBCdWlsZFxuICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFyZSB0aGlzIGxpbmsgdG8gbGV0IG90aGVycyB2aWV3IHlvdXIgYnVpbGQgb3IgYm9va21hcmsgaXQgdG9cbiAgICAgICAgICAgICAgICBjb21lIGJhY2sgbGF0ZXIuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTaGFyZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU2hhcmVcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5TGlua31cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3VuZGVkLW1kIGJvcmRlciBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgY29waWVkXG4gICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItZ3JlZW4tNTAwIGJnLWdyZWVuLTUwMC8xMCB0ZXh0LWdyZWVuLTQwMFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDBcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2NvcGllZCA/IFwiQ29waWVkIVwiIDogXCJDb3B5IExpbmtcIn1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7c2hhcmVVcmwgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHAtMyByb3VuZGVkLW1kIGJnLXppbmMtOTAwLzUwIGJvcmRlciBib3JkZXItemluYy04MDBcIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwIG1iLTFcIj5TaGFyZWFibGUgVVJMOjwvcD5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGJyZWFrLWFsbCBmb250LW1vbm9cIj5cbiAgICAgICAgICAgICAgICB7c2hhcmVVcmx9XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICB7LyogQnVpbGQgUGFydHMgKi99XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTQgbWQ6cC02XCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi00XCI+XG4gICAgICAgICAgICBTZWxlY3RlZCBQYXJ0c1xuICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICB7bG9hZGluZ1BhcnRzICYmIChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCBtYi00XCI+TG9hZGluZyBwYXJ0c+KApjwvcD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtwYXJ0c0Vycm9yICYmIChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwIG1iLTRcIj5cbiAgICAgICAgICAgICAge3BhcnRzRXJyb3J9IOKAlCBjaGVjayB0aGUgQmFsbGlzdGljIEFQSS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cbiAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXRlZ29yeS5pZF07XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5maW5kKFxuICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiZcbiAgICAgICAgICAgICAgICAgIHAuY2F0ZWdvcnlJZCA9PT0gKGNhdGVnb3J5LmlkIGFzIENhdGVnb3J5SWQpLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTQgYmctemluYy05MDAvMzBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTAgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj57cGFydC5icmFuZH08L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgZmxleCBnYXAtMiBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC51cmwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17cGFydC51cmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVyY2hhc2UgZnJvbSBSZXRhaWxlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy00IGgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwIDZINmEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTBhMiAyIDAgMDAyLTJ2LTRNMTQgNGg2bTAgMHY2bTAtNkwxMCAxNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnkuaWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cGFydCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICB7LyogQWN0aW9ucyAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IGZsZXggZmxleC1jb2wgZ2FwLTMgc206ZmxleC1yb3cgc206anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtNiBweS0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEVkaXQgQnVpbGRcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgICAgICAgICAgIHJvdXRlci5wdXNoKFwiL2d1bmJ1aWxkZXJcIik7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC02IHB5LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENsZWFyIEJ1aWxkXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkxpbmsiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiU1RPUkFHRV9LRVkiLCJBUElfQkFTRV9VUkwiLCJwcm9jZXNzIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiUEFSVF9ST0xFX1RPX0NBVEVHT1JZIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwic2lnaHQiLCJlbmNvZGVCdWlsZFN0YXRlIiwiYnVpbGQiLCJlbnRyaWVzIiwiT2JqZWN0IiwiZmlsdGVyIiwiXyIsInBhcnRJZCIsIm1hcCIsImNhdGVnb3J5SWQiLCJqb2luIiwiYnRvYSIsImRlY29kZUJ1aWxkU3RhdGUiLCJlbmNvZGVkIiwiZGVjb2RlZCIsImF0b2IiLCJzcGxpdCIsImZvckVhY2giLCJlbnRyeSIsIkJ1aWxkRGV0YWlsc1BhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJzZXRCdWlsZCIsInNoYXJlVXJsIiwic2V0U2hhcmVVcmwiLCJjb3BpZWQiLCJzZXRDb3BpZWQiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZ1BhcnRzIiwic2V0TG9hZGluZ1BhcnRzIiwicGFydHNFcnJvciIsInNldFBhcnRzRXJyb3IiLCJidWlsZFBhcmFtIiwiZ2V0IiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdG9yZWQiLCJnZXRJdGVtIiwicGFyc2VkIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsInAiLCJwYXJ0Um9sZSIsImlkIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsInVybCIsImJ1eVVybCIsIm5vdGVzIiwiQm9vbGVhbiIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsImtleXMiLCJsZW5ndGgiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIm9yaWdpbiIsInNlbGVjdGVkUGFydHMiLCJmaW5kIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZUNvcHlMaW5rIiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0Iiwic2V0VGltZW91dCIsImNvbnNvbGUiLCJlcnJvciIsImhhbmRsZVNoYXJlIiwic2hhcmUiLCJ0aXRsZSIsInRleHQiLCJ0b0ZpeGVkIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJzZWN0aW9uIiwiaDIiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImNhdGVnb3J5Iiwic2VsZWN0ZWRQYXJ0SWQiLCJwYXJ0IiwiYSIsInRhcmdldCIsInJlbCIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInJlbW92ZUl0ZW0iLCJwdXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./app/gunbuilder/build/page.tsx\n"); - -/***/ }), - -/***/ "(ssr)/./data/gunbuilderParts.ts": -/*!*********************************!*\ - !*** ./data/gunbuilderParts.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CATEGORIES: () => (/* binding */ CATEGORIES),\n/* harmony export */ PARTS: () => (/* binding */ PARTS)\n/* harmony export */ });\nconst CATEGORIES = [\n {\n id: \"lower\",\n name: \"Lower Receiver\"\n },\n {\n id: \"upper\",\n name: \"Upper Receiver\"\n },\n {\n id: \"barrel\",\n name: \"Barrel\"\n },\n {\n id: \"handguard\",\n name: \"Handguard\"\n },\n {\n id: \"stock\",\n name: \"Stock\"\n },\n {\n id: \"optic\",\n name: \"Optic\"\n }\n];\nconst PARTS = [\n {\n id: \"lower-aero-m4e1\",\n name: \"M4E1 Stripped Lower Receiver\",\n brand: \"Aero Precision\",\n categoryId: \"lower\",\n price: 129.99,\n affiliateUrl: \"https://example.com/aero-m4e1\",\n notes: \"Forged 7075-T6, threaded bolt catch\"\n },\n {\n id: \"lower-solgw\",\n name: \"Loyal 9 Stripped Lower\",\n brand: \"Sons of Liberty Gun Works\",\n categoryId: \"lower\",\n price: 189.0,\n affiliateUrl: \"https://example.com/solgw-lower\"\n },\n {\n id: \"upper-aero-enhanced\",\n name: \"Enhanced Upper Receiver\",\n brand: \"Aero Precision\",\n categoryId: \"upper\",\n price: 149.99,\n affiliateUrl: \"https://example.com/aero-enhanced-upper\"\n },\n {\n id: \"upper-bcm-m4\",\n name: \"M4 Upper Receiver\",\n brand: \"BCM\",\n categoryId: \"upper\",\n price: 159.99,\n affiliateUrl: \"https://example.com/bcm-m4-upper\"\n },\n {\n id: \"barrel-criterion-16\",\n name: '16\" Hybrid Barrel',\n brand: \"Criterion\",\n categoryId: \"barrel\",\n price: 279.99,\n affiliateUrl: \"https://example.com/criterion-16\",\n notes: \"Mid-length gas, chrome-lined\"\n },\n {\n id: \"barrel-ba-13-9\",\n name: '13.9\" Hanson Performance Series',\n brand: \"Ballistic Advantage\",\n categoryId: \"barrel\",\n price: 209.99,\n affiliateUrl: \"https://example.com/ba-13-9\"\n },\n {\n id: \"hg-geissele-mk8\",\n name: 'MK8 Rail 13.5\"',\n brand: \"Geissele\",\n categoryId: \"handguard\",\n price: 324.99,\n affiliateUrl: \"https://example.com/geissele-mk8\"\n },\n {\n id: \"hg-centurion-c4\",\n name: 'C4 M-LOK 12\"',\n brand: \"Centurion Arms\",\n categoryId: \"handguard\",\n price: 284.99,\n affiliateUrl: \"https://example.com/centurion-c4\"\n },\n {\n id: \"stock-b5-bravo\",\n name: \"BRAVO Stock\",\n brand: \"B5 Systems\",\n categoryId: \"stock\",\n price: 74.99,\n affiliateUrl: \"https://example.com/b5-bravo\"\n },\n {\n id: \"stock-magpul-sl\",\n name: \"MOE SL Carbine Stock\",\n brand: \"Magpul\",\n categoryId: \"stock\",\n price: 69.99,\n affiliateUrl: \"https://example.com/magpul-sl\"\n },\n {\n id: \"optic-eotech-exps3\",\n name: \"EXPS3 Holographic Sight\",\n brand: \"EOTECH\",\n categoryId: \"optic\",\n price: 749.0,\n affiliateUrl: \"https://example.com/eotech-exps3\"\n },\n {\n id: \"optic-holosun-509t\",\n name: \"HE509T Red Dot\",\n brand: \"Holosun\",\n categoryId: \"optic\",\n price: 349.99,\n affiliateUrl: \"https://example.com/holosun-509t\"\n }\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9kYXRhL2d1bmJ1aWxkZXJQYXJ0cy50cyIsIm1hcHBpbmdzIjoiOzs7OztBQUVPLE1BQU1BLGFBQXlCO0lBQ3BDO1FBQUVDLElBQUk7UUFBU0MsTUFBTTtJQUFpQjtJQUN0QztRQUFFRCxJQUFJO1FBQVNDLE1BQU07SUFBaUI7SUFDdEM7UUFBRUQsSUFBSTtRQUFVQyxNQUFNO0lBQVM7SUFDL0I7UUFBRUQsSUFBSTtRQUFhQyxNQUFNO0lBQVk7SUFDckM7UUFBRUQsSUFBSTtRQUFTQyxNQUFNO0lBQVE7SUFDN0I7UUFBRUQsSUFBSTtRQUFTQyxNQUFNO0lBQVE7Q0FDOUIsQ0FBQztBQUVLLE1BQU1DLFFBQWdCO0lBQzNCO1FBQ0VGLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO1FBQ2RDLE9BQU87SUFDVDtJQUNBO1FBQ0VQLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO1FBQ2RDLE9BQU87SUFDVDtJQUNBO1FBQ0VQLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0NBQ0QsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLy4vZGF0YS9ndW5idWlsZGVyUGFydHMudHM/NzNhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhdGVnb3J5LCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUklFUzogQ2F0ZWdvcnlbXSA9IFtcbiAgeyBpZDogXCJsb3dlclwiLCBuYW1lOiBcIkxvd2VyIFJlY2VpdmVyXCIgfSxcbiAgeyBpZDogXCJ1cHBlclwiLCBuYW1lOiBcIlVwcGVyIFJlY2VpdmVyXCIgfSxcbiAgeyBpZDogXCJiYXJyZWxcIiwgbmFtZTogXCJCYXJyZWxcIiB9LFxuICB7IGlkOiBcImhhbmRndWFyZFwiLCBuYW1lOiBcIkhhbmRndWFyZFwiIH0sXG4gIHsgaWQ6IFwic3RvY2tcIiwgbmFtZTogXCJTdG9ja1wiIH0sXG4gIHsgaWQ6IFwib3B0aWNcIiwgbmFtZTogXCJPcHRpY1wiIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgUEFSVFM6IFBhcnRbXSA9IFtcbiAge1xuICAgIGlkOiBcImxvd2VyLWFlcm8tbTRlMVwiLFxuICAgIG5hbWU6IFwiTTRFMSBTdHJpcHBlZCBMb3dlciBSZWNlaXZlclwiLFxuICAgIGJyYW5kOiBcIkFlcm8gUHJlY2lzaW9uXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJsb3dlclwiLFxuICAgIHByaWNlOiAxMjkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYWVyby1tNGUxXCIsXG4gICAgbm90ZXM6IFwiRm9yZ2VkIDcwNzUtVDYsIHRocmVhZGVkIGJvbHQgY2F0Y2hcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcImxvd2VyLXNvbGd3XCIsXG4gICAgbmFtZTogXCJMb3lhbCA5IFN0cmlwcGVkIExvd2VyXCIsXG4gICAgYnJhbmQ6IFwiU29ucyBvZiBMaWJlcnR5IEd1biBXb3Jrc1wiLFxuICAgIGNhdGVnb3J5SWQ6IFwibG93ZXJcIixcbiAgICBwcmljZTogMTg5LjAsXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vc29sZ3ctbG93ZXJcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcInVwcGVyLWFlcm8tZW5oYW5jZWRcIixcbiAgICBuYW1lOiBcIkVuaGFuY2VkIFVwcGVyIFJlY2VpdmVyXCIsXG4gICAgYnJhbmQ6IFwiQWVybyBQcmVjaXNpb25cIixcbiAgICBjYXRlZ29yeUlkOiBcInVwcGVyXCIsXG4gICAgcHJpY2U6IDE0OS45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9hZXJvLWVuaGFuY2VkLXVwcGVyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ1cHBlci1iY20tbTRcIixcbiAgICBuYW1lOiBcIk00IFVwcGVyIFJlY2VpdmVyXCIsXG4gICAgYnJhbmQ6IFwiQkNNXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJ1cHBlclwiLFxuICAgIHByaWNlOiAxNTkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmNtLW00LXVwcGVyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJiYXJyZWwtY3JpdGVyaW9uLTE2XCIsXG4gICAgbmFtZTogXCIxNlxcXCIgSHlicmlkIEJhcnJlbFwiLFxuICAgIGJyYW5kOiBcIkNyaXRlcmlvblwiLFxuICAgIGNhdGVnb3J5SWQ6IFwiYmFycmVsXCIsXG4gICAgcHJpY2U6IDI3OS45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9jcml0ZXJpb24tMTZcIixcbiAgICBub3RlczogXCJNaWQtbGVuZ3RoIGdhcywgY2hyb21lLWxpbmVkXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJiYXJyZWwtYmEtMTMtOVwiLFxuICAgIG5hbWU6IFwiMTMuOVxcXCIgSGFuc29uIFBlcmZvcm1hbmNlIFNlcmllc1wiLFxuICAgIGJyYW5kOiBcIkJhbGxpc3RpYyBBZHZhbnRhZ2VcIixcbiAgICBjYXRlZ29yeUlkOiBcImJhcnJlbFwiLFxuICAgIHByaWNlOiAyMDkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmEtMTMtOVwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiaGctZ2Vpc3NlbGUtbWs4XCIsXG4gICAgbmFtZTogXCJNSzggUmFpbCAxMy41XFxcIlwiLFxuICAgIGJyYW5kOiBcIkdlaXNzZWxlXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJoYW5kZ3VhcmRcIixcbiAgICBwcmljZTogMzI0Ljk5LFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2dlaXNzZWxlLW1rOFwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiaGctY2VudHVyaW9uLWM0XCIsXG4gICAgbmFtZTogXCJDNCBNLUxPSyAxMlxcXCJcIixcbiAgICBicmFuZDogXCJDZW50dXJpb24gQXJtc1wiLFxuICAgIGNhdGVnb3J5SWQ6IFwiaGFuZGd1YXJkXCIsXG4gICAgcHJpY2U6IDI4NC45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9jZW50dXJpb24tYzRcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcInN0b2NrLWI1LWJyYXZvXCIsXG4gICAgbmFtZTogXCJCUkFWTyBTdG9ja1wiLFxuICAgIGJyYW5kOiBcIkI1IFN5c3RlbXNcIixcbiAgICBjYXRlZ29yeUlkOiBcInN0b2NrXCIsXG4gICAgcHJpY2U6IDc0Ljk5LFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2I1LWJyYXZvXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzdG9jay1tYWdwdWwtc2xcIixcbiAgICBuYW1lOiBcIk1PRSBTTCBDYXJiaW5lIFN0b2NrXCIsXG4gICAgYnJhbmQ6IFwiTWFncHVsXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJzdG9ja1wiLFxuICAgIHByaWNlOiA2OS45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9tYWdwdWwtc2xcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcIm9wdGljLWVvdGVjaC1leHBzM1wiLFxuICAgIG5hbWU6IFwiRVhQUzMgSG9sb2dyYXBoaWMgU2lnaHRcIixcbiAgICBicmFuZDogXCJFT1RFQ0hcIixcbiAgICBjYXRlZ29yeUlkOiBcIm9wdGljXCIsXG4gICAgcHJpY2U6IDc0OS4wLFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2VvdGVjaC1leHBzM1wiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwib3B0aWMtaG9sb3N1bi01MDl0XCIsXG4gICAgbmFtZTogXCJIRTUwOVQgUmVkIERvdFwiLFxuICAgIGJyYW5kOiBcIkhvbG9zdW5cIixcbiAgICBjYXRlZ29yeUlkOiBcIm9wdGljXCIsXG4gICAgcHJpY2U6IDM0OS45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9ob2xvc3VuLTUwOXRcIixcbiAgfSxcbl07XG4iXSwibmFtZXMiOlsiQ0FURUdPUklFUyIsImlkIiwibmFtZSIsIlBBUlRTIiwiYnJhbmQiLCJjYXRlZ29yeUlkIiwicHJpY2UiLCJhZmZpbGlhdGVVcmwiLCJub3RlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./data/gunbuilderParts.ts\n"); - -/***/ }), - -/***/ "(rsc)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"8e3b978f6080\");\nif (false) {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvZ2xvYmFscy5jc3MiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlFQUFlLGNBQWM7QUFDN0IsSUFBSSxLQUFVLEVBQUUsRUFBdUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2FwcC9nbG9iYWxzLmNzcz9jZDI4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiOGUzYjk3OGY2MDgwXCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./app/globals.css\n"); - -/***/ }), - -/***/ "(rsc)/./app/gunbuilder/build/page.tsx": -/*!***************************************!*\ - !*** ./app/gunbuilder/build/page.tsx ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ $$typeof: () => (/* binding */ $$typeof), -/* harmony export */ __esModule: () => (/* binding */ __esModule), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js"); - -const proxy = (0,next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__.createProxy)(String.raw`/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx`) - -// Accessing the __esModule property and exporting $$typeof are required here. -// The __esModule getter forces the proxy target to create the default export -// and the $$typeof value is for rendering logic to determine if the module -// is a client boundary. -const { __esModule, $$typeof } = proxy; -const __default__ = proxy.default; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__.createProxy)(String.raw`/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx#default`)); - - -/***/ }), - -/***/ "(rsc)/./app/layout.tsx": -/*!************************!*\ - !*** ./app/layout.tsx ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RootLayout),\n/* harmony export */ metadata: () => (/* binding */ metadata)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./globals.css */ \"(rsc)/./app/globals.css\");\n\n\nconst metadata = {\n title: \"Gunbuilder Prototype | Shadow Standard\",\n description: \"Prototype AR-15 build tool by Shadow Standard.\"\n};\nfunction RootLayout({ children }) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n children: children\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 12,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 11,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvbGF5b3V0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBdUI7QUFHaEIsTUFBTUEsV0FBVztJQUN0QkMsT0FBTztJQUNQQyxhQUFhO0FBQ2YsRUFBRTtBQUVhLFNBQVNDLFdBQVcsRUFBRUMsUUFBUSxFQUEyQjtJQUN0RSxxQkFDRSw4REFBQ0M7UUFBS0MsTUFBSztrQkFDVCw0RUFBQ0M7c0JBQU1IOzs7Ozs7Ozs7OztBQUdiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvLi9hcHAvbGF5b3V0LnRzeD85OTg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vZ2xvYmFscy5jc3NcIjtcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjb25zdCBtZXRhZGF0YSA9IHtcbiAgdGl0bGU6IFwiR3VuYnVpbGRlciBQcm90b3R5cGUgfCBTaGFkb3cgU3RhbmRhcmRcIixcbiAgZGVzY3JpcHRpb246IFwiUHJvdG90eXBlIEFSLTE1IGJ1aWxkIHRvb2wgYnkgU2hhZG93IFN0YW5kYXJkLlwiLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUm9vdExheW91dCh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWwgbGFuZz1cImVuXCI+XG4gICAgICA8Ym9keT57Y2hpbGRyZW59PC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJtZXRhZGF0YSIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJSb290TGF5b3V0IiwiY2hpbGRyZW4iLCJodG1sIiwibGFuZyIsImJvZHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./app/layout.tsx\n"); - -/***/ }) - -}; -; - -// load runtime -var __webpack_require__ = require("../../../webpack-runtime.js"); -__webpack_require__.C(exports); -var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) -var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"))); -module.exports = __webpack_exports__; - -})(); \ No newline at end of file diff --git a/.next/server/app/gunbuilder/build/page_client-reference-manifest.js b/.next/server/app/gunbuilder/build/page_client-reference-manifest.js deleted file mode 100644 index ba49be2..0000000 --- a/.next/server/app/gunbuilder/build/page_client-reference-manifest.js +++ /dev/null @@ -1 +0,0 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/build/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":["app/gunbuilder/build/page","static/chunks/app/gunbuilder/build/page.js"],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page":[]}} \ No newline at end of file diff --git a/.next/server/app/gunbuilder/page_client-reference-manifest.js b/.next/server/app/gunbuilder/page_client-reference-manifest.js index defd7e1..161a2a9 100644 --- a/.next/server/app/gunbuilder/page_client-reference-manifest.js +++ b/.next/server/app/gunbuilder/page_client-reference-manifest.js @@ -1 +1 @@ -globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/build/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/build/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[]}} \ No newline at end of file +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/gunbuilder/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./app/gunbuilder/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx":{"*":{"id":"(ssr)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/page.tsx","name":"*","chunks":["app/gunbuilder/page","static/chunks/app/gunbuilder/page.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/globals.css":{"id":"(app-pages-browser)/./app/globals.css","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/client-page.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/client-page.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx":{"id":"(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx","name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/Users/sean/Dev/gunbuilder-prototype/":[],"/Users/sean/Dev/gunbuilder-prototype/app/layout":["static/css/app/layout.css"],"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page":[]}} \ No newline at end of file diff --git a/.next/server/server-reference-manifest.js b/.next/server/server-reference-manifest.js index bd16a84..3af96fe 100644 --- a/.next/server/server-reference-manifest.js +++ b/.next/server/server-reference-manifest.js @@ -1 +1 @@ -self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"xCX/XST9V/cMorkGhF//iEDsLb7B5BQzSY9t8QqESQU=\"\n}" \ No newline at end of file +self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"YRutcLHwg0Z4B9w/r1zavDQVQFhPgarEcFYCzsNNYfs=\"\n}" \ No newline at end of file diff --git a/.next/server/server-reference-manifest.json b/.next/server/server-reference-manifest.json index 12c5fe3..9cfb638 100644 --- a/.next/server/server-reference-manifest.json +++ b/.next/server/server-reference-manifest.json @@ -1,5 +1,5 @@ { "node": {}, "edge": {}, - "encryptionKey": "xCX/XST9V/cMorkGhF//iEDsLb7B5BQzSY9t8QqESQU=" + "encryptionKey": "YRutcLHwg0Z4B9w/r1zavDQVQFhPgarEcFYCzsNNYfs=" } \ No newline at end of file diff --git a/.next/server/webpack-runtime.js b/.next/server/webpack-runtime.js index d02563a..20e10e0 100644 --- a/.next/server/webpack-runtime.js +++ b/.next/server/webpack-runtime.js @@ -125,7 +125,7 @@ /******/ /******/ /* webpack/runtime/getFullHash */ /******/ (() => { -/******/ __webpack_require__.h = () => ("dee79c389764e4e8") +/******/ __webpack_require__.h = () => ("201f867b7b06fb6b") /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ diff --git a/.next/static/chunks/app/_not-found/page.js b/.next/static/chunks/app/_not-found/page.js deleted file mode 100644 index 9904048..0000000 --- a/.next/static/chunks/app/_not-found/page.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/_not-found/page"],{ - -/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!": -/*!***************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage! ***! - \***************************************************************************************************************************************************************************************************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -eval(__webpack_require__.ts("\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_not-found/page\",\n function () {\n return __webpack_require__(/*! ./node_modules/next/dist/client/components/not-found-error.js */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js\");\n }\n ]);\n if(true) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_not-found/page\"])\n });\n }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtY2xpZW50LXBhZ2VzLWxvYWRlci5qcz9hYnNvbHV0ZVBhZ2VQYXRoPSUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGbm9kZV9tb2R1bGVzJTJGbmV4dCUyRmRpc3QlMkZjbGllbnQlMkZjb21wb25lbnRzJTJGbm90LWZvdW5kLWVycm9yLmpzJnBhZ2U9JTJGX25vdC1mb3VuZCUyRnBhZ2UhIiwibWFwcGluZ3MiOiI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFPLENBQUMsd0pBQStEO0FBQ3RGO0FBQ0E7QUFDQSxPQUFPLElBQVU7QUFDakIsTUFBTSxVQUFVO0FBQ2hCO0FBQ0EsT0FBTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLz9jODJhIl0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICh3aW5kb3cuX19ORVhUX1AgPSB3aW5kb3cuX19ORVhUX1AgfHwgW10pLnB1c2goW1xuICAgICAgXCIvX25vdC1mb3VuZC9wYWdlXCIsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlKFwiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvci5qc1wiKTtcbiAgICAgIH1cbiAgICBdKTtcbiAgICBpZihtb2R1bGUuaG90KSB7XG4gICAgICBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cuX19ORVhUX1AucHVzaChbXCIvX25vdC1mb3VuZC9wYWdlXCJdKVxuICAgICAgfSk7XG4gICAgfVxuICAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js": -/*!*********************************************************************!*\ - !*** ./node_modules/next/dist/client/components/not-found-error.js ***! - \*********************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return NotFound;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: \"100vh\",\n textAlign: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n desc: {\n display: \"inline-block\"\n },\n h1: {\n display: \"inline-block\",\n margin: \"0 20px 0 0\",\n padding: \"0 23px 0 0\",\n fontSize: 24,\n fontWeight: 500,\n verticalAlign: \"top\",\n lineHeight: \"49px\"\n },\n h2: {\n fontSize: 14,\n fontWeight: 400,\n lineHeight: \"49px\",\n margin: 0\n }\n};\nfunction NotFound() {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: \"404: This page could not be found.\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.error,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n /* Minified CSS from\n body { margin: 0; color: #000; background: #fff; }\n .next-error-h1 {\n border-right: 1px solid rgba(0, 0, 0, .3);\n }\n\n @media (prefers-color-scheme: dark) {\n body { color: #fff; background: #000; }\n .next-error-h1 {\n border-right: 1px solid rgba(255, 255, 255, .3);\n }\n }\n */ __html: \"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"\n }\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n className: \"next-error-h1\",\n style: styles.h1,\n children: \"404\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.desc,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n style: styles.h2,\n children: \"This page could not be found.\"\n })\n })\n ]\n })\n })\n ]\n });\n}\n_c = NotFound;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found-error.js.map\nvar _c;\n$RefreshReg$(_c, \"NotFound\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBcUNBOzs7ZUFBd0JBOzs7Ozs0RUFyQ047QUFFbEIsTUFBTUMsU0FBOEM7SUFDbERDLE9BQU87UUFDTCwwRkFBMEY7UUFDMUZDLFlBQ0U7UUFDRkMsUUFBUTtRQUNSQyxXQUFXO1FBQ1hDLFNBQVM7UUFDVEMsZUFBZTtRQUNmQyxZQUFZO1FBQ1pDLGdCQUFnQjtJQUNsQjtJQUVBQyxNQUFNO1FBQ0pKLFNBQVM7SUFDWDtJQUVBSyxJQUFJO1FBQ0ZMLFNBQVM7UUFDVE0sUUFBUTtRQUNSQyxTQUFTO1FBQ1RDLFVBQVU7UUFDVkMsWUFBWTtRQUNaQyxlQUFlO1FBQ2ZDLFlBQVk7SUFDZDtJQUVBQyxJQUFJO1FBQ0ZKLFVBQVU7UUFDVkMsWUFBWTtRQUNaRSxZQUFZO1FBQ1pMLFFBQVE7SUFDVjtBQUNGO0FBRWUsU0FBU1o7SUFDdEIsT0FDRSxXQURGLEdBQ0UsSUFBQW1CLFlBQUFDLElBQUEsRUFBQUQsWUFBQUUsUUFBQTs7MEJBRUUsSUFBQUYsWUFBQUcsR0FBQSxFQUFDQyxTQUFBQTswQkFBTTs7MEJBRVAsSUFBQUosWUFBQUcsR0FBQSxFQUFDRSxPQUFBQTtnQkFBSUMsT0FBT3hCLE9BQU9DLEtBQUs7MEJBQ3RCLGtCQUFBaUIsWUFBQUMsSUFBQSxFQUFDSSxPQUFBQTs7c0NBQ0MsSUFBQUwsWUFBQUcsR0FBQSxFQUFDRyxTQUFBQTs0QkFDQ0MseUJBQXlCO2dDQUN2Qjs7Ozs7Ozs7Ozs7O2NBWUEsR0FDQUMsUUFBUzs0QkFDWDs7c0NBRUYsSUFBQVIsWUFBQUcsR0FBQSxFQUFDWCxNQUFBQTs0QkFBR2lCLFdBQVU7NEJBQWdCSCxPQUFPeEIsT0FBT1UsRUFBRTtzQ0FBRTs7c0NBR2hELElBQUFRLFlBQUFHLEdBQUEsRUFBQ0UsT0FBQUE7NEJBQUlDLE9BQU94QixPQUFPUyxJQUFJO3NDQUNyQixrQkFBQVMsWUFBQUcsR0FBQSxFQUFDSixNQUFBQTtnQ0FBR08sT0FBT3hCLE9BQU9pQixFQUFFOzBDQUFFOzs7Ozs7OztBQU1sQztLQXBDd0JsQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvci50c3g/ZjcwOSJdLCJuYW1lcyI6WyJOb3RGb3VuZCIsInN0eWxlcyIsImVycm9yIiwiZm9udEZhbWlseSIsImhlaWdodCIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiZGVzYyIsImgxIiwibWFyZ2luIiwicGFkZGluZyIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsInZlcnRpY2FsQWxpZ24iLCJsaW5lSGVpZ2h0IiwiaDIiLCJfanN4cnVudGltZSIsImpzeHMiLCJGcmFnbWVudCIsImpzeCIsInRpdGxlIiwiZGl2Iiwic3R5bGUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImNsYXNzTmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js\n")); - -/***/ }) - -}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } -/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!"); }); -/******/ var __webpack_exports__ = __webpack_require__.O(); -/******/ _N_E = __webpack_exports__; -/******/ } -]); \ No newline at end of file diff --git a/.next/static/chunks/app/gunbuilder/[categoryId]/[partId]/page.js b/.next/static/chunks/app/gunbuilder/[categoryId]/[partId]/page.js deleted file mode 100644 index 76db1e7..0000000 --- a/.next/static/chunks/app/gunbuilder/[categoryId]/[partId]/page.js +++ /dev/null @@ -1,335 +0,0 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/gunbuilder/[categoryId]/[partId]/page"],{ - -/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!": -/*!*****************************************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false! ***! - \*****************************************************************************************************************************************************************************************************************************************************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - -eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/gunbuilder/[categoryId]/[partId]/page.tsx */ \"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZzZWFuJTJGRGV2JTJGZ3VuYnVpbGRlci1wcm90b3R5cGUlMkZhcHAlMkZndW5idWlsZGVyJTJGJTVCY2F0ZWdvcnlJZCU1RCUyRiU1QnBhcnRJZCU1RCUyRnBhZ2UudHN4JTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJnNlcnZlcj1mYWxzZSEiLCJtYXBwaW5ncyI6IkFBQUEsd05BQXVIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8/MDU4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vW3BhcnRJZF0vcGFnZS50c3hcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/api/link.js": -/*!********************************************!*\ - !*** ./node_modules/next/dist/api/link.js ***! - \********************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport default from dynamic */ _client_link__WEBPACK_IMPORTED_MODULE_0___default.a; }\n/* harmony export */ });\n/* harmony import */ var _client_link__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/link */ \"(app-pages-browser)/./node_modules/next/dist/client/link.js\");\n/* harmony import */ var _client_link__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_link__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _client_link__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _client_link__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n\n//# sourceMappingURL=link.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL2xpbmsuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXlDO0FBQ1Y7O0FBRS9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL2xpbmsuanM/NzkyYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi4uL2NsaWVudC9saW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vY2xpZW50L2xpbmtcIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGluay5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/link.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js": -/*!**************************************************!*\ - !*** ./node_modules/next/dist/api/navigation.js ***! - \**************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEOztBQUVoRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2FwaS9uYXZpZ2F0aW9uLmpzPzdkMGYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4uL2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb25cIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmF2aWdhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js": -/*!***********************************************************!*\ - !*** ./node_modules/next/dist/build/polyfills/process.js ***! - \***********************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nvar _global_process, _global_process1;\nmodule.exports = ((_global_process = __webpack_require__.g.process) == null ? void 0 : _global_process.env) && typeof ((_global_process1 = __webpack_require__.g.process) == null ? void 0 : _global_process1.env) === \"object\" ? __webpack_require__.g.process : __webpack_require__(/*! next/dist/compiled/process */ \"(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js\");\n\n//# sourceMappingURL=process.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLHFDQUFxQyxxQkFBTSxpRkFBaUYscUJBQU0sa0VBQWtFLHFCQUFNLFdBQVcsbUJBQU8sQ0FBQyw0R0FBNEI7O0FBRXpQIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanM/MGE5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfZ2xvYmFsX3Byb2Nlc3MsIF9nbG9iYWxfcHJvY2VzczE7XG5tb2R1bGUuZXhwb3J0cyA9ICgoX2dsb2JhbF9wcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsX3Byb2Nlc3MuZW52KSAmJiB0eXBlb2YgKChfZ2xvYmFsX3Byb2Nlc3MxID0gZ2xvYmFsLnByb2Nlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsX3Byb2Nlc3MxLmVudikgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwucHJvY2VzcyA6IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcHJvY2Vzc1wiKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvY2Vzcy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js": -/*!************************************************************!*\ - !*** ./node_modules/next/dist/compiled/process/browser.js ***! - \************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={229:function(e){var t=e.exports={};var r;var n;function defaultSetTimout(){throw new Error(\"setTimeout has not been defined\")}function defaultClearTimeout(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{if(typeof setTimeout===\"function\"){r=setTimeout}else{r=defaultSetTimout}}catch(e){r=defaultSetTimout}try{if(typeof clearTimeout===\"function\"){n=clearTimeout}else{n=defaultClearTimeout}}catch(e){n=defaultClearTimeout}})();function runTimeout(e){if(r===setTimeout){return setTimeout(e,0)}if((r===defaultSetTimout||!r)&&setTimeout){r=setTimeout;return setTimeout(e,0)}try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}function runClearTimeout(e){if(n===clearTimeout){return clearTimeout(e)}if((n===defaultClearTimeout||!n)&&clearTimeout){n=clearTimeout;return clearTimeout(e)}try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}var i=[];var o=false;var u;var a=-1;function cleanUpNextTick(){if(!o||!u){return}o=false;if(u.length){i=u.concat(i)}else{a=-1}if(i.length){drainQueue()}}function drainQueue(){if(o){return}var e=runTimeout(cleanUpNextTick);o=true;var t=i.length;while(t){u=i;i=[];while(++a1){for(var r=1;r= 0; i--){\n const date = new Date(today);\n date.setDate(date.getDate() - i);\n // Simulate price fluctuations (±15% variation)\n const variation = (Math.random() - 0.5) * 0.3; // -15% to +15%\n const price = basePrice * (1 + variation);\n history.push({\n date: date.toISOString().split(\"T\")[0],\n price: Math.round(price * 100) / 100\n });\n }\n return history;\n}\n/**\n * Get retailer offers for a part\n * Real implementation using Ballistic backend:\n * GET /api/products/{productId}/offers\n */ async function getRetailerOffers(productId) {\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/\").concat(productId, \"/offers\"), {\n // This will be called from the client detail page,\n // so we *don't* use cache here.\n cache: \"no-store\"\n });\n if (!res.ok) {\n throw new Error(\"Failed to load retailer offers (\".concat(res.status, \") for product \").concat(productId));\n }\n // Expected backend payload (example):\n // [\n // {\n // \"id\": \"uuid-or-int\",\n // \"merchantName\": \"Aero Precision\",\n // \"price\": 189.99,\n // \"originalPrice\": 210.0,\n // \"inStock\": true,\n // \"buyUrl\": \"https://classic.avantlink.com/click.php?...\",\n // \"lastUpdated\": \"2025-11-30T15:22:00Z\"\n // },\n // ...\n // ]\n const data = await res.json();\n const offers = data.map((o)=>{\n var _o_originalPrice;\n return {\n id: String(o.id),\n retailerName: o.merchantName,\n price: o.price,\n originalPrice: (_o_originalPrice = o.originalPrice) !== null && _o_originalPrice !== void 0 ? _o_originalPrice : undefined,\n inStock: o.inStock,\n affiliateUrl: o.buyUrl,\n lastUpdated: o.lastUpdated\n };\n })// Sort by lowest price first\n .sort((a, b)=>a.price - b.price);\n return offers;\n}\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9bcGFydElkXS9kYXRhLnRzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLCtDQUErQztBQUUvQyxxRUFBcUU7QUFDckUsMkVBQTJFO0lBR3pFQTtBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQWlCMUM7Ozs7O0NBS0MsR0FDTSxTQUFTSSxrQkFDZEMsTUFBYyxFQUNkQyxTQUFpQjtJQUVqQix3REFBd0Q7SUFDeEQsTUFBTUMsT0FBTztJQUNiLE1BQU1DLFVBQStCLEVBQUU7SUFDdkMsTUFBTUMsUUFBUSxJQUFJQztJQUVsQixJQUFLLElBQUlDLElBQUlKLE9BQU8sR0FBR0ksS0FBSyxHQUFHQSxJQUFLO1FBQ2xDLE1BQU1DLE9BQU8sSUFBSUYsS0FBS0Q7UUFDdEJHLEtBQUtDLE9BQU8sQ0FBQ0QsS0FBS0UsT0FBTyxLQUFLSDtRQUU5QiwrQ0FBK0M7UUFDL0MsTUFBTUksWUFBWSxDQUFDQyxLQUFLQyxNQUFNLEtBQUssR0FBRSxJQUFLLEtBQUssZUFBZTtRQUM5RCxNQUFNQyxRQUFRWixZQUFhLEtBQUlTLFNBQVE7UUFFdkNQLFFBQVFXLElBQUksQ0FBQztZQUNYUCxNQUFNQSxLQUFLUSxXQUFXLEdBQUdDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0Q0gsT0FBT0YsS0FBS00sS0FBSyxDQUFDSixRQUFRLE9BQU87UUFDbkM7SUFDRjtJQUVBLE9BQU9WO0FBQ1Q7QUFFQTs7OztDQUlDLEdBQ00sZUFBZWUsa0JBQ3BCQyxTQUFpQjtJQUVqQixNQUFNQyxNQUFNLE1BQU1DLE1BQ2hCLEdBQWdDRixPQUE3QnZCLGNBQWEsa0JBQTBCLE9BQVZ1QixXQUFVLFlBQzFDO1FBQ0UsbURBQW1EO1FBQ25ELGdDQUFnQztRQUNoQ0csT0FBTztJQUNUO0lBR0YsSUFBSSxDQUFDRixJQUFJRyxFQUFFLEVBQUU7UUFDWCxNQUFNLElBQUlDLE1BQ1IsbUNBQThETCxPQUEzQkMsSUFBSUssTUFBTSxFQUFDLGtCQUEwQixPQUFWTjtJQUVsRTtJQUVBLHNDQUFzQztJQUN0QyxJQUFJO0lBQ0osTUFBTTtJQUNOLDJCQUEyQjtJQUMzQix3Q0FBd0M7SUFDeEMsdUJBQXVCO0lBQ3ZCLDhCQUE4QjtJQUM5Qix1QkFBdUI7SUFDdkIsK0RBQStEO0lBQy9ELDRDQUE0QztJQUM1QyxPQUFPO0lBQ1AsUUFBUTtJQUNSLElBQUk7SUFDSixNQUFNTyxPQVFELE1BQU1OLElBQUlPLElBQUk7SUFFbkIsTUFBTUMsU0FBMEJGLEtBQzdCRyxHQUFHLENBQUMsQ0FBQ0M7WUFJV0E7ZUFKSjtZQUNYQyxJQUFJQyxPQUFPRixFQUFFQyxFQUFFO1lBQ2ZFLGNBQWNILEVBQUVJLFlBQVk7WUFDNUJyQixPQUFPaUIsRUFBRWpCLEtBQUs7WUFDZHNCLGVBQWVMLENBQUFBLG1CQUFBQSxFQUFFSyxhQUFhLGNBQWZMLDhCQUFBQSxtQkFBbUJNO1lBQ2xDQyxTQUFTUCxFQUFFTyxPQUFPO1lBQ2xCQyxjQUFjUixFQUFFUyxNQUFNO1lBQ3RCQyxhQUFhVixFQUFFVSxXQUFXO1FBQzVCO0lBQUEsRUFDQSw2QkFBNkI7S0FDNUJDLElBQUksQ0FBQyxDQUFDQyxHQUFHQyxJQUFNRCxFQUFFN0IsS0FBSyxHQUFHOEIsRUFBRTlCLEtBQUs7SUFFbkMsT0FBT2U7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vW3BhcnRJZF0vZGF0YS50cz9kNzM1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGFwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9bcGFydElkXS9kYXRhLnRzXG5cbi8vIFNpbXVsYXRlZCBkYXRhIGZ1bmN0aW9ucyAtIFJlcGxhY2UgdGhlc2Ugd2l0aCBBUEkgY2FsbHMgd2hlbiByZWFkeVxuLy8gRXhhbXBsZTogZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByaWNpbmdIaXN0b3J5KHBhcnRJZDogc3RyaW5nKSB7IC4uLiB9XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByaWNlSGlzdG9yeVBvaW50IHtcbiAgZGF0ZTogc3RyaW5nOyAvLyBJU08gZGF0ZSBzdHJpbmdcbiAgcHJpY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXRhaWxlck9mZmVyIHtcbiAgaWQ6IHN0cmluZztcbiAgcmV0YWlsZXJOYW1lOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXI7XG4gIG9yaWdpbmFsUHJpY2U/OiBudW1iZXI7XG4gIGluU3RvY2s6IGJvb2xlYW47XG4gIGFmZmlsaWF0ZVVybDogc3RyaW5nO1xuICBsYXN0VXBkYXRlZDogc3RyaW5nOyAvLyBJU08gZGF0ZSBzdHJpbmdcbn1cblxuLyoqXG4gKiBHZXQgcHJpY2luZyBoaXN0b3J5IGZvciBhIHBhcnRcbiAqIFRPRE86IFJlcGxhY2Ugd2l0aCBBUEkgY2FsbDogR0VUIC9hcGkvcGFydHMve3BhcnRJZH0vcHJpY2luZy1oaXN0b3J5XG4gKlxuICogRm9yIG5vdywgd2Uga2VlcCB0aGlzIHNpbXVsYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByaWNpbmdIaXN0b3J5KFxuICBwYXJ0SWQ6IHN0cmluZyxcbiAgYmFzZVByaWNlOiBudW1iZXIsXG4pOiBQcmljZUhpc3RvcnlQb2ludFtdIHtcbiAgLy8gR2VuZXJhdGUgMzAgZGF5cyBvZiBwcmljZSBoaXN0b3J5IHdpdGggc29tZSB2YXJpYXRpb25cbiAgY29uc3QgZGF5cyA9IDMwO1xuICBjb25zdCBoaXN0b3J5OiBQcmljZUhpc3RvcnlQb2ludFtdID0gW107XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcblxuICBmb3IgKGxldCBpID0gZGF5cyAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBpKTtcblxuICAgIC8vIFNpbXVsYXRlIHByaWNlIGZsdWN0dWF0aW9ucyAowrExNSUgdmFyaWF0aW9uKVxuICAgIGNvbnN0IHZhcmlhdGlvbiA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDAuMzsgLy8gLTE1JSB0byArMTUlXG4gICAgY29uc3QgcHJpY2UgPSBiYXNlUHJpY2UgKiAoMSArIHZhcmlhdGlvbik7XG5cbiAgICBoaXN0b3J5LnB1c2goe1xuICAgICAgZGF0ZTogZGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSxcbiAgICAgIHByaWNlOiBNYXRoLnJvdW5kKHByaWNlICogMTAwKSAvIDEwMCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoaXN0b3J5O1xufVxuXG4vKipcbiAqIEdldCByZXRhaWxlciBvZmZlcnMgZm9yIGEgcGFydFxuICogUmVhbCBpbXBsZW1lbnRhdGlvbiB1c2luZyBCYWxsaXN0aWMgYmFja2VuZDpcbiAqICAgR0VUIC9hcGkvcHJvZHVjdHMve3Byb2R1Y3RJZH0vb2ZmZXJzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZXRhaWxlck9mZmVycyhcbiAgcHJvZHVjdElkOiBzdHJpbmcsXG4pOiBQcm9taXNlPFJldGFpbGVyT2ZmZXJbXT4ge1xuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy8ke3Byb2R1Y3RJZH0vb2ZmZXJzYCxcbiAgICB7XG4gICAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIGNsaWVudCBkZXRhaWwgcGFnZSxcbiAgICAgIC8vIHNvIHdlICpkb24ndCogdXNlIGNhY2hlIGhlcmUuXG4gICAgICBjYWNoZTogXCJuby1zdG9yZVwiLFxuICAgIH0sXG4gICk7XG5cbiAgaWYgKCFyZXMub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGxvYWQgcmV0YWlsZXIgb2ZmZXJzICgke3Jlcy5zdGF0dXN9KSBmb3IgcHJvZHVjdCAke3Byb2R1Y3RJZH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBFeHBlY3RlZCBiYWNrZW5kIHBheWxvYWQgKGV4YW1wbGUpOlxuICAvLyBbXG4gIC8vICAge1xuICAvLyAgICAgXCJpZFwiOiBcInV1aWQtb3ItaW50XCIsXG4gIC8vICAgICBcIm1lcmNoYW50TmFtZVwiOiBcIkFlcm8gUHJlY2lzaW9uXCIsXG4gIC8vICAgICBcInByaWNlXCI6IDE4OS45OSxcbiAgLy8gICAgIFwib3JpZ2luYWxQcmljZVwiOiAyMTAuMCxcbiAgLy8gICAgIFwiaW5TdG9ja1wiOiB0cnVlLFxuICAvLyAgICAgXCJidXlVcmxcIjogXCJodHRwczovL2NsYXNzaWMuYXZhbnRsaW5rLmNvbS9jbGljay5waHA/Li4uXCIsXG4gIC8vICAgICBcImxhc3RVcGRhdGVkXCI6IFwiMjAyNS0xMS0zMFQxNToyMjowMFpcIlxuICAvLyAgIH0sXG4gIC8vICAgLi4uXG4gIC8vIF1cbiAgY29uc3QgZGF0YTogQXJyYXk8e1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgbWVyY2hhbnROYW1lOiBzdHJpbmc7XG4gICAgcHJpY2U6IG51bWJlcjtcbiAgICBvcmlnaW5hbFByaWNlPzogbnVtYmVyIHwgbnVsbDtcbiAgICBpblN0b2NrOiBib29sZWFuO1xuICAgIGJ1eVVybDogc3RyaW5nO1xuICAgIGxhc3RVcGRhdGVkOiBzdHJpbmc7XG4gIH0+ID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICBjb25zdCBvZmZlcnM6IFJldGFpbGVyT2ZmZXJbXSA9IGRhdGFcbiAgICAubWFwKChvKSA9PiAoe1xuICAgICAgaWQ6IFN0cmluZyhvLmlkKSxcbiAgICAgIHJldGFpbGVyTmFtZTogby5tZXJjaGFudE5hbWUsXG4gICAgICBwcmljZTogby5wcmljZSxcbiAgICAgIG9yaWdpbmFsUHJpY2U6IG8ub3JpZ2luYWxQcmljZSA/PyB1bmRlZmluZWQsXG4gICAgICBpblN0b2NrOiBvLmluU3RvY2ssXG4gICAgICBhZmZpbGlhdGVVcmw6IG8uYnV5VXJsLFxuICAgICAgbGFzdFVwZGF0ZWQ6IG8ubGFzdFVwZGF0ZWQsXG4gICAgfSkpXG4gICAgLy8gU29ydCBieSBsb3dlc3QgcHJpY2UgZmlyc3RcbiAgICAuc29ydCgoYSwgYikgPT4gYS5wcmljZSAtIGIucHJpY2UpO1xuXG4gIHJldHVybiBvZmZlcnM7XG59Il0sIm5hbWVzIjpbInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJnZXRQcmljaW5nSGlzdG9yeSIsInBhcnRJZCIsImJhc2VQcmljZSIsImRheXMiLCJoaXN0b3J5IiwidG9kYXkiLCJEYXRlIiwiaSIsImRhdGUiLCJzZXREYXRlIiwiZ2V0RGF0ZSIsInZhcmlhdGlvbiIsIk1hdGgiLCJyYW5kb20iLCJwcmljZSIsInB1c2giLCJ0b0lTT1N0cmluZyIsInNwbGl0Iiwicm91bmQiLCJnZXRSZXRhaWxlck9mZmVycyIsInByb2R1Y3RJZCIsInJlcyIsImZldGNoIiwiY2FjaGUiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJvZmZlcnMiLCJtYXAiLCJvIiwiaWQiLCJTdHJpbmciLCJyZXRhaWxlck5hbWUiLCJtZXJjaGFudE5hbWUiLCJvcmlnaW5hbFByaWNlIiwidW5kZWZpbmVkIiwiaW5TdG9jayIsImFmZmlsaWF0ZVVybCIsImJ1eVVybCIsImxhc3RVcGRhdGVkIiwic29ydCIsImEiLCJiIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/data.ts\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx": -/*!*******************************************************!*\ - !*** ./app/gunbuilder/[categoryId]/[partId]/page.tsx ***! - \*******************************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ PartDetailPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./data */ \"(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/data.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nfunction PartDetailPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const partId = params.partId; // this is the UUID we passed in the link\n const [product, setProduct] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [offers, setOffers] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [offersLoading, setOffersLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [offersError, setOffersError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n // 1) Load product (same as before)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!partId) return;\n const controller = new AbortController();\n async function fetchProduct() {\n try {\n setLoading(true);\n setError(null);\n // For now, pull the full AR-15 list and find by UUID.\n // We can optimize with a dedicated /api/products/{uuid} later.\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load product (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n var _data_find;\n const found = (_data_find = data.find((p)=>p.id === partId)) !== null && _data_find !== void 0 ? _data_find : null;\n if (!found) {\n setError(\"Product not found\");\n }\n setProduct(found);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load product\");\n } finally{\n setLoading(false);\n }\n }\n fetchProduct();\n return ()=>controller.abort();\n }, [\n partId\n ]);\n // 2) Load offers for this product from Ballistic backend\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!partId) return;\n let cancelled = false;\n async function fetchOffers() {\n try {\n setOffersLoading(true);\n setOffersError(null);\n const data = await (0,_data__WEBPACK_IMPORTED_MODULE_5__.getRetailerOffers)(partId);\n if (!cancelled) {\n setOffers(data);\n }\n } catch (err) {\n if (!cancelled) {\n var _err_message;\n setOffersError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load retailer offers\");\n }\n } finally{\n if (!cancelled) {\n setOffersLoading(false);\n }\n }\n }\n fetchOffers();\n return ()=>{\n cancelled = true;\n };\n }, [\n partId\n ]);\n // Best price: prefer live offers, fall back to summary product.price\n const bestPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n if (offers.length > 0) {\n return offers[0].price;\n }\n var _product_price;\n return (_product_price = product === null || product === void 0 ? void 0 : product.price) !== null && _product_price !== void 0 ? _product_price : null;\n }, [\n offers,\n product\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 132,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 133,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 131,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 130,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-5xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"mb-4 text-xs text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"hover:text-zinc-300 transition-colors\",\n children: \"Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 149,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"mx-1\",\n children: \"/\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 155,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId),\n className: \"hover:text-zinc-300 transition-colors\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 156,\n columnNumber: 11\n }, this),\n product && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"mx-1\",\n children: \"/\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 164,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: product.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 165,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 148,\n columnNumber: 9\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading product…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 171,\n columnNumber: 11\n }, this) : error || !product ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-xl font-semibold mb-2\",\n children: \"Product Unavailable\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 174,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 mb-4\",\n children: error !== null && error !== void 0 ? error : \"We couldn’t find this product.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 175,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId),\n className: \"text-amber-300 hover:text-amber-200 underline text-sm\",\n children: [\n \"Back to \",\n category.name,\n \" parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 173,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-6 md:grid-cols-[minmax(0,2fr)_minmax(0,1.3fr)] items-start\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n product.mainImageUrl && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-hidden rounded-lg border border-zinc-800 bg-zinc-950\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: product.mainImageUrl,\n alt: product.name,\n className: \"w-full object-contain max-h-80 bg-zinc-950\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 192,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 190,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: product.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 199,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl md:text-3xl font-semibold tracking-tight\",\n children: product.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 202,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Platform:\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: product.platform\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 207,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 205,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Role: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-300\",\n children: product.partRole\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 210,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 209,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 188,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/70 p-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs uppercase tracking-[0.2em] text-zinc-500 mb-1\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: bestPrice && bestPrice > 0 ? \"$\".concat(bestPrice.toFixed(2)) : \"—\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 220,\n columnNumber: 17\n }, this),\n !bestPrice && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-500\",\n children: \"Pricing not available yet. Live pricing will appear once offers are imported.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 226,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n offersLoading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500\",\n children: \"Loading offers…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 236,\n columnNumber: 19\n }, this),\n offersError && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-red-400\",\n children: offersError\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 239,\n columnNumber: 19\n }, this),\n !offersLoading && !offersError && offers.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1\",\n children: offers.map((offer)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: offer.affiliateUrl,\n target: \"_blank\",\n rel: \"noreferrer\",\n className: \"flex items-center justify-between rounded-md border border-zinc-700 bg-zinc-900 px-3 py-1.5 text-xs hover:bg-zinc-800 transition-colors\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200\",\n children: offer.retailerName\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 253,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold text-amber-300\",\n children: [\n \"$\",\n offer.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 256,\n columnNumber: 25\n }, this)\n ]\n }, offer.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 244,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 234,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(product.id),\n className: \"block w-full rounded-md bg-amber-400 text-black text-sm font-semibold text-center py-2.5 hover:bg-amber-300 transition-colors\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 266,\n columnNumber: 17\n }, this),\n product.buyUrl ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: product.buyUrl,\n target: \"_blank\",\n rel: \"noreferrer\",\n className: \"block w-full rounded-md border border-zinc-700 bg-zinc-900 text-xs font-medium text-zinc-200 text-center py-2 hover:bg-zinc-800 transition-colors\",\n children: \"View on Merchant Site\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n disabled: true,\n className: \"block w-full rounded-md border border-zinc-800 bg-zinc-900/60 text-xs font-medium text-zinc-500 text-center py-2 cursor-not-allowed\",\n children: \"External link coming soon\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 283,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 265,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 215,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 186,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 146,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx\",\n lineNumber: 145,\n columnNumber: 5\n }, this);\n}\n_s(PartDetailPage, \"jy63VisXc8L3/nmNVlO8AFw7PYA=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams\n ];\n});\n_c = PartDetailPage;\nvar _c;\n$RefreshReg$(_c, \"PartDetailPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9bcGFydElkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUVxRDtBQUN4QjtBQUNlO0FBQ1E7QUFLcEM7SUFjZE87QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFM0IsU0FBU0k7O0lBQ3RCLE1BQU1DLFNBQVNSLDBEQUFTQTtJQUN4QixNQUFNUyxhQUFhRCxPQUFPQyxVQUFVO0lBQ3BDLE1BQU1DLFNBQVNGLE9BQU9FLE1BQU0sRUFBWSx5Q0FBeUM7SUFFakYsTUFBTSxDQUFDQyxTQUFTQyxXQUFXLEdBQUdkLCtDQUFRQSxDQUFrQztJQUN4RSxNQUFNLENBQUNlLFNBQVNDLFdBQVcsR0FBR2hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ2lCLE9BQU9DLFNBQVMsR0FBR2xCLCtDQUFRQSxDQUFnQjtJQUVsRCxNQUFNLENBQUNtQixRQUFRQyxVQUFVLEdBQUdwQiwrQ0FBUUEsQ0FBa0IsRUFBRTtJQUN4RCxNQUFNLENBQUNxQixlQUFlQyxpQkFBaUIsR0FBR3RCLCtDQUFRQSxDQUFDO0lBQ25ELE1BQU0sQ0FBQ3VCLGFBQWFDLGVBQWUsR0FBR3hCLCtDQUFRQSxDQUFnQjtJQUU5RCxNQUFNeUIsV0FBVzFCLDhDQUFPQSxDQUN0QixJQUFNSSw2REFBVUEsQ0FBQ3VCLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxFQUFFLEtBQUtqQixhQUN0QztRQUFDQTtLQUFXO0lBR2QsbUNBQW1DO0lBQ25DYixnREFBU0EsQ0FBQztRQUNSLElBQUksQ0FBQ2MsUUFBUTtRQUViLE1BQU1pQixhQUFhLElBQUlDO1FBRXZCLGVBQWVDO1lBQ2IsSUFBSTtnQkFDRmYsV0FBVztnQkFDWEUsU0FBUztnQkFFVCxzREFBc0Q7Z0JBQ3RELCtEQUErRDtnQkFDL0Qs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Ozs7Ozs7OztBQVduQjtHQS9Rd0I1Qzs7UUFDUFAsc0RBQVNBOzs7S0FERk8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvW2NhdGVnb3J5SWRdL1twYXJ0SWRdL3BhZ2UudHN4PzQyYzEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVBhcmFtcyB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkIH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHtcbiAgZ2V0UmV0YWlsZXJPZmZlcnMsXG4gIHR5cGUgUmV0YWlsZXJPZmZlcixcbn0gZnJvbSBcIi4vZGF0YVwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZzsgLy8gYmFja2VuZCBVVUlEIHN0cmluZ1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYXJ0RGV0YWlsUGFnZSgpIHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGNhdGVnb3J5SWQgPSBwYXJhbXMuY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkO1xuICBjb25zdCBwYXJ0SWQgPSBwYXJhbXMucGFydElkIGFzIHN0cmluZzsgLy8gdGhpcyBpcyB0aGUgVVVJRCB3ZSBwYXNzZWQgaW4gdGhlIGxpbmtcblxuICBjb25zdCBbcHJvZHVjdCwgc2V0UHJvZHVjdF0gPSB1c2VTdGF0ZTxHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgW29mZmVycywgc2V0T2ZmZXJzXSA9IHVzZVN0YXRlPFJldGFpbGVyT2ZmZXJbXT4oW10pO1xuICBjb25zdCBbb2ZmZXJzTG9hZGluZywgc2V0T2ZmZXJzTG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW29mZmVyc0Vycm9yLCBzZXRPZmZlcnNFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgLy8gMSkgTG9hZCBwcm9kdWN0IChzYW1lIGFzIGJlZm9yZSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXBhcnRJZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJvZHVjdCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIC8vIEZvciBub3csIHB1bGwgdGhlIGZ1bGwgQVItMTUgbGlzdCBhbmQgZmluZCBieSBVVUlELlxuICAgICAgICAvLyBXZSBjYW4gb3B0aW1pemUgd2l0aCBhIGRlZGljYXRlZCAvYXBpL3Byb2R1Y3RzL3t1dWlkfSBsYXRlci5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWA7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0ICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICBjb25zdCBmb3VuZCA9IGRhdGEuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkKSA/PyBudWxsO1xuXG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICBzZXRFcnJvcihcIlByb2R1Y3Qgbm90IGZvdW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0UHJvZHVjdChmb3VuZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdFwiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoUHJvZHVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW3BhcnRJZF0pO1xuXG4gIC8vIDIpIExvYWQgb2ZmZXJzIGZvciB0aGlzIHByb2R1Y3QgZnJvbSBCYWxsaXN0aWMgYmFja2VuZFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcGFydElkKSByZXR1cm47XG5cbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaE9mZmVycygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldE9mZmVyc0xvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldE9mZmVyc0Vycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZXRhaWxlck9mZmVycyhwYXJ0SWQpO1xuXG4gICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgc2V0T2ZmZXJzKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldE9mZmVyc0Vycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcmV0YWlsZXIgb2ZmZXJzXCIpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldE9mZmVyc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hPZmZlcnMoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgIH07XG4gIH0sIFtwYXJ0SWRdKTtcblxuICAvLyBCZXN0IHByaWNlOiBwcmVmZXIgbGl2ZSBvZmZlcnMsIGZhbGwgYmFjayB0byBzdW1tYXJ5IHByb2R1Y3QucHJpY2VcbiAgY29uc3QgYmVzdFByaWNlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKG9mZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gb2ZmZXJzWzBdLnByaWNlO1xuICAgIH1cbiAgICByZXR1cm4gcHJvZHVjdD8ucHJpY2UgPz8gbnVsbDtcbiAgfSwgW29mZmVycywgcHJvZHVjdF0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIG1iLTRcIj5DYXRlZ29yeSBOb3QgRm91bmQ8L2gxPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBSZXR1cm4gdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTV4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEJyZWFkY3J1bWJzICovfVxuICAgICAgICA8bmF2IGNsYXNzTmFtZT1cIm1iLTQgdGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJob3Zlcjp0ZXh0LXppbmMtMzAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBHdW5idWlsZGVyXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm14LTFcIj4vPC9zcGFuPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJob3Zlcjp0ZXh0LXppbmMtMzAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX1cbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAge3Byb2R1Y3QgJiYgKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXgtMVwiPi88L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0zMDBcIj57cHJvZHVjdC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbmF2PlxuXG4gICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMFwiPkxvYWRpbmcgcHJvZHVjdOKApjwvcD5cbiAgICAgICAgKSA6IGVycm9yIHx8ICFwcm9kdWN0ID8gKFxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LXNlbWlib2xkIG1iLTJcIj5Qcm9kdWN0IFVuYXZhaWxhYmxlPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCBtYi00XCI+XG4gICAgICAgICAgICAgIHtlcnJvciA/PyBcIldlIGNvdWxkbuKAmXQgZmluZCB0aGlzIHByb2R1Y3QuXCJ9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfWB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZSB0ZXh0LXNtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQmFjayB0byB7Y2F0ZWdvcnkubmFtZX0gcGFydHNcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTYgbWQ6Z3JpZC1jb2xzLVttaW5tYXgoMCwyZnIpX21pbm1heCgwLDEuM2ZyKV0gaXRlbXMtc3RhcnRcIj5cbiAgICAgICAgICAgIHsvKiBMZWZ0OiBpbWFnZSArIG1ldGEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICB7cHJvZHVjdC5tYWluSW1hZ2VVcmwgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MFwiPlxuICAgICAgICAgICAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAbmV4dC9uZXh0L25vLWltZy1lbGVtZW50ICovfVxuICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICBzcmM9e3Byb2R1Y3QubWFpbkltYWdlVXJsfVxuICAgICAgICAgICAgICAgICAgICBhbHQ9e3Byb2R1Y3QubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIG9iamVjdC1jb250YWluIG1heC1oLTgwIGJnLXppbmMtOTUwXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICB7cHJvZHVjdC5icmFuZH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge3Byb2R1Y3QubmFtZX1cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgUGxhdGZvcm06e1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0zMDBcIj57cHJvZHVjdC5wbGF0Zm9ybX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgUm9sZTogPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTMwMFwiPntwcm9kdWN0LnBhcnRSb2xlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBSaWdodDogcHJpY2luZyArIGFjdGlvbnMgKi99XG4gICAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzcwIHAtNCBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIHRleHQtemluYy01MDAgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgUHJpY2VcbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAgICAge2Jlc3RQcmljZSAmJiBiZXN0UHJpY2UgPiAwXG4gICAgICAgICAgICAgICAgICAgID8gYCQke2Jlc3RQcmljZS50b0ZpeGVkKDIpfWBcbiAgICAgICAgICAgICAgICAgICAgOiBcIuKAlFwifVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICB7IWJlc3RQcmljZSAmJiAoXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICBQcmljaW5nIG5vdCBhdmFpbGFibGUgeWV0LiBMaXZlIHByaWNpbmcgd2lsbCBhcHBlYXIgb25jZVxuICAgICAgICAgICAgICAgICAgICBvZmZlcnMgYXJlIGltcG9ydGVkLlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBPZmZlcnMgbGlzdCAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7b2ZmZXJzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIG9mZmVyc+KApjwvcD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtvZmZlcnNFcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICB7b2ZmZXJzRXJyb3J9XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7IW9mZmVyc0xvYWRpbmcgJiYgIW9mZmVyc0Vycm9yICYmIG9mZmVycy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHtvZmZlcnMubWFwKChvZmZlcikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29mZmVyLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17b2ZmZXIuYWZmaWxpYXRlVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCBweC0zIHB5LTEuNSB0ZXh0LXhzIGhvdmVyOmJnLXppbmMtODAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtvZmZlci5yZXRhaWxlck5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7b2ZmZXIucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyP3NlbGVjdD0ke2NhdGVnb3J5SWR9OiR7cHJvZHVjdC5pZH1gfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYmctYW1iZXItNDAwIHRleHQtYmxhY2sgdGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtY2VudGVyIHB5LTIuNSBob3ZlcjpiZy1hbWJlci0zMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEFkZCB0byBCdWlsZFxuICAgICAgICAgICAgICAgIDwvTGluaz5cblxuICAgICAgICAgICAgICAgIHtwcm9kdWN0LmJ1eVVybCA/IChcbiAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9e3Byb2R1Y3QuYnV5VXJsfVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICByZWw9XCJub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMCB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0yMDAgdGV4dC1jZW50ZXIgcHktMiBob3ZlcjpiZy16aW5jLTgwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFZpZXcgb24gTWVyY2hhbnQgU2l0ZVxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTAwLzYwIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS0yIGN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEV4dGVybmFsIGxpbmsgY29taW5nIHNvb25cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTGluayIsInVzZVBhcmFtcyIsIkNBVEVHT1JJRVMiLCJnZXRSZXRhaWxlck9mZmVycyIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQYXJ0RGV0YWlsUGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJwYXJ0SWQiLCJwcm9kdWN0Iiwic2V0UHJvZHVjdCIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsIm9mZmVycyIsInNldE9mZmVycyIsIm9mZmVyc0xvYWRpbmciLCJzZXRPZmZlcnNMb2FkaW5nIiwib2ZmZXJzRXJyb3IiLCJzZXRPZmZlcnNFcnJvciIsImNhdGVnb3J5IiwiZmluZCIsImMiLCJpZCIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3QiLCJ1cmwiLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsImZvdW5kIiwicCIsImVyciIsIm5hbWUiLCJtZXNzYWdlIiwiYWJvcnQiLCJjYW5jZWxsZWQiLCJmZXRjaE9mZmVycyIsImJlc3RQcmljZSIsImxlbmd0aCIsInByaWNlIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsIm5hdiIsInNwYW4iLCJtYWluSW1hZ2VVcmwiLCJpbWciLCJzcmMiLCJhbHQiLCJicmFuZCIsInBsYXRmb3JtIiwicGFydFJvbGUiLCJhc2lkZSIsInRvRml4ZWQiLCJtYXAiLCJvZmZlciIsImEiLCJhZmZpbGlhdGVVcmwiLCJ0YXJnZXQiLCJyZWwiLCJyZXRhaWxlck5hbWUiLCJidXlVcmwiLCJidXR0b24iLCJ0eXBlIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/[partId]/page.tsx\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./data/gunbuilderParts.ts": -/*!*********************************!*\ - !*** ./data/gunbuilderParts.ts ***! - \*********************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CATEGORIES: function() { return /* binding */ CATEGORIES; },\n/* harmony export */ PARTS: function() { return /* binding */ PARTS; }\n/* harmony export */ });\nconst CATEGORIES = [\n {\n id: \"lower\",\n name: \"Lower Receiver\"\n },\n {\n id: \"upper\",\n name: \"Upper Receiver\"\n },\n {\n id: \"barrel\",\n name: \"Barrel\"\n },\n {\n id: \"handguard\",\n name: \"Handguard\"\n },\n {\n id: \"stock\",\n name: \"Stock\"\n },\n {\n id: \"optic\",\n name: \"Optic\"\n }\n];\nconst PARTS = [\n {\n id: \"lower-aero-m4e1\",\n name: \"M4E1 Stripped Lower Receiver\",\n brand: \"Aero Precision\",\n categoryId: \"lower\",\n price: 129.99,\n affiliateUrl: \"https://example.com/aero-m4e1\",\n notes: \"Forged 7075-T6, threaded bolt catch\"\n },\n {\n id: \"lower-solgw\",\n name: \"Loyal 9 Stripped Lower\",\n brand: \"Sons of Liberty Gun Works\",\n categoryId: \"lower\",\n price: 189.0,\n affiliateUrl: \"https://example.com/solgw-lower\"\n },\n {\n id: \"upper-aero-enhanced\",\n name: \"Enhanced Upper Receiver\",\n brand: \"Aero Precision\",\n categoryId: \"upper\",\n price: 149.99,\n affiliateUrl: \"https://example.com/aero-enhanced-upper\"\n },\n {\n id: \"upper-bcm-m4\",\n name: \"M4 Upper Receiver\",\n brand: \"BCM\",\n categoryId: \"upper\",\n price: 159.99,\n affiliateUrl: \"https://example.com/bcm-m4-upper\"\n },\n {\n id: \"barrel-criterion-16\",\n name: '16\" Hybrid Barrel',\n brand: \"Criterion\",\n categoryId: \"barrel\",\n price: 279.99,\n affiliateUrl: \"https://example.com/criterion-16\",\n notes: \"Mid-length gas, chrome-lined\"\n },\n {\n id: \"barrel-ba-13-9\",\n name: '13.9\" Hanson Performance Series',\n brand: \"Ballistic Advantage\",\n categoryId: \"barrel\",\n price: 209.99,\n affiliateUrl: \"https://example.com/ba-13-9\"\n },\n {\n id: \"hg-geissele-mk8\",\n name: 'MK8 Rail 13.5\"',\n brand: \"Geissele\",\n categoryId: \"handguard\",\n price: 324.99,\n affiliateUrl: \"https://example.com/geissele-mk8\"\n },\n {\n id: \"hg-centurion-c4\",\n name: 'C4 M-LOK 12\"',\n brand: \"Centurion Arms\",\n categoryId: \"handguard\",\n price: 284.99,\n affiliateUrl: \"https://example.com/centurion-c4\"\n },\n {\n id: \"stock-b5-bravo\",\n name: \"BRAVO Stock\",\n brand: \"B5 Systems\",\n categoryId: \"stock\",\n price: 74.99,\n affiliateUrl: \"https://example.com/b5-bravo\"\n },\n {\n id: \"stock-magpul-sl\",\n name: \"MOE SL Carbine Stock\",\n brand: \"Magpul\",\n categoryId: \"stock\",\n price: 69.99,\n affiliateUrl: \"https://example.com/magpul-sl\"\n },\n {\n id: \"optic-eotech-exps3\",\n name: \"EXPS3 Holographic Sight\",\n brand: \"EOTECH\",\n categoryId: \"optic\",\n price: 749.0,\n affiliateUrl: \"https://example.com/eotech-exps3\"\n },\n {\n id: \"optic-holosun-509t\",\n name: \"HE509T Red Dot\",\n brand: \"Holosun\",\n categoryId: \"optic\",\n price: 349.99,\n affiliateUrl: \"https://example.com/holosun-509t\"\n }\n];\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2RhdGEvZ3VuYnVpbGRlclBhcnRzLnRzIiwibWFwcGluZ3MiOiI7Ozs7O0FBRU8sTUFBTUEsYUFBeUI7SUFDcEM7UUFBRUMsSUFBSTtRQUFTQyxNQUFNO0lBQWlCO0lBQ3RDO1FBQUVELElBQUk7UUFBU0MsTUFBTTtJQUFpQjtJQUN0QztRQUFFRCxJQUFJO1FBQVVDLE1BQU07SUFBUztJQUMvQjtRQUFFRCxJQUFJO1FBQWFDLE1BQU07SUFBWTtJQUNyQztRQUFFRCxJQUFJO1FBQVNDLE1BQU07SUFBUTtJQUM3QjtRQUFFRCxJQUFJO1FBQVNDLE1BQU07SUFBUTtDQUM5QixDQUFDO0FBRUssTUFBTUMsUUFBZ0I7SUFDM0I7UUFDRUYsSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7UUFDZEMsT0FBTztJQUNUO0lBQ0E7UUFDRVAsSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7UUFDZEMsT0FBTztJQUNUO0lBQ0E7UUFDRVAsSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7Q0FDRCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2RhdGEvZ3VuYnVpbGRlclBhcnRzLnRzPzczYWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYXRlZ29yeSwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JJRVM6IENhdGVnb3J5W10gPSBbXG4gIHsgaWQ6IFwibG93ZXJcIiwgbmFtZTogXCJMb3dlciBSZWNlaXZlclwiIH0sXG4gIHsgaWQ6IFwidXBwZXJcIiwgbmFtZTogXCJVcHBlciBSZWNlaXZlclwiIH0sXG4gIHsgaWQ6IFwiYmFycmVsXCIsIG5hbWU6IFwiQmFycmVsXCIgfSxcbiAgeyBpZDogXCJoYW5kZ3VhcmRcIiwgbmFtZTogXCJIYW5kZ3VhcmRcIiB9LFxuICB7IGlkOiBcInN0b2NrXCIsIG5hbWU6IFwiU3RvY2tcIiB9LFxuICB7IGlkOiBcIm9wdGljXCIsIG5hbWU6IFwiT3B0aWNcIiB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IFBBUlRTOiBQYXJ0W10gPSBbXG4gIHtcbiAgICBpZDogXCJsb3dlci1hZXJvLW00ZTFcIixcbiAgICBuYW1lOiBcIk00RTEgU3RyaXBwZWQgTG93ZXIgUmVjZWl2ZXJcIixcbiAgICBicmFuZDogXCJBZXJvIFByZWNpc2lvblwiLFxuICAgIGNhdGVnb3J5SWQ6IFwibG93ZXJcIixcbiAgICBwcmljZTogMTI5Ljk5LFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2Flcm8tbTRlMVwiLFxuICAgIG5vdGVzOiBcIkZvcmdlZCA3MDc1LVQ2LCB0aHJlYWRlZCBib2x0IGNhdGNoXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJsb3dlci1zb2xnd1wiLFxuICAgIG5hbWU6IFwiTG95YWwgOSBTdHJpcHBlZCBMb3dlclwiLFxuICAgIGJyYW5kOiBcIlNvbnMgb2YgTGliZXJ0eSBHdW4gV29ya3NcIixcbiAgICBjYXRlZ29yeUlkOiBcImxvd2VyXCIsXG4gICAgcHJpY2U6IDE4OS4wLFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL3NvbGd3LWxvd2VyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ1cHBlci1hZXJvLWVuaGFuY2VkXCIsXG4gICAgbmFtZTogXCJFbmhhbmNlZCBVcHBlciBSZWNlaXZlclwiLFxuICAgIGJyYW5kOiBcIkFlcm8gUHJlY2lzaW9uXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJ1cHBlclwiLFxuICAgIHByaWNlOiAxNDkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYWVyby1lbmhhbmNlZC11cHBlclwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidXBwZXItYmNtLW00XCIsXG4gICAgbmFtZTogXCJNNCBVcHBlciBSZWNlaXZlclwiLFxuICAgIGJyYW5kOiBcIkJDTVwiLFxuICAgIGNhdGVnb3J5SWQ6IFwidXBwZXJcIixcbiAgICBwcmljZTogMTU5Ljk5LFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2JjbS1tNC11cHBlclwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYmFycmVsLWNyaXRlcmlvbi0xNlwiLFxuICAgIG5hbWU6IFwiMTZcXFwiIEh5YnJpZCBCYXJyZWxcIixcbiAgICBicmFuZDogXCJDcml0ZXJpb25cIixcbiAgICBjYXRlZ29yeUlkOiBcImJhcnJlbFwiLFxuICAgIHByaWNlOiAyNzkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vY3JpdGVyaW9uLTE2XCIsXG4gICAgbm90ZXM6IFwiTWlkLWxlbmd0aCBnYXMsIGNocm9tZS1saW5lZFwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYmFycmVsLWJhLTEzLTlcIixcbiAgICBuYW1lOiBcIjEzLjlcXFwiIEhhbnNvbiBQZXJmb3JtYW5jZSBTZXJpZXNcIixcbiAgICBicmFuZDogXCJCYWxsaXN0aWMgQWR2YW50YWdlXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJiYXJyZWxcIixcbiAgICBwcmljZTogMjA5Ljk5LFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2JhLTEzLTlcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcImhnLWdlaXNzZWxlLW1rOFwiLFxuICAgIG5hbWU6IFwiTUs4IFJhaWwgMTMuNVxcXCJcIixcbiAgICBicmFuZDogXCJHZWlzc2VsZVwiLFxuICAgIGNhdGVnb3J5SWQ6IFwiaGFuZGd1YXJkXCIsXG4gICAgcHJpY2U6IDMyNC45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9nZWlzc2VsZS1tazhcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcImhnLWNlbnR1cmlvbi1jNFwiLFxuICAgIG5hbWU6IFwiQzQgTS1MT0sgMTJcXFwiXCIsXG4gICAgYnJhbmQ6IFwiQ2VudHVyaW9uIEFybXNcIixcbiAgICBjYXRlZ29yeUlkOiBcImhhbmRndWFyZFwiLFxuICAgIHByaWNlOiAyODQuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vY2VudHVyaW9uLWM0XCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzdG9jay1iNS1icmF2b1wiLFxuICAgIG5hbWU6IFwiQlJBVk8gU3RvY2tcIixcbiAgICBicmFuZDogXCJCNSBTeXN0ZW1zXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJzdG9ja1wiLFxuICAgIHByaWNlOiA3NC45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9iNS1icmF2b1wiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic3RvY2stbWFncHVsLXNsXCIsXG4gICAgbmFtZTogXCJNT0UgU0wgQ2FyYmluZSBTdG9ja1wiLFxuICAgIGJyYW5kOiBcIk1hZ3B1bFwiLFxuICAgIGNhdGVnb3J5SWQ6IFwic3RvY2tcIixcbiAgICBwcmljZTogNjkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vbWFncHVsLXNsXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJvcHRpYy1lb3RlY2gtZXhwczNcIixcbiAgICBuYW1lOiBcIkVYUFMzIEhvbG9ncmFwaGljIFNpZ2h0XCIsXG4gICAgYnJhbmQ6IFwiRU9URUNIXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJvcHRpY1wiLFxuICAgIHByaWNlOiA3NDkuMCxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9lb3RlY2gtZXhwczNcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcIm9wdGljLWhvbG9zdW4tNTA5dFwiLFxuICAgIG5hbWU6IFwiSEU1MDlUIFJlZCBEb3RcIixcbiAgICBicmFuZDogXCJIb2xvc3VuXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJvcHRpY1wiLFxuICAgIHByaWNlOiAzNDkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vaG9sb3N1bi01MDl0XCIsXG4gIH0sXG5dO1xuIl0sIm5hbWVzIjpbIkNBVEVHT1JJRVMiLCJpZCIsIm5hbWUiLCJQQVJUUyIsImJyYW5kIiwiY2F0ZWdvcnlJZCIsInByaWNlIiwiYWZmaWxpYXRlVXJsIiwibm90ZXMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./data/gunbuilderParts.ts\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/add-locale.js": -/*!*****************************************************!*\ - !*** ./node_modules/next/dist/client/add-locale.js ***! - \*****************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst addLocale = function(path) {\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 (false) {}\n return path;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1sb2NhbGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs2Q0FHYUE7OztlQUFBQTs7O29EQUY4QjtBQUVwQyxNQUFNQSxZQUF1QixTQUFDQyxJQUFBQTtxQ0FBU0MsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsSUFBQUEsT0FBQUEsSUFBQUEsSUFBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7UUFBQUEsSUFBQUEsQ0FBQUEsT0FBQUEsRUFBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O0lBQzVDLElBQUlDLEtBQStCLEVBQUUsRUFJckM7SUFDQSxPQUFPRjtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2FkZC1sb2NhbGUudHM/ZmFhZSJdLCJuYW1lcyI6WyJhZGRMb2NhbGUiLCJwYXRoIiwiYXJncyIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/add-locale.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/get-domain-locale.js": -/*!************************************************************!*\ - !*** ./node_modules/next/dist/client/get-domain-locale.js ***! - \************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getDomainLocale\", ({\n enumerable: true,\n get: function() {\n return getDomainLocale;\n }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath = false || \"\";\nfunction getDomainLocale(path, locale, locales, domainLocales) {\n if (false) {} else {\n return false;\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-domain-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2dldC1kb21haW4tbG9jYWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7bURBT2dCQTs7O2VBQUFBOzs7b0RBSjJCO0FBRTNDLE1BQU1DLFdBQVdDLE1BQW1DLElBQWU7QUFFNUQsU0FBU0YsZ0JBQ2RLLElBQVksRUFDWkMsTUFBdUIsRUFDdkJDLE9BQWtCLEVBQ2xCQyxhQUE4QjtJQUU5QixJQUFJTixLQUErQixFQUFFLEVBZ0JyQyxNQUFPO1FBQ0wsT0FBTztJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvZ2V0LWRvbWFpbi1sb2NhbGUudHM/MWQ0ZSJdLCJuYW1lcyI6WyJnZXREb21haW5Mb2NhbGUiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsImxvY2FsZSIsImxvY2FsZXMiLCJkb21haW5Mb2NhbGVzIiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsIm5vcm1hbGl6ZUxvY2FsZVBhdGgiLCJyZXF1aXJlIiwiZGV0ZWN0RG9tYWluTG9jYWxlIiwidGFyZ2V0IiwiZGV0ZWN0ZWRMb2NhbGUiLCJkb21haW4iLCJ1bmRlZmluZWQiLCJwcm90byIsImh0dHAiLCJmaW5hbExvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/get-domain-locale.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/link.js": -/*!***********************************************!*\ - !*** ./node_modules/next/dist/client/link.js ***! - \***********************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _resolvehref = __webpack_require__(/*! ./resolve-href */ \"(app-pages-browser)/./node_modules/next/dist/client/resolve-href.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"(app-pages-browser)/./node_modules/next/dist/client/add-locale.js\");\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _useintersection = __webpack_require__(/*! ./use-intersection */ \"(app-pages-browser)/./node_modules/next/dist/client/use-intersection.js\");\nconst _getdomainlocale = __webpack_require__(/*! ./get-domain-locale */ \"(app-pages-browser)/./node_modules/next/dist/client/get-domain-locale.js\");\nconst _addbasepath = __webpack_require__(/*! ./add-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./components/router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst prefetched = new Set();\nfunction prefetch(router, href, as, options, appOptions, isAppRouter) {\n if (typeof window === \"undefined\") {\n return;\n }\n // app-router supports external urls out of the box so it shouldn't short-circuit here as support for e.g. `replace` is added in the app-router.\n if (!isAppRouter && !(0, _islocalurl.isLocalURL)(href)) {\n return;\n }\n // We should only dedupe requests when experimental.optimisticClientCache is\n // disabled.\n if (!options.bypassPrefetchedCheck) {\n const locale = typeof options.locale !== \"undefined\" ? options.locale : \"locale\" in router ? router.locale : undefined;\n const prefetchedKey = href + \"%\" + as + \"%\" + locale;\n // If we've already fetched the key, then don't prefetch it again!\n if (prefetched.has(prefetchedKey)) {\n return;\n }\n // Mark this URL as prefetched.\n prefetched.add(prefetchedKey);\n }\n const prefetchPromise = isAppRouter ? router.prefetch(href, appOptions) : router.prefetch(href, as, options);\n // Prefetch the JSON page if asked (only in the client)\n // We need to handle a prefetch error here since we may be\n // loading with priority which can reject but we don't\n // want to force navigation since this is only a prefetch\n Promise.resolve(prefetchPromise).catch((err)=>{\n if (true) {\n // rethrow to show invalid URL errors\n throw err;\n }\n });\n}\nfunction isModifiedEvent(event) {\n const eventTarget = event.currentTarget;\n const target = eventTarget.getAttribute(\"target\");\n return target && target !== \"_self\" || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || // triggers resource download\n event.nativeEvent && event.nativeEvent.which === 2;\n}\nfunction linkClicked(e, router, href, as, replace, shallow, scroll, locale, isAppRouter) {\n const { nodeName } = e.currentTarget;\n // anchors inside an svg have a lowercase nodeName\n const isAnchorNodeName = nodeName.toUpperCase() === \"A\";\n if (isAnchorNodeName && (isModifiedEvent(e) || // app-router supports external urls out of the box so it shouldn't short-circuit here as support for e.g. `replace` is added in the app-router.\n !isAppRouter && !(0, _islocalurl.isLocalURL)(href))) {\n // ignore click for browser’s default behavior\n return;\n }\n e.preventDefault();\n const navigate = ()=>{\n // If the router is an NextRouter instance it will have `beforePopState`\n const routerScroll = scroll != null ? scroll : true;\n if (\"beforePopState\" in router) {\n router[replace ? \"replace\" : \"push\"](href, as, {\n shallow,\n locale,\n scroll: routerScroll\n });\n } else {\n router[replace ? \"replace\" : \"push\"](as || href, {\n scroll: routerScroll\n });\n }\n };\n if (isAppRouter) {\n _react.default.startTransition(navigate);\n } else {\n navigate();\n }\n}\nfunction formatStringOrUrl(urlObjOrString) {\n if (typeof urlObjOrString === \"string\") {\n return urlObjOrString;\n }\n return (0, _formaturl.formatUrl)(urlObjOrString);\n}\n/**\n * A React component that extends the HTML `` element to provide [prefetching](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#2-prefetching)\n * and client-side navigation between routes.\n *\n * It is the primary way to navigate between routes in Next.js.\n *\n * Read more: [Next.js docs: ``](https://nextjs.org/docs/app/api-reference/components/link)\n */ const Link = /*#__PURE__*/ _s(_react.default.forwardRef(_c = _s(function LinkComponent(props, forwardedRef) {\n _s();\n let children;\n const { href: hrefProp, as: asProp, children: childrenProp, prefetch: prefetchProp = null, passHref, replace, shallow, scroll, locale, onClick, onMouseEnter: onMouseEnterProp, onTouchStart: onTouchStartProp, legacyBehavior = false, ...restProps } = props;\n children = childrenProp;\n if (legacyBehavior && (typeof children === \"string\" || typeof children === \"number\")) {\n children = /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n children: children\n });\n }\n const pagesRouter = _react.default.useContext(_routercontextsharedruntime.RouterContext);\n const appRouter = _react.default.useContext(_approutercontextsharedruntime.AppRouterContext);\n const router = pagesRouter != null ? pagesRouter : appRouter;\n // We're in the app directory if there is no pages router.\n const isAppRouter = !pagesRouter;\n const prefetchEnabled = prefetchProp !== false;\n /**\n * The possible states for prefetch are:\n * - null: this is the default \"auto\" mode, where we will prefetch partially if the link is in the viewport\n * - true: we will prefetch if the link is visible and prefetch the full page, not just partially\n * - false: we will not prefetch if in the viewport at all\n */ const appPrefetchKind = prefetchProp === null ? _routerreducertypes.PrefetchKind.AUTO : _routerreducertypes.PrefetchKind.FULL;\n if (true) {\n function createPropError(args) {\n return new Error(\"Failed prop type: The prop `\" + args.key + \"` expects a \" + args.expected + \" in ``, but got `\" + args.actual + \"` instead.\" + (typeof window !== \"undefined\" ? \"\\nOpen your browser's console to view the Component stack trace.\" : \"\"));\n }\n // TypeScript trick for type-guarding:\n const requiredPropsGuard = {\n href: true\n };\n const requiredProps = Object.keys(requiredPropsGuard);\n requiredProps.forEach((key)=>{\n if (key === \"href\") {\n if (props[key] == null || typeof props[key] !== \"string\" && typeof props[key] !== \"object\") {\n throw createPropError({\n key,\n expected: \"`string` or `object`\",\n actual: props[key] === null ? \"null\" : typeof props[key]\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = key;\n }\n });\n // TypeScript trick for type-guarding:\n const optionalPropsGuard = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n locale: true,\n onClick: true,\n onMouseEnter: true,\n onTouchStart: true,\n legacyBehavior: true\n };\n const optionalProps = Object.keys(optionalPropsGuard);\n optionalProps.forEach((key)=>{\n const valType = typeof props[key];\n if (key === \"as\") {\n if (props[key] && valType !== \"string\" && valType !== \"object\") {\n throw createPropError({\n key,\n expected: \"`string` or `object`\",\n actual: valType\n });\n }\n } else if (key === \"locale\") {\n if (props[key] && valType !== \"string\") {\n throw createPropError({\n key,\n expected: \"`string`\",\n actual: valType\n });\n }\n } else if (key === \"onClick\" || key === \"onMouseEnter\" || key === \"onTouchStart\") {\n if (props[key] && valType !== \"function\") {\n throw createPropError({\n key,\n expected: \"`function`\",\n actual: valType\n });\n }\n } else if (key === \"replace\" || key === \"scroll\" || key === \"shallow\" || key === \"passHref\" || key === \"prefetch\" || key === \"legacyBehavior\") {\n if (props[key] != null && valType !== \"boolean\") {\n throw createPropError({\n key,\n expected: \"`boolean`\",\n actual: valType\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = key;\n }\n });\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const hasWarned = _react.default.useRef(false);\n if (props.prefetch && !hasWarned.current && !isAppRouter) {\n hasWarned.current = true;\n console.warn(\"Next.js auto-prefetches automatically based on viewport. The prefetch attribute is no longer needed. More: https://nextjs.org/docs/messages/prefetch-true-deprecated\");\n }\n }\n if (true) {\n if (isAppRouter && !asProp) {\n let href;\n if (typeof hrefProp === \"string\") {\n href = hrefProp;\n } else if (typeof hrefProp === \"object\" && typeof hrefProp.pathname === \"string\") {\n href = hrefProp.pathname;\n }\n if (href) {\n const hasDynamicSegment = href.split(\"/\").some((segment)=>segment.startsWith(\"[\") && segment.endsWith(\"]\"));\n if (hasDynamicSegment) {\n throw new Error(\"Dynamic href `\" + href + \"` found in while using the `/app` router, this is not supported. Read more: https://nextjs.org/docs/messages/app-dir-dynamic-href\");\n }\n }\n }\n }\n const { href, as } = _react.default.useMemo(()=>{\n if (!pagesRouter) {\n const resolvedHref = formatStringOrUrl(hrefProp);\n return {\n href: resolvedHref,\n as: asProp ? formatStringOrUrl(asProp) : resolvedHref\n };\n }\n const [resolvedHref, resolvedAs] = (0, _resolvehref.resolveHref)(pagesRouter, hrefProp, true);\n return {\n href: resolvedHref,\n as: asProp ? (0, _resolvehref.resolveHref)(pagesRouter, asProp) : resolvedAs || resolvedHref\n };\n }, [\n pagesRouter,\n hrefProp,\n asProp\n ]);\n const previousHref = _react.default.useRef(href);\n const previousAs = _react.default.useRef(as);\n // This will return the first child, if multiple are provided it will throw an error\n let child;\n if (legacyBehavior) {\n if (true) {\n if (onClick) {\n console.warn('\"onClick\" was passed to with `href` of `' + hrefProp + '` but \"legacyBehavior\" was set. The legacy behavior requires onClick be set on the child of next/link');\n }\n if (onMouseEnterProp) {\n console.warn('\"onMouseEnter\" was passed to with `href` of `' + hrefProp + '` but \"legacyBehavior\" was set. The legacy behavior requires onMouseEnter be set on the child of next/link');\n }\n try {\n child = _react.default.Children.only(children);\n } catch (err) {\n if (!children) {\n throw new Error(\"No children were passed to with `href` of `\" + hrefProp + \"` but one child is required https://nextjs.org/docs/messages/link-no-children\");\n }\n throw new Error(\"Multiple children were passed to with `href` of `\" + hrefProp + \"` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children\" + (typeof window !== \"undefined\" ? \" \\nOpen your browser's console to view the Component stack trace.\" : \"\"));\n }\n } else {}\n } else {\n if (true) {\n if ((children == null ? void 0 : children.type) === \"a\") {\n throw new Error(\"Invalid with child. Please remove or use .\\nLearn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor\");\n }\n }\n }\n const childRef = legacyBehavior ? child && typeof child === \"object\" && child.ref : forwardedRef;\n const [setIntersectionRef, isVisible, resetVisible] = (0, _useintersection.useIntersection)({\n rootMargin: \"200px\"\n });\n const setRef = _react.default.useCallback((el)=>{\n // Before the link getting observed, check if visible state need to be reset\n if (previousAs.current !== as || previousHref.current !== href) {\n resetVisible();\n previousAs.current = as;\n previousHref.current = href;\n }\n setIntersectionRef(el);\n if (childRef) {\n if (typeof childRef === \"function\") childRef(el);\n else if (typeof childRef === \"object\") {\n childRef.current = el;\n }\n }\n }, [\n as,\n childRef,\n href,\n resetVisible,\n setIntersectionRef\n ]);\n // Prefetch the URL if we haven't already and it's visible.\n _react.default.useEffect(()=>{\n // in dev, we only prefetch on hover to avoid wasting resources as the prefetch will trigger compiling the page.\n if (true) {\n return;\n }\n if (!router) {\n return;\n }\n // If we don't need to prefetch the URL, don't do prefetch.\n if (!isVisible || !prefetchEnabled) {\n return;\n }\n // Prefetch the URL.\n prefetch(router, href, as, {\n locale\n }, {\n kind: appPrefetchKind\n }, isAppRouter);\n }, [\n as,\n href,\n isVisible,\n locale,\n prefetchEnabled,\n pagesRouter == null ? void 0 : pagesRouter.locale,\n router,\n isAppRouter,\n appPrefetchKind\n ]);\n const childProps = {\n ref: setRef,\n onClick (e) {\n if (true) {\n if (!e) {\n throw new Error('Component rendered inside next/link has to pass click event to \"onClick\" prop.');\n }\n }\n if (!legacyBehavior && typeof onClick === \"function\") {\n onClick(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onClick === \"function\") {\n child.props.onClick(e);\n }\n if (!router) {\n return;\n }\n if (e.defaultPrevented) {\n return;\n }\n linkClicked(e, router, href, as, replace, shallow, scroll, locale, isAppRouter);\n },\n onMouseEnter (e) {\n if (!legacyBehavior && typeof onMouseEnterProp === \"function\") {\n onMouseEnterProp(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onMouseEnter === \"function\") {\n child.props.onMouseEnter(e);\n }\n if (!router) {\n return;\n }\n if ((!prefetchEnabled || \"development\" === \"development\") && isAppRouter) {\n return;\n }\n prefetch(router, href, as, {\n locale,\n priority: true,\n // @see {https://github.com/vercel/next.js/discussions/40268?sort=top#discussioncomment-3572642}\n bypassPrefetchedCheck: true\n }, {\n kind: appPrefetchKind\n }, isAppRouter);\n },\n onTouchStart: false ? 0 : function onTouchStart(e) {\n if (!legacyBehavior && typeof onTouchStartProp === \"function\") {\n onTouchStartProp(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onTouchStart === \"function\") {\n child.props.onTouchStart(e);\n }\n if (!router) {\n return;\n }\n if (!prefetchEnabled && isAppRouter) {\n return;\n }\n prefetch(router, href, as, {\n locale,\n priority: true,\n // @see {https://github.com/vercel/next.js/discussions/40268?sort=top#discussioncomment-3572642}\n bypassPrefetchedCheck: true\n }, {\n kind: appPrefetchKind\n }, isAppRouter);\n }\n };\n // If child is an tag and doesn't have a href attribute, or if the 'passHref' property is\n // defined, we specify the current 'href', so that repetition is not needed by the user.\n // If the url is absolute, we can bypass the logic to prepend the domain and locale.\n if ((0, _utils.isAbsoluteUrl)(as)) {\n childProps.href = as;\n } else if (!legacyBehavior || passHref || child.type === \"a\" && !(\"href\" in child.props)) {\n const curLocale = typeof locale !== \"undefined\" ? locale : pagesRouter == null ? void 0 : pagesRouter.locale;\n // we only render domain locales if we are currently on a domain locale\n // so that locale links are still visitable in development/preview envs\n const localeDomain = (pagesRouter == null ? void 0 : pagesRouter.isLocaleDomain) && (0, _getdomainlocale.getDomainLocale)(as, curLocale, pagesRouter == null ? void 0 : pagesRouter.locales, pagesRouter == null ? void 0 : pagesRouter.domainLocales);\n childProps.href = localeDomain || (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, curLocale, pagesRouter == null ? void 0 : pagesRouter.defaultLocale));\n }\n return legacyBehavior ? /*#__PURE__*/ _react.default.cloneElement(child, childProps) : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n ...restProps,\n ...childProps,\n children: children\n });\n}, \"wKD5mb5mk47bkaStGb/Fvd6RWZE=\")), \"wKD5mb5mk47bkaStGb/Fvd6RWZE=\");\n_c1 = Link;\nconst _default = Link;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=link.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"Link$_react.default.forwardRef\");\n$RefreshReg$(_c1, \"Link\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2xpbmsuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7NkJBUzRCQSx5QkFBQUMsQ0FBQSxDQUFBQyxtQkFBQUEsQ0FBQTt5Q0FDRDt3Q0FDRDt1Q0FDSTs7Ozt1Q0FRRUEsbUJBQUFBLENBQUE7NkNBQ0E7NkNBQ0o7O0FBMkY1QixNQUFNQyxzQkFBaUJDLG1CQUFBQSxDQUFBQSwrSkFBQUE7QUFVdkIsTUFBQUQsYUFDRUUsSUFBQUE7U0FPSUMsU0FBT0MsTUFBQUEsRUFBV0MsSUFBQSxFQUFBQyxFQUFBLEVBQUFDLE9BQWEsRUFBQUMsVUFBQSxFQUFBQyxXQUFBO1FBQ2pDLE9BQUFMLFdBQUE7UUFDRjtJQUVBO0lBQ0EsZ0pBQXVDO1FBQ3JDLENBQUFLLGVBQUEsS0FBQUMsWUFBQUMsVUFBQSxFQUFBTixPQUFBO1FBQ0Y7SUFFQTtJQUNBLDRFQUFZO0lBQ1osWUFBS0U7UUFDSCxDQUFBQSxRQUFNSyxxQkFDSjtRQUNBLE1BQUFBLFNBT0YsT0FBTUMsUUFBQUEsTUFBQUEsS0FBZ0JSLGNBQWtCRSxRQUFNSyxNQUFBQSxHQUFBQSxZQUFBQSxTQUFBQSxPQUFBQSxNQUFBQSxHQUFBQTtRQUU5QyxNQUFBQyxnQkFBQVIsT0FBQSxNQUFBQyxLQUFBLE1BQUFNO1FBQ0Esa0VBQW1DO1lBQ2pDWixXQUFBYyxHQUFBLENBQUFELGdCQUFBO1lBQ0Y7UUFFQTtRQUNBYiwrQkFBZWE7UUFDakJiLFdBQUFlLEdBQUEsQ0FBQUY7SUFFQTtJQUlBLE1BQUFHLGtCQUFBUCxjQUFBUCxPQUFBQyxRQUFBLENBQUFFLE1BQXVERyxjQUFBTixPQUFBQyxRQUFBLENBQUFFLE1BQUFDLElBQUFDO0lBQ3ZEO0lBQ0EsMERBQXNEO0lBQ3REO0lBQ0FVLHlEQUF3Q0M7WUFDbENDLE9BQUFBLENBQVFDLGlCQUFpQkMsS0FBQSxFQUFBSDtZQUMzQkMsSUFBQSxFQUFxQztZQUNyQyxxQ0FBTUQ7WUFD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QUFBdEMsT0FBQXlCLGNBQUEsa0JBQUFjLFlBQUFDLEdBQUE7UUFBRyxHQUFHZixTQUFBQTtxQkFDbkIxRTs7SUFHUCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9saW5rLnRzeD9hY2YwIl0sIm5hbWVzIjpbIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsIl8iLCJyZXF1aXJlIiwicHJlZmV0Y2hlZCIsIlNldCIsInJvdXRlciIsInByZWZldGNoIiwid2luZG93IiwiaHJlZiIsImFzIiwib3B0aW9ucyIsImFwcE9wdGlvbnMiLCJpc0FwcFJvdXRlciIsIl9pc2xvY2FsdXJsIiwiaXNMb2NhbFVSTCIsImxvY2FsZSIsInByZWZldGNoZWRLZXkiLCJoYXMiLCJhZGQiLCJwcmVmZXRjaFByb21pc2UiLCJQcm9taXNlIiwiZXJyIiwicHJvY2VzcyIsImVudiIsImNhdGNoIiwiaXNNb2RpZmllZEV2ZW50IiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwidGFyZ2V0IiwiZXZlbnRUYXJnZXQiLCJuYXRpdmVFdmVudCIsIndoaWNoIiwibWV0YUtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsImFsdEtleSIsImxpbmtDbGlja2VkIiwiZSIsInJlcGxhY2UiLCJzaGFsbG93Iiwic2Nyb2xsIiwibm9kZU5hbWUiLCJpc0FuY2hvck5vZGVOYW1lIiwicHJldmVudERlZmF1bHQiLCJuYXZpZ2F0ZSIsInJvdXRlclNjcm9sbCIsIlJlYWN0IiwiX3JlYWN0IiwiZGVmYXVsdCIsInN0YXJ0VHJhbnNpdGlvbiIsImZvcm1hdFN0cmluZ09yVXJsIiwidXJsT2JqT3JTdHJpbmciLCJfZm9ybWF0dXJsIiwiZm9ybWF0VXJsIiwiY2hpbGRyZW4iLCJjaGlsZHJlblByb3AiLCJsZWdhY3lCZWhhdmlvciIsImEiLCJhcHBSb3V0ZXIiLCJ1c2VDb250ZXh0IiwiQXBwUm91dGVyQ29udGV4dCIsInBhZ2VzUm91dGVyIiwicHJlZmV0Y2hFbmFibGVkIiwicHJlZmV0Y2hQcm9wIiwiX3JvdXRlcnJlZHVjZXJ0eXBlcyIsIlByZWZldGNoS2luZCIsIkFVVE8iLCJGVUxMIiwiYXJncyIsImNyZWF0ZVByb3BFcnJvciIsIkVycm9yIiwia2V5IiwiZXhwZWN0ZWQiLCJhY3R1YWwiLCJyZXF1aXJlZFByb3BzIiwiT2JqZWN0IiwicHJvcHMiLCJwYXNzSHJlZiIsIm9uQ2xpY2siLCJvbk1vdXNlRW50ZXIiLCJvblRvdWNoU3RhcnQiLCJvcHRpb25hbFByb3BzIiwidmFsVHlwZSIsImhhc1dhcm5lZCIsImN1cnJlbnQiLCJjb25zb2xlIiwid2FybiIsImFzUHJvcCIsImhyZWZQcm9wIiwicGF0aG5hbWUiLCJoYXNEeW5hbWljU2VnbWVudCIsInNwbGl0Iiwic29tZSIsInNlZ21lbnQiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJ1c2VNZW1vIiwicmVzb2x2ZWRIcmVmIiwicmVzb2x2ZWRBcyIsIl9yZXNvbHZlaHJlZiIsInJlc29sdmVIcmVmIiwicHJldmlvdXNBcyIsInVzZVJlZiIsImNoaWxkIiwiTk9ERV9FTlYiLCJDaGlsZHJlbiIsIm9ubHkiLCJ0eXBlIiwiY2hpbGRSZWYiLCJzZXRJbnRlcnNlY3Rpb25SZWYiLCJpc1Zpc2libGUiLCJyZXNldFZpc2libGUiLCJ1c2VJbnRlcnNlY3Rpb24iLCJyb290TWFyZ2luIiwiX3VzZWludGVyc2VjdGlvbiIsInNldFJlZiIsInVzZUNhbGxiYWNrIiwiZWwiLCJwcmV2aW91c0hyZWYiLCJ1c2VFZmZlY3QiLCJhcHBQcmVmZXRjaEtpbmQiLCJyZWYiLCJkZWZhdWx0UHJldmVudGVkIiwib25Nb3VzZUVudGVyUHJvcCIsInByaW9yaXR5IiwiYnlwYXNzUHJlZmV0Y2hlZENoZWNrIiwib25Ub3VjaFN0YXJ0UHJvcCIsInVuZGVmaW5lZCIsImNoaWxkUHJvcHMiLCJjdXJMb2NhbGUiLCJpc0xvY2FsZURvbWFpbiIsImxvY2FsZURvbWFpbiIsImFkZEJhc2VQYXRoIiwiYWRkTG9jYWxlIiwiX2dldGRvbWFpbmxvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJsb2NhbGVzIiwiZG9tYWluTG9jYWxlcyIsIl9hZGRiYXNlcGF0aCIsIl9hZGRsb2NhbGUiLCJyZXN0UHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJfanN4cnVudGltZSIsImpzeCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/link.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/request-idle-callback.js": -/*!****************************************************************!*\ - !*** ./node_modules/next/dist/client/request-idle-callback.js ***! - \****************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n cancelIdleCallback: function() {\n return cancelIdleCallback;\n },\n requestIdleCallback: function() {\n return requestIdleCallback;\n }\n});\nconst requestIdleCallback = typeof self !== \"undefined\" && self.requestIdleCallback && self.requestIdleCallback.bind(window) || function(cb) {\n let start = Date.now();\n return self.setTimeout(function() {\n cb({\n didTimeout: false,\n timeRemaining: function() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n};\nconst cancelIdleCallback = typeof self !== \"undefined\" && self.cancelIdleCallback && self.cancelIdleCallback.bind(window) || function(id) {\n return clearTimeout(id);\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=request-idle-callback.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlcXVlc3QtaWRsZS1jYWxsYmFjay5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFnQmFBLG9CQUFrQjtlQUFsQkE7O0lBaEJBQyxxQkFBbUI7ZUFBbkJBOzs7QUFBTixNQUFNQSxzQkFDWCxPQUFRQyxTQUFTLGVBQ2ZBLEtBQUtELG1CQUFtQixJQUN4QkMsS0FBS0QsbUJBQW1CLENBQUNFLElBQUksQ0FBQ0MsV0FDaEMsU0FBVUMsRUFBdUI7SUFDL0IsSUFBSUMsUUFBUUMsS0FBS0MsR0FBRztJQUNwQixPQUFPTixLQUFLTyxVQUFVLENBQUM7UUFDckJKLEdBQUc7WUFDREssWUFBWTtZQUNaQyxlQUFlO2dCQUNiLE9BQU9DLEtBQUtDLEdBQUcsQ0FBQyxHQUFHLEtBQU1OLENBQUFBLEtBQUtDLEdBQUcsS0FBS0YsS0FBQUE7WUFDeEM7UUFDRjtJQUNGLEdBQUc7QUFDTDtBQUVLLE1BQU1OLHFCQUNYLE9BQVFFLFNBQVMsZUFDZkEsS0FBS0Ysa0JBQWtCLElBQ3ZCRSxLQUFLRixrQkFBa0IsQ0FBQ0csSUFBSSxDQUFDQyxXQUMvQixTQUFVVSxFQUFVO0lBQ2xCLE9BQU9DLGFBQWFEO0FBQ3RCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L3JlcXVlc3QtaWRsZS1jYWxsYmFjay50cz8wNWY0Il0sIm5hbWVzIjpbImNhbmNlbElkbGVDYWxsYmFjayIsInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJzZWxmIiwiYmluZCIsIndpbmRvdyIsImNiIiwic3RhcnQiLCJEYXRlIiwibm93Iiwic2V0VGltZW91dCIsImRpZFRpbWVvdXQiLCJ0aW1lUmVtYWluaW5nIiwiTWF0aCIsIm1heCIsImlkIiwiY2xlYXJUaW1lb3V0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/request-idle-callback.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/resolve-href.js": -/*!*******************************************************!*\ - !*** ./node_modules/next/dist/client/resolve-href.js ***! - \*******************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"resolveHref\", ({\n enumerable: true,\n get: function() {\n return resolveHref;\n }\n}));\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _omit = __webpack_require__(/*! ../shared/lib/router/utils/omit */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _utils1 = __webpack_require__(/*! ../shared/lib/router/utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nfunction resolveHref(router, href, resolveAs) {\n // we use a dummy base url for relative urls\n let base;\n let urlAsString = typeof href === \"string\" ? href : (0, _formaturl.formatWithValidation)(href);\n // repeated slashes and backslashes in the URL are considered\n // invalid and will never match a Next.js page/file\n const urlProtoMatch = urlAsString.match(/^[a-zA-Z]{1,}:\\/\\//);\n const urlAsStringNoProto = urlProtoMatch ? urlAsString.slice(urlProtoMatch[0].length) : urlAsString;\n const urlParts = urlAsStringNoProto.split(\"?\", 1);\n if ((urlParts[0] || \"\").match(/(\\/\\/|\\\\)/)) {\n console.error(\"Invalid href '\" + urlAsString + \"' passed to next/router in page: '\" + router.pathname + \"'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.\");\n const normalizedUrl = (0, _utils.normalizeRepeatedSlashes)(urlAsStringNoProto);\n urlAsString = (urlProtoMatch ? urlProtoMatch[0] : \"\") + normalizedUrl;\n }\n // Return because it cannot be routed by the Next.js router\n if (!(0, _islocalurl.isLocalURL)(urlAsString)) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n try {\n base = new URL(urlAsString.startsWith(\"#\") ? router.asPath : router.pathname, \"http://n\");\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n base = new URL(\"/\", \"http://n\");\n }\n try {\n const finalUrl = new URL(urlAsString, base);\n finalUrl.pathname = (0, _normalizetrailingslash.normalizePathTrailingSlash)(finalUrl.pathname);\n let interpolatedAs = \"\";\n if ((0, _utils1.isDynamicRoute)(finalUrl.pathname) && finalUrl.searchParams && resolveAs) {\n const query = (0, _querystring.searchParamsToUrlQuery)(finalUrl.searchParams);\n const { result, params } = (0, _interpolateas.interpolateAs)(finalUrl.pathname, finalUrl.pathname, query);\n if (result) {\n interpolatedAs = (0, _formaturl.formatWithValidation)({\n pathname: result,\n hash: finalUrl.hash,\n query: (0, _omit.omit)(query, params)\n });\n }\n }\n // if the origin didn't change, it means we received a relative href\n const resolvedHref = finalUrl.origin === base.origin ? finalUrl.href.slice(finalUrl.origin.length) : finalUrl.href;\n return resolveAs ? [\n resolvedHref,\n interpolatedAs || resolvedHref\n ] : resolvedHref;\n } catch (_) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=resolve-href.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3Jlc29sdmUtaHJlZi5qcyIsIm1hcHBpbmdzIjoiOzs7OytDQXlCZ0JBOzs7ZUFBQUE7Ozt5Q0F2QnVCO3VDQUNGO2tDQUNoQjttQ0FDb0I7b0RBQ0U7d0NBQ2hCO29DQUNJOzJDQUNEO0FBZ0J2QixTQUFTQSxZQUNkQyxNQUFrQixFQUNsQkMsSUFBUyxFQUNUQyxTQUFtQjtJQUVuQiw0Q0FBNEM7SUFDNUMsSUFBSUM7SUFDSixJQUFJQyxjQUFjLE9BQU9ILFNBQVMsV0FBV0EsT0FBT0ksQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQW9CLEVBQUNKO0lBRXpFLDZEQUE2RDtJQUM3RCxtREFBbUQ7SUFDbkQsTUFBTUssZ0JBQWdCRixZQUFZRyxLQUFLLENBQUM7SUFDeEMsTUFBTUMscUJBQXFCRixnQkFDdkJGLFlBQVlLLEtBQUssQ0FBQ0gsYUFBYSxDQUFDLEVBQUUsQ0FBQ0ksTUFBTSxJQUN6Q047SUFFSixNQUFNTyxXQUFXSCxtQkFBbUJJLEtBQUssQ0FBQyxLQUFLO0lBRS9DLElBQUksQ0FBQ0QsUUFBUSxDQUFDLEVBQUUsSUFBSSxJQUFJSixLQUFLLENBQUMsY0FBYztRQUMxQ00sUUFBUUMsS0FBSyxDQUNYLG1CQUFpQlYsY0FBWSx1Q0FBb0NKLE9BQU9lLFFBQVEsR0FBQztRQUVuRixNQUFNQyxnQkFBZ0JDLENBQUFBLEdBQUFBLE9BQUFBLHdCQUF3QixFQUFDVDtRQUMvQ0osY0FBYyxDQUFDRSxnQkFBZ0JBLGFBQWEsQ0FBQyxFQUFFLEdBQUcsTUFBTVU7SUFDMUQ7SUFFQSwyREFBMkQ7SUFDM0QsSUFBSSxDQUFDRSxDQUFBQSxHQUFBQSxZQUFBQSxVQUFVLEVBQUNkLGNBQWM7UUFDNUIsT0FBUUYsWUFBWTtZQUFDRTtTQUFZLEdBQUdBO0lBQ3RDO0lBRUEsSUFBSTtRQUNGRCxPQUFPLElBQUlnQixJQUNUZixZQUFZZ0IsVUFBVSxDQUFDLE9BQU9wQixPQUFPcUIsTUFBTSxHQUFHckIsT0FBT2UsUUFBUSxFQUM3RDtJQUVKLEVBQUUsT0FBT08sR0FBRztRQUNWLGtEQUFrRDtRQUNsRG5CLE9BQU8sSUFBSWdCLElBQUksS0FBSztJQUN0QjtJQUVBLElBQUk7UUFDRixNQUFNSSxXQUFXLElBQUlKLElBQUlmLGFBQWFEO1FBQ3RDb0IsU0FBU1IsUUFBUSxHQUFHUyxDQUFBQSxHQUFBQSx3QkFBQUEsMEJBQTBCLEVBQUNELFNBQVNSLFFBQVE7UUFDaEUsSUFBSVUsaUJBQWlCO1FBRXJCLElBQ0VDLENBQUFBLEdBQUFBLFFBQUFBLGNBQWMsRUFBQ0gsU0FBU1IsUUFBUSxLQUNoQ1EsU0FBU0ksWUFBWSxJQUNyQnpCLFdBQ0E7WUFDQSxNQUFNMEIsUUFBUUMsQ0FBQUEsR0FBQUEsYUFBQUEsc0JBQXNCLEVBQUNOLFNBQVNJLFlBQVk7WUFFMUQsTUFBTSxFQUFFRyxNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFhLEVBQ3RDVCxTQUFTUixRQUFRLEVBQ2pCUSxTQUFTUixRQUFRLEVBQ2pCYTtZQUdGLElBQUlFLFFBQVE7Z0JBQ1ZMLGlCQUFpQnBCLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFvQixFQUFDO29CQUNwQ1UsVUFBVWU7b0JBQ1ZHLE1BQU1WLFNBQVNVLElBQUk7b0JBQ25CTCxPQUFPTSxDQUFBQSxHQUFBQSxNQUFBQSxJQUFJLEVBQUNOLE9BQU9HO2dCQUNyQjtZQUNGO1FBQ0Y7UUFFQSxvRUFBb0U7UUFDcEUsTUFBTUksZUFDSlosU0FBU2EsTUFBTSxLQUFLakMsS0FBS2lDLE1BQU0sR0FDM0JiLFNBQVN0QixJQUFJLENBQUNRLEtBQUssQ0FBQ2MsU0FBU2EsTUFBTSxDQUFDMUIsTUFBTSxJQUMxQ2EsU0FBU3RCLElBQUk7UUFFbkIsT0FBT0MsWUFDSDtZQUFDaUM7WUFBY1Ysa0JBQWtCVTtTQUFhLEdBQzlDQTtJQUNOLEVBQUUsT0FBT2IsR0FBRztRQUNWLE9BQU9wQixZQUFZO1lBQUNFO1NBQVksR0FBR0E7SUFDckM7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9yZXNvbHZlLWhyZWYudHM/ZTZkMiJdLCJuYW1lcyI6WyJyZXNvbHZlSHJlZiIsInJvdXRlciIsImhyZWYiLCJyZXNvbHZlQXMiLCJiYXNlIiwidXJsQXNTdHJpbmciLCJmb3JtYXRXaXRoVmFsaWRhdGlvbiIsInVybFByb3RvTWF0Y2giLCJtYXRjaCIsInVybEFzU3RyaW5nTm9Qcm90byIsInNsaWNlIiwibGVuZ3RoIiwidXJsUGFydHMiLCJzcGxpdCIsImNvbnNvbGUiLCJlcnJvciIsInBhdGhuYW1lIiwibm9ybWFsaXplZFVybCIsIm5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyIsImlzTG9jYWxVUkwiLCJVUkwiLCJzdGFydHNXaXRoIiwiYXNQYXRoIiwiXyIsImZpbmFsVXJsIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJpbnRlcnBvbGF0ZWRBcyIsImlzRHluYW1pY1JvdXRlIiwic2VhcmNoUGFyYW1zIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwicmVzdWx0IiwicGFyYW1zIiwiaW50ZXJwb2xhdGVBcyIsImhhc2giLCJvbWl0IiwicmVzb2x2ZWRIcmVmIiwib3JpZ2luIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/resolve-href.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/use-intersection.js": -/*!***********************************************************!*\ - !*** ./node_modules/next/dist/client/use-intersection.js ***! - \***********************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useIntersection\", ({\n enumerable: true,\n get: function() {\n return useIntersection;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"(app-pages-browser)/./node_modules/next/dist/client/request-idle-callback.js\");\nconst hasIntersectionObserver = typeof IntersectionObserver === \"function\";\nconst observers = new Map();\nconst idList = [];\nfunction createObserver(options) {\n const id = {\n root: options.root || null,\n margin: options.rootMargin || \"\"\n };\n const existing = idList.find((obj)=>obj.root === id.root && obj.margin === id.margin);\n let instance;\n if (existing) {\n instance = observers.get(existing);\n if (instance) {\n return instance;\n }\n }\n const elements = new Map();\n const observer = new IntersectionObserver((entries)=>{\n entries.forEach((entry)=>{\n const callback = elements.get(entry.target);\n const isVisible = entry.isIntersecting || entry.intersectionRatio > 0;\n if (callback && isVisible) {\n callback(isVisible);\n }\n });\n }, options);\n instance = {\n id,\n observer,\n elements\n };\n idList.push(id);\n observers.set(id, instance);\n return instance;\n}\nfunction observe(element, callback, options) {\n const { id, observer, elements } = createObserver(options);\n elements.set(element, callback);\n observer.observe(element);\n return function unobserve() {\n elements.delete(element);\n observer.unobserve(element);\n // Destroy observer when there's nothing left to watch:\n if (elements.size === 0) {\n observer.disconnect();\n observers.delete(id);\n const index = idList.findIndex((obj)=>obj.root === id.root && obj.margin === id.margin);\n if (index > -1) {\n idList.splice(index, 1);\n }\n }\n };\n}\nfunction useIntersection(param) {\n let { rootRef, rootMargin, disabled } = param;\n const isDisabled = disabled || !hasIntersectionObserver;\n const [visible, setVisible] = (0, _react.useState)(false);\n const elementRef = (0, _react.useRef)(null);\n const setElement = (0, _react.useCallback)((element)=>{\n elementRef.current = element;\n }, []);\n (0, _react.useEffect)(()=>{\n if (hasIntersectionObserver) {\n if (isDisabled || visible) return;\n const element = elementRef.current;\n if (element && element.tagName) {\n const unobserve = observe(element, (isVisible)=>isVisible && setVisible(isVisible), {\n root: rootRef == null ? void 0 : rootRef.current,\n rootMargin\n });\n return unobserve;\n }\n } else {\n if (!visible) {\n const idleCallback = (0, _requestidlecallback.requestIdleCallback)(()=>setVisible(true));\n return ()=>(0, _requestidlecallback.cancelIdleCallback)(idleCallback);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isDisabled,\n rootMargin,\n rootRef,\n visible,\n elementRef.current\n ]);\n const resetVisible = (0, _react.useCallback)(()=>{\n setVisible(false);\n }, []);\n return [\n setElement,\n visible,\n resetVisible\n ];\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-intersection.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3VzZS1pbnRlcnNlY3Rpb24uanMiLCJtYXBwaW5ncyI6Ijs7OzttREErRmdCQTs7O2VBQUFBOzs7bUNBL0Z5QztpREFJbEQ7QUFxQlAsTUFBTUMsMEJBQTBCLE9BQU9DLHlCQUF5QjtBQUVoRSxNQUFNQyxZQUFZLElBQUlDO0FBQ3RCLE1BQU1DLFNBQXVCLEVBQUU7QUFFL0IsU0FBU0MsZUFBZUMsT0FBb0M7SUFDMUQsTUFBTUMsS0FBSztRQUNUQyxNQUFNRixRQUFRRSxJQUFJLElBQUk7UUFDdEJDLFFBQVFILFFBQVFJLFVBQVUsSUFBSTtJQUNoQztJQUNBLE1BQU1DLFdBQVdQLE9BQU9RLElBQUksQ0FDMUIsQ0FBQ0MsTUFBUUEsSUFBSUwsSUFBSSxLQUFLRCxHQUFHQyxJQUFJLElBQUlLLElBQUlKLE1BQU0sS0FBS0YsR0FBR0UsTUFBTTtJQUUzRCxJQUFJSztJQUVKLElBQUlILFVBQVU7UUFDWkcsV0FBV1osVUFBVWEsR0FBRyxDQUFDSjtRQUN6QixJQUFJRyxVQUFVO1lBQ1osT0FBT0E7UUFDVDtJQUNGO0lBRUEsTUFBTUUsV0FBVyxJQUFJYjtJQUNyQixNQUFNYyxXQUFXLElBQUloQixxQkFBcUIsQ0FBQ2lCO1FBQ3pDQSxRQUFRQyxPQUFPLENBQUMsQ0FBQ0M7WUFDZixNQUFNQyxXQUFXTCxTQUFTRCxHQUFHLENBQUNLLE1BQU1FLE1BQU07WUFDMUMsTUFBTUMsWUFBWUgsTUFBTUksY0FBYyxJQUFJSixNQUFNSyxpQkFBaUIsR0FBRztZQUNwRSxJQUFJSixZQUFZRSxXQUFXO2dCQUN6QkYsU0FBU0U7WUFDWDtRQUNGO0lBQ0YsR0FBR2pCO0lBQ0hRLFdBQVc7UUFDVFA7UUFDQVU7UUFDQUQ7SUFDRjtJQUVBWixPQUFPc0IsSUFBSSxDQUFDbkI7SUFDWkwsVUFBVXlCLEdBQUcsQ0FBQ3BCLElBQUlPO0lBQ2xCLE9BQU9BO0FBQ1Q7QUFFQSxTQUFTYyxRQUNQQyxPQUFnQixFQUNoQlIsUUFBeUIsRUFDekJmLE9BQW9DO0lBRXBDLE1BQU0sRUFBRUMsRUFBRSxFQUFFVSxRQUFRLEVBQUVELFFBQVEsRUFBRSxHQUFHWCxlQUFlQztJQUNsRFUsU0FBU1csR0FBRyxDQUFDRSxTQUFTUjtJQUV0QkosU0FBU1csT0FBTyxDQUFDQztJQUNqQixPQUFPLFNBQVNDO1FBQ2RkLFNBQVNlLE1BQU0sQ0FBQ0Y7UUFDaEJaLFNBQVNhLFNBQVMsQ0FBQ0Q7UUFFbkIsdURBQXVEO1FBQ3ZELElBQUliLFNBQVNnQixJQUFJLEtBQUssR0FBRztZQUN2QmYsU0FBU2dCLFVBQVU7WUFDbkIvQixVQUFVNkIsTUFBTSxDQUFDeEI7WUFDakIsTUFBTTJCLFFBQVE5QixPQUFPK0IsU0FBUyxDQUM1QixDQUFDdEIsTUFBUUEsSUFBSUwsSUFBSSxLQUFLRCxHQUFHQyxJQUFJLElBQUlLLElBQUlKLE1BQU0sS0FBS0YsR0FBR0UsTUFBTTtZQUUzRCxJQUFJeUIsUUFBUSxDQUFDLEdBQUc7Z0JBQ2Q5QixPQUFPZ0MsTUFBTSxDQUFDRixPQUFPO1lBQ3ZCO1FBQ0Y7SUFDRjtBQUNGO0FBRU8sU0FBU25DLGdCQUFtQ3NDLEtBSWpDO0lBSmlDLE1BQ2pEQyxPQUFPLEVBQ1A1QixVQUFVLEVBQ1Y2QixRQUFRLEVBQ1EsR0FKaUNGO0lBS2pELE1BQU1HLGFBQXNCRCxZQUFZLENBQUN2QztJQUV6QyxNQUFNLENBQUN5QyxTQUFTQyxXQUFXLEdBQUdDLENBQUFBLEdBQUFBLE9BQUFBLFFBQVEsRUFBQztJQUN2QyxNQUFNQyxhQUFhQyxDQUFBQSxHQUFBQSxPQUFBQSxNQUFNLEVBQVc7SUFDcEMsTUFBTUMsYUFBYUMsQ0FBQUEsR0FBQUEsT0FBQUEsV0FBVyxFQUFDLENBQUNsQjtRQUM5QmUsV0FBV0ksT0FBTyxHQUFHbkI7SUFDdkIsR0FBRyxFQUFFO0lBRUxvQixDQUFBQSxHQUFBQSxPQUFBQSxTQUFTLEVBQUM7UUFDUixJQUFJakQseUJBQXlCO1lBQzNCLElBQUl3QyxjQUFjQyxTQUFTO1lBRTNCLE1BQU1aLFVBQVVlLFdBQVdJLE9BQU87WUFDbEMsSUFBSW5CLFdBQVdBLFFBQVFxQixPQUFPLEVBQUU7Z0JBQzlCLE1BQU1wQixZQUFZRixRQUNoQkMsU0FDQSxDQUFDTixZQUFjQSxhQUFhbUIsV0FBV25CLFlBQ3ZDO29CQUFFZixNQUFNOEIsV0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsUUFBU1UsT0FBTztvQkFBRXRDO2dCQUFXO2dCQUd2QyxPQUFPb0I7WUFDVDtRQUNGLE9BQU87WUFDTCxJQUFJLENBQUNXLFNBQVM7Z0JBQ1osTUFBTVUsZUFBZUMsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFtQixFQUFDLElBQU1WLFdBQVc7Z0JBQzFELE9BQU8sSUFBTVcsQ0FBQUEsR0FBQUEscUJBQUFBLGtCQUFrQixFQUFDRjtZQUNsQztRQUNGO0lBQ0EsdURBQXVEO0lBQ3pELEdBQUc7UUFBQ1g7UUFBWTlCO1FBQVk0QjtRQUFTRztRQUFTRyxXQUFXSSxPQUFPO0tBQUM7SUFFakUsTUFBTU0sZUFBZVAsQ0FBQUEsR0FBQUEsT0FBQUEsV0FBVyxFQUFDO1FBQy9CTCxXQUFXO0lBQ2IsR0FBRyxFQUFFO0lBRUwsT0FBTztRQUFDSTtRQUFZTDtRQUFTYTtLQUFhO0FBQzVDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L3VzZS1pbnRlcnNlY3Rpb24udHN4PzU3ZWUiXSwibmFtZXMiOlsidXNlSW50ZXJzZWN0aW9uIiwiaGFzSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmVycyIsIk1hcCIsImlkTGlzdCIsImNyZWF0ZU9ic2VydmVyIiwib3B0aW9ucyIsImlkIiwicm9vdCIsIm1hcmdpbiIsInJvb3RNYXJnaW4iLCJleGlzdGluZyIsImZpbmQiLCJvYmoiLCJpbnN0YW5jZSIsImdldCIsImVsZW1lbnRzIiwib2JzZXJ2ZXIiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImVudHJ5IiwiY2FsbGJhY2siLCJ0YXJnZXQiLCJpc1Zpc2libGUiLCJpc0ludGVyc2VjdGluZyIsImludGVyc2VjdGlvblJhdGlvIiwicHVzaCIsInNldCIsIm9ic2VydmUiLCJlbGVtZW50IiwidW5vYnNlcnZlIiwiZGVsZXRlIiwic2l6ZSIsImRpc2Nvbm5lY3QiLCJpbmRleCIsImZpbmRJbmRleCIsInNwbGljZSIsInBhcmFtIiwicm9vdFJlZiIsImRpc2FibGVkIiwiaXNEaXNhYmxlZCIsInZpc2libGUiLCJzZXRWaXNpYmxlIiwidXNlU3RhdGUiLCJlbGVtZW50UmVmIiwidXNlUmVmIiwic2V0RWxlbWVudCIsInVzZUNhbGxiYWNrIiwiY3VycmVudCIsInVzZUVmZmVjdCIsInRhZ05hbWUiLCJpZGxlQ2FsbGJhY2siLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwiY2FuY2VsSWRsZUNhbGxiYWNrIiwicmVzZXRWaXNpYmxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/use-intersection.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js": -/*!************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/escape-regexp.js ***! - \************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("// regexp is based on https://github.com/sindresorhus/escape-string-regexp\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"escapeStringRegexp\", ({\n enumerable: true,\n get: function() {\n return escapeStringRegexp;\n }\n}));\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/;\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g;\nfunction escapeStringRegexp(str) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, \"\\\\$&\");\n }\n return str;\n} //# sourceMappingURL=escape-regexp.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lc2NhcGUtcmVnZXhwLmpzIiwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTs7Ozs7c0RBSTFEQTs7O2VBQUFBOzs7QUFIaEIsTUFBTUMsY0FBYztBQUNwQixNQUFNQyxrQkFBa0I7QUFFakIsU0FBU0YsbUJBQW1CRyxHQUFXO0lBQzVDLCtHQUErRztJQUMvRyxJQUFJRixZQUFZRyxJQUFJLENBQUNELE1BQU07UUFDekIsT0FBT0EsSUFBSUUsT0FBTyxDQUFDSCxpQkFBaUI7SUFDdEM7SUFDQSxPQUFPQztBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9lc2NhcGUtcmVnZXhwLnRzP2RjYjEiXSwibmFtZXMiOlsiZXNjYXBlU3RyaW5nUmVnZXhwIiwicmVIYXNSZWdFeHAiLCJyZVJlcGxhY2VSZWdFeHAiLCJzdHIiLCJ0ZXN0IiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js": -/*!****************************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router-context.shared-runtime.js ***! - \****************************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouterContext\", ({\n enumerable: true,\n get: function() {\n return RouterContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst RouterContext = _react.default.createContext(null);\nif (true) {\n RouterContext.displayName = \"RouterContext\";\n} //# sourceMappingURL=router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQUdhQTs7O2VBQUFBOzs7OzRFQUhLO0FBR1gsTUFBTUEsZ0JBQWdCQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBb0I7QUFFcEUsSUFBSUMsSUFBeUIsRUFBYztJQUN6Q0gsY0FBY0ksV0FBVyxHQUFHO0FBQzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS50cz82MzZjIl0sIm5hbWVzIjpbIlJvdXRlckNvbnRleHQiLCJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js": -/*!**********************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/format-url.js ***! - \**********************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n formatUrl: function() {\n return formatUrl;\n },\n formatWithValidation: function() {\n return formatWithValidation;\n },\n urlObjectKeys: function() {\n return urlObjectKeys;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./querystring */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\"));\nconst slashedProtocols = /https?|ftp|gopher|file/;\nfunction formatUrl(urlObj) {\n let { auth, hostname } = urlObj;\n let protocol = urlObj.protocol || \"\";\n let pathname = urlObj.pathname || \"\";\n let hash = urlObj.hash || \"\";\n let query = urlObj.query || \"\";\n let host = false;\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, \":\") + \"@\" : \"\";\n if (urlObj.host) {\n host = auth + urlObj.host;\n } else if (hostname) {\n host = auth + (~hostname.indexOf(\":\") ? \"[\" + hostname + \"]\" : hostname);\n if (urlObj.port) {\n host += \":\" + urlObj.port;\n }\n }\n if (query && typeof query === \"object\") {\n query = String(_querystring.urlQueryToSearchParams(query));\n }\n let search = urlObj.search || query && \"?\" + query || \"\";\n if (protocol && !protocol.endsWith(\":\")) protocol += \":\";\n if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {\n host = \"//\" + (host || \"\");\n if (pathname && pathname[0] !== \"/\") pathname = \"/\" + pathname;\n } else if (!host) {\n host = \"\";\n }\n if (hash && hash[0] !== \"#\") hash = \"#\" + hash;\n if (search && search[0] !== \"?\") search = \"?\" + search;\n pathname = pathname.replace(/[?#]/g, encodeURIComponent);\n search = search.replace(\"#\", \"%23\");\n return \"\" + protocol + host + pathname + search + hash;\n}\nconst urlObjectKeys = [\n \"auth\",\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"slashes\"\n];\nfunction formatWithValidation(url) {\n if (true) {\n if (url !== null && typeof url === \"object\") {\n Object.keys(url).forEach((key)=>{\n if (!urlObjectKeys.includes(key)) {\n console.warn(\"Unknown key passed via urlObject into url.format: \" + key);\n }\n });\n }\n }\n return formatUrl(url);\n} //# sourceMappingURL=format-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybC5qcyIsIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUM7QUFDdkMsc0RBQXNEO0FBQ3RELEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLHNFQUFzRTtBQUN0RSxzRUFBc0U7QUFDdEUsNEVBQTRFO0FBQzVFLHFFQUFxRTtBQUNyRSx3QkFBd0I7QUFDeEIsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSw2REFBNkQ7QUFDN0QsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLHlDQUF5Qzs7Ozs7Ozs7Ozs7OztJQVF6QkEsV0FBUztlQUFUQTs7SUE2REFDLHNCQUFvQjtlQUFwQkE7O0lBZkhDLGVBQWE7ZUFBYkE7Ozs7bUZBbERnQjtBQUU3QixNQUFNQyxtQkFBbUI7QUFFbEIsU0FBU0gsVUFBVUksTUFBaUI7SUFDekMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRSxHQUFHRjtJQUN6QixJQUFJRyxXQUFXSCxPQUFPRyxRQUFRLElBQUk7SUFDbEMsSUFBSUMsV0FBV0osT0FBT0ksUUFBUSxJQUFJO0lBQ2xDLElBQUlDLE9BQU9MLE9BQU9LLElBQUksSUFBSTtJQUMxQixJQUFJQyxRQUFRTixPQUFPTSxLQUFLLElBQUk7SUFDNUIsSUFBSUMsT0FBdUI7SUFFM0JOLE9BQU9BLE9BQU9PLG1CQUFtQlAsTUFBTVEsT0FBTyxDQUFDLFFBQVEsT0FBTyxNQUFNO0lBRXBFLElBQUlULE9BQU9PLElBQUksRUFBRTtRQUNmQSxPQUFPTixPQUFPRCxPQUFPTyxJQUFJO0lBQzNCLE9BQU8sSUFBSUwsVUFBVTtRQUNuQkssT0FBT04sT0FBUSxFQUFDQyxTQUFTUSxPQUFPLENBQUMsT0FBTyxNQUFJUixXQUFTLE1BQUtBLFFBQUFBO1FBQzFELElBQUlGLE9BQU9XLElBQUksRUFBRTtZQUNmSixRQUFRLE1BQU1QLE9BQU9XLElBQUk7UUFDM0I7SUFDRjtJQUVBLElBQUlMLFNBQVMsT0FBT0EsVUFBVSxVQUFVO1FBQ3RDQSxRQUFRTSxPQUFPQyxhQUFZQyxzQkFBc0IsQ0FBQ1I7SUFDcEQ7SUFFQSxJQUFJUyxTQUFTZixPQUFPZSxNQUFNLElBQUtULFNBQVMsTUFBSUEsU0FBWTtJQUV4RCxJQUFJSCxZQUFZLENBQUNBLFNBQVNhLFFBQVEsQ0FBQyxNQUFNYixZQUFZO0lBRXJELElBQ0VILE9BQU9pQixPQUFPLElBQ2IsQ0FBQyxDQUFDZCxZQUFZSixpQkFBaUJtQixJQUFJLENBQUNmLFNBQUFBLEtBQWNJLFNBQVMsT0FDNUQ7UUFDQUEsT0FBTyxPQUFRQSxDQUFBQSxRQUFRO1FBQ3ZCLElBQUlILFlBQVlBLFFBQVEsQ0FBQyxFQUFFLEtBQUssS0FBS0EsV0FBVyxNQUFNQTtJQUN4RCxPQUFPLElBQUksQ0FBQ0csTUFBTTtRQUNoQkEsT0FBTztJQUNUO0lBRUEsSUFBSUYsUUFBUUEsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLQSxPQUFPLE1BQU1BO0lBQzFDLElBQUlVLFVBQVVBLE1BQU0sQ0FBQyxFQUFFLEtBQUssS0FBS0EsU0FBUyxNQUFNQTtJQUVoRFgsV0FBV0EsU0FBU0ssT0FBTyxDQUFDLFNBQVNEO0lBQ3JDTyxTQUFTQSxPQUFPTixPQUFPLENBQUMsS0FBSztJQUU3QixPQUFPLEtBQUdOLFdBQVdJLE9BQU9ILFdBQVdXLFNBQVNWO0FBQ2xEO0FBRU8sTUFBTVAsZ0JBQWdCO0lBQzNCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRU0sU0FBU0QscUJBQXFCc0IsR0FBYztJQUNqRCxJQUFJQyxJQUF5QixFQUFlO1FBQzFDLElBQUlELFFBQVEsUUFBUSxPQUFPQSxRQUFRLFVBQVU7WUFDM0NFLE9BQU9DLElBQUksQ0FBQ0gsS0FBS0ksT0FBTyxDQUFDLENBQUNDO2dCQUN4QixJQUFJLENBQUMxQixjQUFjMkIsUUFBUSxDQUFDRCxNQUFNO29CQUNoQ0UsUUFBUUMsSUFBSSxDQUNWLHVEQUFxREg7Z0JBRXpEO1lBQ0Y7UUFDRjtJQUNGO0lBRUEsT0FBTzVCLFVBQVV1QjtBQUNuQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwudHM/NTJiMSJdLCJuYW1lcyI6WyJmb3JtYXRVcmwiLCJmb3JtYXRXaXRoVmFsaWRhdGlvbiIsInVybE9iamVjdEtleXMiLCJzbGFzaGVkUHJvdG9jb2xzIiwidXJsT2JqIiwiYXV0aCIsImhvc3RuYW1lIiwicHJvdG9jb2wiLCJwYXRobmFtZSIsImhhc2giLCJxdWVyeSIsImhvc3QiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwiaW5kZXhPZiIsInBvcnQiLCJTdHJpbmciLCJxdWVyeXN0cmluZyIsInVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMiLCJzZWFyY2giLCJlbmRzV2l0aCIsInNsYXNoZXMiLCJ0ZXN0IiwidXJsIiwicHJvY2VzcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiaW5jbHVkZXMiLCJjb25zb2xlIiwid2FybiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js": -/*!*****************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/index.js ***! - \*****************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getSortedRoutes: function() {\n return _sortedroutes.getSortedRoutes;\n },\n isDynamicRoute: function() {\n return _isdynamic.isDynamicRoute;\n }\n});\nconst _sortedroutes = __webpack_require__(/*! ./sorted-routes */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\");\nconst _isdynamic = __webpack_require__(/*! ./is-dynamic */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\"); //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQVNBLGlCQUFlO2VBQWZBLGNBQUFBLGVBQWU7O0lBQ2ZDLGdCQUFjO2VBQWRBLFdBQUFBLGNBQWM7OzswQ0FEUzt1Q0FDRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2luZGV4LnRzPzkxMmIiXSwibmFtZXMiOlsiZ2V0U29ydGVkUm91dGVzIiwiaXNEeW5hbWljUm91dGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js": -/*!**************************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js ***! - \**************************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"interpolateAs\", ({\n enumerable: true,\n get: function() {\n return interpolateAs;\n }\n}));\nconst _routematcher = __webpack_require__(/*! ./route-matcher */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./route-regex */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction interpolateAs(route, asPathname, query) {\n let interpolatedRoute = \"\";\n const dynamicRegex = (0, _routeregex.getRouteRegex)(route);\n const dynamicGroups = dynamicRegex.groups;\n const dynamicMatches = (asPathname !== route ? (0, _routematcher.getRouteMatcher)(dynamicRegex)(asPathname) : \"\") || // Fall back to reading the values from the href\n // TODO: should this take priority; also need to change in the router.\n query;\n interpolatedRoute = route;\n const params = Object.keys(dynamicGroups);\n if (!params.every((param)=>{\n let value = dynamicMatches[param] || \"\";\n const { repeat, optional } = dynamicGroups[param];\n // support single-level catch-all\n // TODO: more robust handling for user-error (passing `/`)\n let replaced = \"[\" + (repeat ? \"...\" : \"\") + param + \"]\";\n if (optional) {\n replaced = (!value ? \"/\" : \"\") + \"[\" + replaced + \"]\";\n }\n if (repeat && !Array.isArray(value)) value = [\n value\n ];\n return (optional || param in dynamicMatches) && // Interpolate group into data URL if present\n (interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map(// path delimiter escaped since they are being inserted\n // into the URL and we expect URL encoded segments\n // when parsing dynamic route params\n (segment)=>encodeURIComponent(segment)).join(\"/\") : encodeURIComponent(value)) || \"/\");\n })) {\n interpolatedRoute = \"\" // did not satisfy all requirements\n ;\n // n.b. We ignore this error because we handle warning for this case in\n // development in the `` component directly.\n }\n return {\n params,\n result: interpolatedRoute\n };\n} //# sourceMappingURL=interpolate-as.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJwb2xhdGUtYXMuanMiLCJtYXBwaW5ncyI6Ijs7OztpREFLZ0JBOzs7ZUFBQUE7OzswQ0FIZ0I7d0NBQ0Y7QUFFdkIsU0FBU0EsY0FDZEMsS0FBYSxFQUNiQyxVQUFrQixFQUNsQkMsS0FBcUI7SUFFckIsSUFBSUMsb0JBQW9CO0lBRXhCLE1BQU1DLGVBQWVDLENBQUFBLEdBQUFBLFlBQUFBLGFBQWEsRUFBQ0w7SUFDbkMsTUFBTU0sZ0JBQWdCRixhQUFhRyxNQUFNO0lBQ3pDLE1BQU1DLGlCQUVIUCxDQUFBQSxlQUFlRCxRQUFRUyxDQUFBQSxHQUFBQSxjQUFBQSxlQUFlLEVBQUNMLGNBQWNILGNBQWMsT0FDcEUsZ0RBQWdEO0lBQ2hELHNFQUFzRTtJQUN0RUM7SUFFRkMsb0JBQW9CSDtJQUNwQixNQUFNVSxTQUFTQyxPQUFPQyxJQUFJLENBQUNOO0lBRTNCLElBQ0UsQ0FBQ0ksT0FBT0csS0FBSyxDQUFDLENBQUNDO1FBQ2IsSUFBSUMsUUFBUVAsY0FBYyxDQUFDTSxNQUFNLElBQUk7UUFDckMsTUFBTSxFQUFFRSxNQUFNLEVBQUVDLFFBQVEsRUFBRSxHQUFHWCxhQUFhLENBQUNRLE1BQU07UUFFakQsaUNBQWlDO1FBQ2pDLDBEQUEwRDtRQUMxRCxJQUFJSSxXQUFXLE1BQUlGLENBQUFBLFNBQVMsUUFBUSxNQUFLRixRQUFNO1FBQy9DLElBQUlHLFVBQVU7WUFDWkMsV0FBVyxDQUFHLENBQUNILFFBQVEsTUFBTSxNQUFHLE1BQUdHLFdBQVM7UUFDOUM7UUFDQSxJQUFJRixVQUFVLENBQUNHLE1BQU1DLE9BQU8sQ0FBQ0wsUUFBUUEsUUFBUTtZQUFDQTtTQUFNO1FBRXBELE9BQ0UsQ0FBQ0UsWUFBWUgsU0FBU04sY0FBQUEsS0FDdEIsNkNBQTZDO1FBQzVDTCxDQUFBQSxvQkFDQ0Esa0JBQW1Ca0IsT0FBTyxDQUN4QkgsVUFDQUYsU0FDSUQsTUFDR08sR0FBRyxDQUVGLHVEQUF1RDtRQUN2RCxrREFBa0Q7UUFDbEQsb0NBQW9DO1FBQ3BDLENBQUNDLFVBQVlDLG1CQUFtQkQsVUFFakNFLElBQUksQ0FBQyxPQUNSRCxtQkFBbUJULFdBQ3BCO0lBRVgsSUFDQTtRQUNBWixvQkFBb0IsR0FBRyxtQ0FBbUM7O0lBRTFELHVFQUF1RTtJQUN2RSxrREFBa0Q7SUFDcEQ7SUFDQSxPQUFPO1FBQ0xPO1FBQ0FnQixRQUFRdkI7SUFDVjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJwb2xhdGUtYXMudHM/ODUyZCJdLCJuYW1lcyI6WyJpbnRlcnBvbGF0ZUFzIiwicm91dGUiLCJhc1BhdGhuYW1lIiwicXVlcnkiLCJpbnRlcnBvbGF0ZWRSb3V0ZSIsImR5bmFtaWNSZWdleCIsImdldFJvdXRlUmVnZXgiLCJkeW5hbWljR3JvdXBzIiwiZ3JvdXBzIiwiZHluYW1pY01hdGNoZXMiLCJnZXRSb3V0ZU1hdGNoZXIiLCJwYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwiZXZlcnkiLCJwYXJhbSIsInZhbHVlIiwicmVwZWF0Iiwib3B0aW9uYWwiLCJyZXBsYWNlZCIsIkFycmF5IiwiaXNBcnJheSIsInJlcGxhY2UiLCJtYXAiLCJzZWdtZW50IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsInJlc3VsdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js": -/*!**********************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js ***! - \**********************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isDynamicRoute\", ({\n enumerable: true,\n get: function() {\n return isDynamicRoute;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"(app-pages-browser)/./node_modules/next/dist/server/future/helpers/interception-routes.js\");\n// Identify /[param]/ in route string\nconst TEST_ROUTE = /\\/\\[[^/]+?\\](?=\\/|$)/;\nfunction isDynamicRoute(route) {\n if ((0, _interceptionroutes.isInterceptionRouteAppPath)(route)) {\n route = (0, _interceptionroutes.extractInterceptionRouteInformation)(route).interceptedRoute;\n }\n return TEST_ROUTE.test(route);\n} //# sourceMappingURL=is-dynamic.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy5qcyIsIm1hcHBpbmdzIjoiOzs7O2tEQVFnQkE7OztlQUFBQTs7O2dEQUxUO0FBRVAscUNBQXFDO0FBQ3JDLE1BQU1DLGFBQWE7QUFFWixTQUFTRCxlQUFlRSxLQUFhO0lBQzFDLElBQUlDLENBQUFBLEdBQUFBLG9CQUFBQSwwQkFBMEIsRUFBQ0QsUUFBUTtRQUNyQ0EsUUFBUUUsQ0FBQUEsR0FBQUEsb0JBQUFBLG1DQUFtQyxFQUFDRixPQUFPRyxnQkFBZ0I7SUFDckU7SUFFQSxPQUFPSixXQUFXSyxJQUFJLENBQUNKO0FBQ3pCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy50cz8xNDY1Il0sIm5hbWVzIjpbImlzRHluYW1pY1JvdXRlIiwiVEVTVF9ST1VURSIsInJvdXRlIiwiaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgiLCJleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbiIsImludGVyY2VwdGVkUm91dGUiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js": -/*!************************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/is-local-url.js ***! - \************************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isLocalURL\", ({\n enumerable: true,\n get: function() {\n return isLocalURL;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../../client/has-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\");\nfunction isLocalURL(url) {\n // prevent a hydration mismatch on href for url with anchor refs\n if (!(0, _utils.isAbsoluteUrl)(url)) return true;\n try {\n // absolute urls can be local if they are on the same origin\n const locationOrigin = (0, _utils.getLocationOrigin)();\n const resolved = new URL(url, locationOrigin);\n return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);\n } catch (_) {\n return false;\n }\n} //# sourceMappingURL=is-local-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsLmpzIiwibWFwcGluZ3MiOiI7Ozs7OENBTWdCQTs7O2VBQUFBOzs7bUNBTmlDO3lDQUNyQjtBQUtyQixTQUFTQSxXQUFXQyxHQUFXO0lBQ3BDLGdFQUFnRTtJQUNoRSxJQUFJLENBQUNDLENBQUFBLEdBQUFBLE9BQUFBLGFBQWEsRUFBQ0QsTUFBTSxPQUFPO0lBQ2hDLElBQUk7UUFDRiw0REFBNEQ7UUFDNUQsTUFBTUUsaUJBQWlCQyxDQUFBQSxHQUFBQSxPQUFBQSxpQkFBaUI7UUFDeEMsTUFBTUMsV0FBVyxJQUFJQyxJQUFJTCxLQUFLRTtRQUM5QixPQUFPRSxTQUFTRSxNQUFNLEtBQUtKLGtCQUFrQkssQ0FBQUEsR0FBQUEsYUFBQUEsV0FBVyxFQUFDSCxTQUFTSSxRQUFRO0lBQzVFLEVBQUUsT0FBT0MsR0FBRztRQUNWLE9BQU87SUFDVDtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsLnRzP2UxYzIiXSwibmFtZXMiOlsiaXNMb2NhbFVSTCIsInVybCIsImlzQWJzb2x1dGVVcmwiLCJsb2NhdGlvbk9yaWdpbiIsImdldExvY2F0aW9uT3JpZ2luIiwicmVzb2x2ZWQiLCJVUkwiLCJvcmlnaW4iLCJoYXNCYXNlUGF0aCIsInBhdGhuYW1lIiwiXyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js": -/*!****************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/omit.js ***! - \****************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"omit\", ({\n enumerable: true,\n get: function() {\n return omit;\n }\n}));\nfunction omit(object, keys) {\n const omitted = {};\n Object.keys(object).forEach((key)=>{\n if (!keys.includes(key)) {\n omitted[key] = object[key];\n }\n });\n return omitted;\n} //# sourceMappingURL=omit.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvb21pdC5qcyIsIm1hcHBpbmdzIjoiOzs7O3dDQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsS0FDZEMsTUFBUyxFQUNUQyxJQUFTO0lBRVQsTUFBTUMsVUFBc0MsQ0FBQztJQUM3Q0MsT0FBT0YsSUFBSSxDQUFDRCxRQUFRSSxPQUFPLENBQUMsQ0FBQ0M7UUFDM0IsSUFBSSxDQUFDSixLQUFLSyxRQUFRLENBQUNELE1BQVc7WUFDNUJILE9BQU8sQ0FBQ0csSUFBSSxHQUFHTCxNQUFNLENBQUNLLElBQUk7UUFDNUI7SUFDRjtJQUNBLE9BQU9IO0FBQ1QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9vbWl0LnRzP2Y3ZWEiXSwibmFtZXMiOlsib21pdCIsIm9iamVjdCIsImtleXMiLCJvbWl0dGVkIiwiT2JqZWN0IiwiZm9yRWFjaCIsImtleSIsImluY2x1ZGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js": -/*!***********************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/querystring.js ***! - \***********************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n assign: function() {\n return assign;\n },\n searchParamsToUrlQuery: function() {\n return searchParamsToUrlQuery;\n },\n urlQueryToSearchParams: function() {\n return urlQueryToSearchParams;\n }\n});\nfunction searchParamsToUrlQuery(searchParams) {\n const query = {};\n searchParams.forEach((value, key)=>{\n if (typeof query[key] === \"undefined\") {\n query[key] = value;\n } else if (Array.isArray(query[key])) {\n query[key].push(value);\n } else {\n query[key] = [\n query[key],\n value\n ];\n }\n });\n return query;\n}\nfunction stringifyUrlQueryParam(param) {\n if (typeof param === \"string\" || typeof param === \"number\" && !isNaN(param) || typeof param === \"boolean\") {\n return String(param);\n } else {\n return \"\";\n }\n}\nfunction urlQueryToSearchParams(urlQuery) {\n const result = new URLSearchParams();\n Object.entries(urlQuery).forEach((param)=>{\n let [key, value] = param;\n if (Array.isArray(value)) {\n value.forEach((item)=>result.append(key, stringifyUrlQueryParam(item)));\n } else {\n result.set(key, stringifyUrlQueryParam(value));\n }\n });\n return result;\n}\nfunction assign(target) {\n for(var _len = arguments.length, searchParamsList = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n searchParamsList[_key - 1] = arguments[_key];\n }\n searchParamsList.forEach((searchParams)=>{\n Array.from(searchParams.keys()).forEach((key)=>target.delete(key));\n searchParams.forEach((value, key)=>target.append(key, value));\n });\n return target;\n} //# sourceMappingURL=querystring.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBNENnQkEsUUFBTTtlQUFOQTs7SUExQ0FDLHdCQUFzQjtlQUF0QkE7O0lBNEJBQyx3QkFBc0I7ZUFBdEJBOzs7QUE1QlQsU0FBU0QsdUJBQ2RFLFlBQTZCO0lBRTdCLE1BQU1DLFFBQXdCLENBQUM7SUFDL0JELGFBQWFFLE9BQU8sQ0FBQyxDQUFDQyxPQUFPQztRQUMzQixJQUFJLE9BQU9ILEtBQUssQ0FBQ0csSUFBSSxLQUFLLGFBQWE7WUFDckNILEtBQUssQ0FBQ0csSUFBSSxHQUFHRDtRQUNmLE9BQU8sSUFBSUUsTUFBTUMsT0FBTyxDQUFDTCxLQUFLLENBQUNHLElBQUksR0FBRztZQUNsQ0gsS0FBSyxDQUFDRyxJQUFJLENBQWNHLElBQUksQ0FBQ0o7UUFDakMsT0FBTztZQUNMRixLQUFLLENBQUNHLElBQUksR0FBRztnQkFBQ0gsS0FBSyxDQUFDRyxJQUFJO2dCQUFZRDthQUFNO1FBQzVDO0lBQ0Y7SUFDQSxPQUFPRjtBQUNUO0FBRUEsU0FBU08sdUJBQXVCQyxLQUFjO0lBQzVDLElBQ0UsT0FBT0EsVUFBVSxZQUNoQixPQUFPQSxVQUFVLFlBQVksQ0FBQ0MsTUFBTUQsVUFDckMsT0FBT0EsVUFBVSxXQUNqQjtRQUNBLE9BQU9FLE9BQU9GO0lBQ2hCLE9BQU87UUFDTCxPQUFPO0lBQ1Q7QUFDRjtBQUVPLFNBQVNWLHVCQUNkYSxRQUF3QjtJQUV4QixNQUFNQyxTQUFTLElBQUlDO0lBQ25CQyxPQUFPQyxPQUFPLENBQUNKLFVBQVVWLE9BQU8sQ0FBQyxDQUFBTztZQUFDLENBQUNMLEtBQUtELE1BQU0sR0FBQU07UUFDNUMsSUFBSUosTUFBTUMsT0FBTyxDQUFDSCxRQUFRO1lBQ3hCQSxNQUFNRCxPQUFPLENBQUMsQ0FBQ2UsT0FBU0osT0FBT0ssTUFBTSxDQUFDZCxLQUFLSSx1QkFBdUJTO1FBQ3BFLE9BQU87WUFDTEosT0FBT00sR0FBRyxDQUFDZixLQUFLSSx1QkFBdUJMO1FBQ3pDO0lBQ0Y7SUFDQSxPQUFPVTtBQUNUO0FBRU8sU0FBU2hCLE9BQ2R1QixNQUF1QjtJQUN2QixRQUFBQyxPQUFBQyxVQUFBQyxNQUFBLEVBQUFDLG1CQUFBLElBQUFuQixNQUFBZ0IsT0FBQSxJQUFBQSxPQUFBLFFBQUFJLE9BQUEsR0FBQUEsT0FBQUosTUFBQUksT0FBQTtRQUFHRCxnQkFBQUEsQ0FBSEMsT0FBQSxLQUFBSCxTQUFBLENBQUFHLEtBQXNDOztJQUV0Q0QsaUJBQWlCdEIsT0FBTyxDQUFDLENBQUNGO1FBQ3hCSyxNQUFNcUIsSUFBSSxDQUFDMUIsYUFBYTJCLElBQUksSUFBSXpCLE9BQU8sQ0FBQyxDQUFDRSxNQUFRZ0IsT0FBT1EsTUFBTSxDQUFDeEI7UUFDL0RKLGFBQWFFLE9BQU8sQ0FBQyxDQUFDQyxPQUFPQyxNQUFRZ0IsT0FBT0YsTUFBTSxDQUFDZCxLQUFLRDtJQUMxRDtJQUNBLE9BQU9pQjtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcudHM/NTIxNSJdLCJuYW1lcyI6WyJhc3NpZ24iLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInNlYXJjaFBhcmFtcyIsInF1ZXJ5IiwiZm9yRWFjaCIsInZhbHVlIiwia2V5IiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsInN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0iLCJwYXJhbSIsImlzTmFOIiwiU3RyaW5nIiwidXJsUXVlcnkiLCJyZXN1bHQiLCJVUkxTZWFyY2hQYXJhbXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiaXRlbSIsImFwcGVuZCIsInNldCIsInRhcmdldCIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzZWFyY2hQYXJhbXNMaXN0IiwiX2tleSIsImZyb20iLCJrZXlzIiwiZGVsZXRlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js": -/*!*************************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/route-matcher.js ***! - \*************************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getRouteMatcher\", ({\n enumerable: true,\n get: function() {\n return getRouteMatcher;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nfunction getRouteMatcher(param) {\n let { re, groups } = param;\n return (pathname)=>{\n const routeMatch = re.exec(pathname);\n if (!routeMatch) {\n return false;\n }\n const decode = (param)=>{\n try {\n return decodeURIComponent(param);\n } catch (_) {\n throw new _utils.DecodeError(\"failed to decode param\");\n }\n };\n const params = {};\n Object.keys(groups).forEach((slugName)=>{\n const g = groups[slugName];\n const m = routeMatch[g.pos];\n if (m !== undefined) {\n params[slugName] = ~m.indexOf(\"/\") ? m.split(\"/\").map((entry)=>decode(entry)) : g.repeat ? [\n decode(m)\n ] : decode(m);\n }\n });\n return params;\n };\n} //# sourceMappingURL=route-matcher.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2hlci5qcyIsIm1hcHBpbmdzIjoiOzs7O21EQVdnQkE7OztlQUFBQTs7O21DQVZZO0FBVXJCLFNBQVNBLGdCQUFnQkMsS0FBMEI7SUFBMUIsTUFBRUMsRUFBRSxFQUFFQyxNQUFNLEVBQWMsR0FBMUJGO0lBQzlCLE9BQU8sQ0FBQ0c7UUFDTixNQUFNQyxhQUFhSCxHQUFHSSxJQUFJLENBQUNGO1FBQzNCLElBQUksQ0FBQ0MsWUFBWTtZQUNmLE9BQU87UUFDVDtRQUVBLE1BQU1FLFNBQVMsQ0FBQ047WUFDZCxJQUFJO2dCQUNGLE9BQU9PLG1CQUFtQlA7WUFDNUIsRUFBRSxPQUFPUSxHQUFHO2dCQUNWLE1BQU0sSUFBSUMsT0FBQUEsV0FBVyxDQUFDO1lBQ3hCO1FBQ0Y7UUFDQSxNQUFNQyxTQUFxRCxDQUFDO1FBRTVEQyxPQUFPQyxJQUFJLENBQUNWLFFBQVFXLE9BQU8sQ0FBQyxDQUFDQztZQUMzQixNQUFNQyxJQUFJYixNQUFNLENBQUNZLFNBQVM7WUFDMUIsTUFBTUUsSUFBSVosVUFBVSxDQUFDVyxFQUFFRSxHQUFHLENBQUM7WUFDM0IsSUFBSUQsTUFBTUUsV0FBVztnQkFDbkJSLE1BQU0sQ0FBQ0ksU0FBUyxHQUFHLENBQUNFLEVBQUVHLE9BQU8sQ0FBQyxPQUMxQkgsRUFBRUksS0FBSyxDQUFDLEtBQUtDLEdBQUcsQ0FBQyxDQUFDQyxRQUFVaEIsT0FBT2dCLFVBQ25DUCxFQUFFUSxNQUFNLEdBQ1I7b0JBQUNqQixPQUFPVTtpQkFBRyxHQUNYVixPQUFPVTtZQUNiO1FBQ0Y7UUFDQSxPQUFPTjtJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1tYXRjaGVyLnRzP2JlZmYiXSwibmFtZXMiOlsiZ2V0Um91dGVNYXRjaGVyIiwicGFyYW0iLCJyZSIsImdyb3VwcyIsInBhdGhuYW1lIiwicm91dGVNYXRjaCIsImV4ZWMiLCJkZWNvZGUiLCJkZWNvZGVVUklDb21wb25lbnQiLCJfIiwiRGVjb2RlRXJyb3IiLCJwYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInNsdWdOYW1lIiwiZyIsIm0iLCJwb3MiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwic3BsaXQiLCJtYXAiLCJlbnRyeSIsInJlcGVhdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js": -/*!***********************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/route-regex.js ***! - \***********************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getNamedMiddlewareRegex: function() {\n return getNamedMiddlewareRegex;\n },\n getNamedRouteRegex: function() {\n return getNamedRouteRegex;\n },\n getRouteRegex: function() {\n return getRouteRegex;\n }\n});\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"(app-pages-browser)/./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst NEXT_QUERY_PARAM_PREFIX = \"nxtP\";\nconst NEXT_INTERCEPTION_MARKER_PREFIX = \"nxtI\";\n/**\n * Parses a given parameter from a route to a data structure that can be used\n * to generate the parametrized route. Examples:\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n */ function parseParameter(param) {\n const optional = param.startsWith(\"[\") && param.endsWith(\"]\");\n if (optional) {\n param = param.slice(1, -1);\n }\n const repeat = param.startsWith(\"...\");\n if (repeat) {\n param = param.slice(3);\n }\n return {\n key: param,\n repeat,\n optional\n };\n}\nfunction getParametrizedRoute(route) {\n const segments = (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split(\"/\");\n const groups = {};\n let groupIndex = 1;\n return {\n parameterizedRoute: segments.map((segment)=>{\n const markerMatch = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n const paramMatches = segment.match(/\\[((?:\\[.*\\])|.+)\\]/) // Check for parameters\n ;\n if (markerMatch && paramMatches) {\n const { key, optional, repeat } = parseParameter(paramMatches[1]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(markerMatch) + \"([^/]+?)\";\n } else if (paramMatches) {\n const { key, repeat, optional } = parseParameter(paramMatches[1]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n return repeat ? optional ? \"(?:/(.+?))?\" : \"/(.+?)\" : \"/([^/]+?)\";\n } else {\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(segment);\n }\n }).join(\"\"),\n groups\n };\n}\nfunction getRouteRegex(normalizedRoute) {\n const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute);\n return {\n re: new RegExp(\"^\" + parameterizedRoute + \"(?:/)?$\"),\n groups: groups\n };\n}\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */ function buildGetSafeRouteKey() {\n let i = 0;\n return ()=>{\n let routeKey = \"\";\n let j = ++i;\n while(j > 0){\n routeKey += String.fromCharCode(97 + (j - 1) % 26);\n j = Math.floor((j - 1) / 26);\n }\n return routeKey;\n };\n}\nfunction getSafeKeyFromSegment(param) {\n let { interceptionMarker, getSafeRouteKey, segment, routeKeys, keyPrefix } = param;\n const { key, optional, repeat } = parseParameter(segment);\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, \"\");\n if (keyPrefix) {\n cleanedKey = \"\" + keyPrefix + cleanedKey;\n }\n let invalidKey = false;\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true;\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true;\n }\n if (invalidKey) {\n cleanedKey = getSafeRouteKey();\n }\n if (keyPrefix) {\n routeKeys[cleanedKey] = \"\" + keyPrefix + key;\n } else {\n routeKeys[cleanedKey] = key;\n }\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker ? (0, _escaperegexp.escapeStringRegexp)(interceptionMarker) : \"\";\n return repeat ? optional ? \"(?:/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">.+?))?\" : \"/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">.+?)\" : \"/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">[^/]+?)\";\n}\nfunction getNamedParametrizedRoute(route, prefixRouteKeys) {\n const segments = (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split(\"/\");\n const getSafeRouteKey = buildGetSafeRouteKey();\n const routeKeys = {};\n return {\n namedParameterizedRoute: segments.map((segment)=>{\n const hasInterceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m));\n const paramMatches = segment.match(/\\[((?:\\[.*\\])|.+)\\]/) // Check for parameters\n ;\n if (hasInterceptionMarker && paramMatches) {\n const [usedMarker] = segment.split(paramMatches[0]);\n return getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: usedMarker,\n segment: paramMatches[1],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n });\n } else if (paramMatches) {\n return getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[1],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined\n });\n } else {\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(segment);\n }\n }).join(\"\"),\n routeKeys\n };\n}\nfunction getNamedRouteRegex(normalizedRoute, prefixRouteKey) {\n const result = getNamedParametrizedRoute(normalizedRoute, prefixRouteKey);\n return {\n ...getRouteRegex(normalizedRoute),\n namedRegex: \"^\" + result.namedParameterizedRoute + \"(?:/)?$\",\n routeKeys: result.routeKeys\n };\n}\nfunction getNamedMiddlewareRegex(normalizedRoute, options) {\n const { parameterizedRoute } = getParametrizedRoute(normalizedRoute);\n const { catchAll = true } = options;\n if (parameterizedRoute === \"/\") {\n let catchAllRegex = catchAll ? \".*\" : \"\";\n return {\n namedRegex: \"^/\" + catchAllRegex + \"$\"\n };\n }\n const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false);\n let catchAllGroupedRegex = catchAll ? \"(?:(/.*)?)\" : \"\";\n return {\n namedRegex: \"^\" + namedParameterizedRoute + catchAllGroupedRegex + \"$\"\n };\n} //# sourceMappingURL=route-regex.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtcmVnZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBMk5nQkEseUJBQXVCO2VBQXZCQTs7SUFoQkFDLG9CQUFrQjtlQUFsQkE7O0lBbklBQyxlQUFhO2VBQWJBOzs7Z0RBeEUyQjswQ0FDUjtpREFDQztBQUVwQyxNQUFNQywwQkFBMEI7QUFDaEMsTUFBTUMsa0NBQWtDO0FBYXhDOzs7Ozs7O0NBT0MsR0FDRCxTQUFTQyxlQUFlQyxLQUFhO0lBQ25DLE1BQU1DLFdBQVdELE1BQU1FLFVBQVUsQ0FBQyxRQUFRRixNQUFNRyxRQUFRLENBQUM7SUFDekQsSUFBSUYsVUFBVTtRQUNaRCxRQUFRQSxNQUFNSSxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzFCO0lBQ0EsTUFBTUMsU0FBU0wsTUFBTUUsVUFBVSxDQUFDO0lBQ2hDLElBQUlHLFFBQVE7UUFDVkwsUUFBUUEsTUFBTUksS0FBSyxDQUFDO0lBQ3RCO0lBQ0EsT0FBTztRQUFFRSxLQUFLTjtRQUFPSztRQUFRSjtJQUFTO0FBQ3hDO0FBRUEsU0FBU00scUJBQXFCQyxLQUFhO0lBQ3pDLE1BQU1DLFdBQVdDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ0YsT0FBT0osS0FBSyxDQUFDLEdBQUdPLEtBQUssQ0FBQztJQUMzRCxNQUFNQyxTQUF5QyxDQUFDO0lBQ2hELElBQUlDLGFBQWE7SUFDakIsT0FBTztRQUNMQyxvQkFBb0JMLFNBQ2pCTSxHQUFHLENBQUMsQ0FBQ0M7WUFDSixNQUFNQyxjQUFjQyxvQkFBQUEsMEJBQTBCLENBQUNDLElBQUksQ0FBQyxDQUFDQyxJQUNuREosUUFBUWQsVUFBVSxDQUFDa0I7WUFFckIsTUFBTUMsZUFBZUwsUUFBUU0sS0FBSyxDQUFDLHVCQUF1Qix1QkFBdUI7O1lBRWpGLElBQUlMLGVBQWVJLGNBQWM7Z0JBQy9CLE1BQU0sRUFBRWYs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TSxFQUFFN0Msa0JBQWtCLEVBQUUsR0FBR1AscUJBQXFCbUI7SUFDcEQsTUFBTSxFQUFFa0MsV0FBVyxJQUFJLEVBQUUsR0FBR0Q7SUFDNUIsSUFBSTdDLHVCQUF1QixLQUFLO1FBQzlCLElBQUkrQyxnQkFBZ0JELFdBQVcsT0FBTztRQUN0QyxPQUFPO1lBQ0xGLFlBQVksT0FBS0csZ0JBQWM7UUFDakM7SUFDRjtJQUVBLE1BQU0sRUFBRVYsdUJBQXVCLEVBQUUsR0FBR0YsMEJBQ2xDdkIsaUJBQ0E7SUFFRixJQUFJb0MsdUJBQXVCRixXQUFXLGVBQWU7SUFDckQsT0FBTztRQUNMRixZQUFZLE1BQUlQLDBCQUEwQlcsdUJBQXFCO0lBQ2pFO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1yZWdleC50cz8yYjM3Il0sIm5hbWVzIjpbImdldE5hbWVkTWlkZGxld2FyZVJlZ2V4IiwiZ2V0TmFtZWRSb3V0ZVJlZ2V4IiwiZ2V0Um91dGVSZWdleCIsIk5FWFRfUVVFUllfUEFSQU1fUFJFRklYIiwiTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWCIsInBhcnNlUGFyYW1ldGVyIiwicGFyYW0iLCJvcHRpb25hbCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNsaWNlIiwicmVwZWF0Iiwia2V5IiwiZ2V0UGFyYW1ldHJpemVkUm91dGUiLCJyb3V0ZSIsInNlZ21lbnRzIiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInNwbGl0IiwiZ3JvdXBzIiwiZ3JvdXBJbmRleCIsInBhcmFtZXRlcml6ZWRSb3V0ZSIsIm1hcCIsInNlZ21lbnQiLCJtYXJrZXJNYXRjaCIsIklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTIiwiZmluZCIsIm0iLCJwYXJhbU1hdGNoZXMiLCJtYXRjaCIsInBvcyIsImVzY2FwZVN0cmluZ1JlZ2V4cCIsImpvaW4iLCJub3JtYWxpemVkUm91dGUiLCJyZSIsIlJlZ0V4cCIsImJ1aWxkR2V0U2FmZVJvdXRlS2V5IiwiaSIsInJvdXRlS2V5IiwiaiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIk1hdGgiLCJmbG9vciIsImdldFNhZmVLZXlGcm9tU2VnbWVudCIsImludGVyY2VwdGlvbk1hcmtlciIsImdldFNhZmVSb3V0ZUtleSIsInJvdXRlS2V5cyIsImtleVByZWZpeCIsImNsZWFuZWRLZXkiLCJyZXBsYWNlIiwiaW52YWxpZEtleSIsImxlbmd0aCIsImlzTmFOIiwicGFyc2VJbnQiLCJpbnRlcmNlcHRpb25QcmVmaXgiLCJnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlIiwicHJlZml4Um91dGVLZXlzIiwibmFtZWRQYXJhbWV0ZXJpemVkUm91dGUiLCJoYXNJbnRlcmNlcHRpb25NYXJrZXIiLCJzb21lIiwidXNlZE1hcmtlciIsInVuZGVmaW5lZCIsInByZWZpeFJvdXRlS2V5IiwicmVzdWx0IiwibmFtZWRSZWdleCIsIm9wdGlvbnMiLCJjYXRjaEFsbCIsImNhdGNoQWxsUmVnZXgiLCJjYXRjaEFsbEdyb3VwZWRSZWdleCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js": -/*!*************************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js ***! - \*************************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSortedRoutes\", ({\n enumerable: true,\n get: function() {\n return getSortedRoutes;\n }\n}));\nclass UrlNode {\n insert(urlPath) {\n this._insert(urlPath.split(\"/\").filter(Boolean), [], false);\n }\n smoosh() {\n return this._smoosh();\n }\n _smoosh(prefix) {\n if (prefix === void 0) prefix = \"/\";\n const childrenPaths = [\n ...this.children.keys()\n ].sort();\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[]\"), 1);\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[...]\"), 1);\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[[...]]\"), 1);\n }\n const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(\"\" + prefix + c + \"/\")).reduce((prev, curr)=>[\n ...prev,\n ...curr\n ], []);\n if (this.slugName !== null) {\n routes.push(...this.children.get(\"[]\")._smoosh(prefix + \"[\" + this.slugName + \"]/\"));\n }\n if (!this.placeholder) {\n const r = prefix === \"/\" ? \"/\" : prefix.slice(0, -1);\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot define a route with the same specificity as a optional catch-all route (\"' + r + '\" and \"' + r + \"[[...\" + this.optionalRestSlugName + ']]\").');\n }\n routes.unshift(r);\n }\n if (this.restSlugName !== null) {\n routes.push(...this.children.get(\"[...]\")._smoosh(prefix + \"[...\" + this.restSlugName + \"]/\"));\n }\n if (this.optionalRestSlugName !== null) {\n routes.push(...this.children.get(\"[[...]]\")._smoosh(prefix + \"[[...\" + this.optionalRestSlugName + \"]]/\"));\n }\n return routes;\n }\n _insert(urlPaths, slugNames, isCatchAll) {\n if (urlPaths.length === 0) {\n this.placeholder = false;\n return;\n }\n if (isCatchAll) {\n throw new Error(\"Catch-all must be the last part of the URL.\");\n }\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0];\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith(\"[\") && nextSegment.endsWith(\"]\")) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1);\n let isOptional = false;\n if (segmentName.startsWith(\"[\") && segmentName.endsWith(\"]\")) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1);\n isOptional = true;\n }\n if (segmentName.startsWith(\"...\")) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3);\n isCatchAll = true;\n }\n if (segmentName.startsWith(\"[\") || segmentName.endsWith(\"]\")) {\n throw new Error(\"Segment names may not start or end with extra brackets ('\" + segmentName + \"').\");\n }\n if (segmentName.startsWith(\".\")) {\n throw new Error(\"Segment names may not start with erroneous periods ('\" + segmentName + \"').\");\n }\n function handleSlug(previousSlug, nextSlug) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw new Error(\"You cannot use different slug names for the same dynamic path ('\" + previousSlug + \"' !== '\" + nextSlug + \"').\");\n }\n }\n slugNames.forEach((slug)=>{\n if (slug === nextSlug) {\n throw new Error('You cannot have the same slug name \"' + nextSlug + '\" repeat within a single dynamic path');\n }\n if (slug.replace(/\\W/g, \"\") === nextSegment.replace(/\\W/g, \"\")) {\n throw new Error('You cannot have the slug names \"' + slug + '\" and \"' + nextSlug + '\" differ only by non-word symbols within a single dynamic path');\n }\n });\n slugNames.push(nextSlug);\n }\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw new Error('You cannot use both an required and optional catch-all route at the same level (\"[...' + this.restSlugName + ']\" and \"' + urlPaths[0] + '\" ).');\n }\n handleSlug(this.optionalRestSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName;\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = \"[[...]]\";\n } else {\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot use both an optional and required catch-all route at the same level (\"[[...' + this.optionalRestSlugName + ']]\" and \"' + urlPaths[0] + '\").');\n }\n handleSlug(this.restSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName;\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = \"[...]\";\n }\n } else {\n if (isOptional) {\n throw new Error('Optional route parameters are not yet supported (\"' + urlPaths[0] + '\").');\n }\n handleSlug(this.slugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName;\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = \"[]\";\n }\n }\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode());\n }\n this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll);\n }\n constructor(){\n this.placeholder = true;\n this.children = new Map();\n this.slugName = null;\n this.restSlugName = null;\n this.optionalRestSlugName = null;\n }\n}\nfunction getSortedRoutes(normalizedPages) {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode();\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath)=>root.insert(pagePath));\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh();\n} //# sourceMappingURL=sorted-routes.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvc29ydGVkLXJvdXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7O21EQXFNZ0JBOzs7ZUFBQUE7OztBQXJNaEIsTUFBTUM7SUFPSkMsT0FBT0MsT0FBZSxFQUFRO1FBQzVCLElBQUksQ0FBQ0MsT0FBTyxDQUFDRCxRQUFRRSxLQUFLLENBQUMsS0FBS0MsTUFBTSxDQUFDQyxVQUFVLEVBQUUsRUFBRTtJQUN2RDtJQUVBQyxTQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQ0MsT0FBTztJQUNyQjtJQUVRQSxRQUFRQyxNQUFvQixFQUFZO1FBQWhDQSxJQUFBQSxXQUFBQSxLQUFBQSxHQUFBQSxTQUFpQjtRQUMvQixNQUFNQyxnQkFBZ0I7ZUFBSSxJQUFJLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSTtTQUFHLENBQUNDLElBQUk7UUFDcEQsSUFBSSxJQUFJLENBQUNDLFFBQVEsS0FBSyxNQUFNO1lBQzFCSixjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxPQUFPO1FBQ3BEO1FBQ0EsSUFBSSxJQUFJLENBQUNDLFlBQVksS0FBSyxNQUFNO1lBQzlCUCxjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxVQUFVO1FBQ3ZEO1FBQ0EsSUFBSSxJQUFJLENBQUNFLG9CQUFvQixLQUFLLE1BQU07WUFDdENSLGNBQWNLLE1BQU0sQ0FBQ0wsY0FBY00sT0FBTyxDQUFDLFlBQVk7UUFDekQ7UUFFQSxNQUFNRyxTQUFTVCxjQUNaVSxHQUFHLENBQUMsQ0FBQ0MsSUFBTSxJQUFJLENBQUNWLFFBQVEsQ0FBQ1csR0FBRyxDQUFDRCxHQUFJYixPQUFPLENBQUMsS0FBR0MsU0FBU1ksSUFBRSxNQUN2REUsTUFBTSxDQUFDLENBQUNDLE1BQU1DLE9BQVM7bUJBQUlEO21CQUFTQzthQUFLLEVBQUUsRUFBRTtRQUVoRCxJQUFJLElBQUksQ0FBQ1gsUUFBUSxLQUFL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Q0FBQ3pCLFFBQVEsQ0FBQ3NDLEdBQUcsQ0FBQ2IsYUFBYSxJQUFJcEM7UUFDckM7UUFFQSxJQUFJLENBQUNXLFFBQVEsQ0FDVlcsR0FBRyxDQUFDYyxhQUNKakMsT0FBTyxDQUFDNkIsU0FBU0gsS0FBSyxDQUFDLElBQUlJLFdBQVdDO0lBQzNDOzthQWpNQVAsV0FBQUEsR0FBdUI7YUFDdkJoQixRQUFBQSxHQUFpQyxJQUFJdUM7YUFDckNwQyxRQUFBQSxHQUEwQjthQUMxQkcsWUFBQUEsR0FBOEI7YUFDOUJDLG9CQUFBQSxHQUFzQzs7QUE4THhDO0FBRU8sU0FBU25CLGdCQUNkb0QsZUFBc0M7SUFFdEMsa0ZBQWtGO0lBQ2xGLDRFQUE0RTtJQUM1RSwyQ0FBMkM7SUFFM0MseUVBQXlFO0lBQ3pFLDJCQUEyQjtJQUMzQixvQ0FBb0M7SUFDcEMsOEVBQThFO0lBQzlFLHdFQUF3RTtJQUN4RSxnSEFBZ0g7SUFDaEgsNEVBQTRFO0lBQzVFLE1BQU1DLE9BQU8sSUFBSXBEO0lBRWpCLDZGQUE2RjtJQUM3Rm1ELGdCQUFnQk4sT0FBTyxDQUFDLENBQUNRLFdBQWFELEtBQUtuRCxNQUFNLENBQUNvRDtJQUNsRCw0R0FBNEc7SUFDNUcsT0FBT0QsS0FBSzdDLE1BQU07QUFDcEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9zb3J0ZWQtcm91dGVzLnRzP2IwYjAiXSwibmFtZXMiOlsiZ2V0U29ydGVkUm91dGVzIiwiVXJsTm9kZSIsImluc2VydCIsInVybFBhdGgiLCJfaW5zZXJ0Iiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic21vb3NoIiwiX3Ntb29zaCIsInByZWZpeCIsImNoaWxkcmVuUGF0aHMiLCJjaGlsZHJlbiIsImtleXMiLCJzb3J0Iiwic2x1Z05hbWUiLCJzcGxpY2UiLCJpbmRleE9mIiwicmVzdFNsdWdOYW1lIiwib3B0aW9uYWxSZXN0U2x1Z05hbWUiLCJyb3V0ZXMiLCJtYXAiLCJjIiwiZ2V0IiwicmVkdWNlIiwicHJldiIsImN1cnIiLCJwdXNoIiwicGxhY2Vob2xkZXIiLCJyIiwic2xpY2UiLCJFcnJvciIsInVuc2hpZnQiLCJ1cmxQYXRocyIsInNsdWdOYW1lcyIsImlzQ2F0Y2hBbGwiLCJsZW5ndGgiLCJuZXh0U2VnbWVudCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNlZ21lbnROYW1lIiwiaXNPcHRpb25hbCIsInN1YnN0cmluZyIsImhhbmRsZVNsdWciLCJwcmV2aW91c1NsdWciLCJuZXh0U2x1ZyIsImZvckVhY2giLCJzbHVnIiwicmVwbGFjZSIsImhhcyIsInNldCIsIk1hcCIsIm5vcm1hbGl6ZWRQYWdlcyIsInJvb3QiLCJwYWdlUGF0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js": -/*!****************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/utils.js ***! - \****************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DecodeError: function() {\n return DecodeError;\n },\n MiddlewareNotFoundError: function() {\n return MiddlewareNotFoundError;\n },\n MissingStaticPage: function() {\n return MissingStaticPage;\n },\n NormalizeError: function() {\n return NormalizeError;\n },\n PageNotFoundError: function() {\n return PageNotFoundError;\n },\n SP: function() {\n return SP;\n },\n ST: function() {\n return ST;\n },\n WEB_VITALS: function() {\n return WEB_VITALS;\n },\n execOnce: function() {\n return execOnce;\n },\n getDisplayName: function() {\n return getDisplayName;\n },\n getLocationOrigin: function() {\n return getLocationOrigin;\n },\n getURL: function() {\n return getURL;\n },\n isAbsoluteUrl: function() {\n return isAbsoluteUrl;\n },\n isResSent: function() {\n return isResSent;\n },\n loadGetInitialProps: function() {\n return loadGetInitialProps;\n },\n normalizeRepeatedSlashes: function() {\n return normalizeRepeatedSlashes;\n },\n stringifyError: function() {\n return stringifyError;\n }\n});\nconst WEB_VITALS = [\n \"CLS\",\n \"FCP\",\n \"FID\",\n \"INP\",\n \"LCP\",\n \"TTFB\"\n];\nfunction execOnce(fn) {\n let used = false;\n let result;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!used) {\n used = true;\n result = fn(...args);\n }\n return result;\n };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n const { protocol, hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? \":\" + port : \"\");\n}\nfunction getURL() {\n const { href } = window.location;\n const origin = getLocationOrigin();\n return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n return typeof Component === \"string\" ? Component : Component.displayName || Component.name || \"Unknown\";\n}\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n const urlParts = url.split(\"?\");\n const urlNoQuery = urlParts[0];\n return urlNoQuery // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, \"/\").replace(/\\/\\/+/g, \"/\") + (urlParts[1] ? \"?\" + urlParts.slice(1).join(\"?\") : \"\");\n}\nasync function loadGetInitialProps(App, ctx) {\n if (true) {\n var _App_prototype;\n if ((_App_prototype = App.prototype) == null ? void 0 : _App_prototype.getInitialProps) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.';\n throw new Error(message);\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || ctx.ctx && ctx.ctx.res;\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n };\n }\n return {};\n }\n const props = await App.getInitialProps(ctx);\n if (res && isResSent(res)) {\n return props;\n }\n if (!props) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" should resolve to an object. But found \"' + props + '\" instead.';\n throw new Error(message);\n }\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\"\" + getDisplayName(App) + \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\");\n }\n }\n return props;\n}\nconst SP = typeof performance !== \"undefined\";\nconst ST = SP && [\n \"mark\",\n \"measure\",\n \"getEntriesByName\"\n].every((method)=>typeof performance[method] === \"function\");\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n constructor(page){\n super();\n this.code = \"ENOENT\";\n this.name = \"PageNotFoundError\";\n this.message = \"Cannot find module for page: \" + page;\n }\n}\nclass MissingStaticPage extends Error {\n constructor(page, message){\n super();\n this.message = \"Failed to load static file for page: \" + page + \" \" + message;\n }\n}\nclass MiddlewareNotFoundError extends Error {\n constructor(){\n super();\n this.code = \"ENOENT\";\n this.message = \"Cannot find the middleware module\";\n }\n}\nfunction stringifyError(error) {\n return JSON.stringify({\n message: error.message,\n stack: error.stack\n });\n} //# sourceMappingURL=utils.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFvYWFBLGFBQVc7ZUFBWEE7O0lBb0JBQyx5QkFBdUI7ZUFBdkJBOztJQVBBQyxtQkFBaUI7ZUFBakJBOztJQVpBQyxnQkFBYztlQUFkQTs7SUFDQUMsbUJBQWlCO2VBQWpCQTs7SUFUQUMsSUFBRTtlQUFGQTs7SUFDQUMsSUFBRTtlQUFGQTs7SUFsWEFDLFlBQVU7ZUFBVkE7O0lBc1FHQyxVQUFRO2VBQVJBOztJQStCQUMsZ0JBQWM7ZUFBZEE7O0lBWEFDLG1CQUFpQjtlQUFqQkE7O0lBS0FDLFFBQU07ZUFBTkE7O0lBUEhDLGVBQWE7ZUFBYkE7O0lBbUJHQyxXQUFTO2VBQVRBOztJQWtCTUMscUJBQW1CO2VBQW5CQTs7SUFkTkMsMEJBQXdCO2VBQXhCQTs7SUErR0FDLGdCQUFjO2VBQWRBOzs7QUE5WlQsTUFBTVQsYUFBYTtJQUFDO0lBQU87SUFBTztJQUFPO0lBQU87SUFBTztDQUFPO0FBc1E5RCxTQUFTQyxTQUNkUyxFQUFLO0lBRUwsSUFBSUMsT0FBTztJQUNYLElBQUlDO0lBRUosT0FBUTt5Q0FBSUMsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7WUFBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O1FBQ1YsSUFBSSxDQUFDRixNQUFNO1lBQ1RBLE9BQU87WUFDUEMsU0FBU0YsTUFBTUc7UUFDakI7UUFDQSxPQUFPRDtJQUNUO0FBQ0Y7QUFFQSwwREFBMEQ7QUFDMUQsZ0VBQWdFO0FBQ2hFLE1BQU1FLHFCQUFxQjtBQUNwQixNQUFNVCxnQkFBZ0IsQ0FBQ1UsTUFBZ0JELG1CQUFtQkUsSUFBSSxDQUFDRDtBQUUvRCxTQUFTWjtJQUNkLE1BQU0sRUFBRWMsUUFBUSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFB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O0lBQ3JDVSxZQUFZQyxJQUFZLEVBQUVaLE9BQWUsQ0FBRTtRQUN6QyxLQUFLO1FBQ0wsSUFBSSxDQUFDQSxPQUFPLEdBQUcsMENBQXdDWSxPQUFLLE1BQUdaO0lBQ2pFO0FBQ0Y7QUFFTyxNQUFNakQsZ0NBQWdDa0Q7SUFFM0NVLGFBQWM7UUFDWixLQUFLO1FBQ0wsSUFBSSxDQUFDRSxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUNiLE9BQU8sR0FBSTtJQUNsQjtBQUNGO0FBV08sU0FBU2xDLGVBQWVnRCxLQUFZO0lBQ3pDLE9BQU9DLEtBQUtDLFNBQVMsQ0FBQztRQUFFaEIsU0FBU2MsTUFBTWQsT0FBTztRQUFFaUIsT0FBT0gsTUFBTUcsS0FBSztJQUFDO0FBQ3JFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi91dGlscy50cz8xYmQ1Il0sIm5hbWVzIjpbIkRlY29kZUVycm9yIiwiTWlkZGxld2FyZU5vdEZvdW5kRXJyb3IiLCJNaXNzaW5nU3RhdGljUGFnZSIsIk5vcm1hbGl6ZUVycm9yIiwiUGFnZU5vdEZvdW5kRXJyb3IiLCJTUCIsIlNUIiwiV0VCX1ZJVEFMUyIsImV4ZWNPbmNlIiwiZ2V0RGlzcGxheU5hbWUiLCJnZXRMb2NhdGlvbk9yaWdpbiIsImdldFVSTCIsImlzQWJzb2x1dGVVcmwiLCJpc1Jlc1NlbnQiLCJsb2FkR2V0SW5pdGlhbFByb3BzIiwibm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzIiwic3RyaW5naWZ5RXJyb3IiLCJmbiIsInVzZWQiLCJyZXN1bHQiLCJhcmdzIiwiQUJTT0xVVEVfVVJMX1JFR0VYIiwidXJsIiwidGVzdCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0Iiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwib3JpZ2luIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiLCJuYW1lIiwicmVzIiwiZmluaXNoZWQiLCJoZWFkZXJzU2VudCIsInVybFBhcnRzIiwic3BsaXQiLCJ1cmxOb1F1ZXJ5IiwicmVwbGFjZSIsInNsaWNlIiwiam9pbiIsIkFwcCIsImN0eCIsInByb2Nlc3MiLCJwcm90b3R5cGUiLCJnZXRJbml0aWFsUHJvcHMiLCJtZXNzYWdlIiwiRXJyb3IiLCJwYWdlUHJvcHMiLCJwcm9wcyIsIk9iamVjdCIsImtleXMiLCJjb25zb2xlIiwid2FybiIsInBlcmZvcm1hbmNlIiwiZXZlcnkiLCJtZXRob2QiLCJjb25zdHJ1Y3RvciIsInBhZ2UiLCJjb2RlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhY2siXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js": -/*!****************************************************************************************!*\ - !*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js ***! - \****************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider'); // TODO: Delete with enableRenderableContext\n\nvar REACT_CONSUMER_TYPE = Symbol.for('react.consumer');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\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\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\nvar enableRenderableContext = false;\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE$2) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n {\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n }\n\n case REACT_CONTEXT_TYPE:\n var context = type;\n\n {\n return getContextName(context) + '.Consumer';\n }\n\n case REACT_CONSUMER_TYPE:\n {\n return null;\n }\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n }\n }\n\n return null;\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar assign = Object.assign;\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || enableRenderableContext || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('')) {\n _frame = _frame.replace('', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, _ref, self, source, owner, props) {\n var ref;\n\n {\n ref = _ref;\n }\n\n var element;\n\n {\n // In prod, `ref` is a regular property. It will be removed in a\n // future release.\n element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n }\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // debugInfo contains Server Component debug information.\n\n Object.defineProperty(element, '_debugInfo', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: null\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n}\nvar didWarnAboutKeySpread = {};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self) {\n {\n if (!isValidElementType(type)) {\n // This is an invalid element type.\n //\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n } else {\n // This is a valid element type.\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing\n // errors. We don't want exception behavior to differ between dev and\n // prod. (Rendering will throw with a helpful message and as soon as the\n // type is fixed, the key warnings will appear.)\n var children = config.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n } // Warn about key spread regardless of whether the type is valid.\n\n\n if (hasOwnProperty.call(config, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie.
\n // or
). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n //
, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n {\n ref = config.ref;\n }\n\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names\n propName !== 'key' && (propName !== 'ref')) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n var element = ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n }\n\n return element;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object' || !node) {\n return;\n }\n\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nvar ownerHasKeyUseWarning = {};\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement(null);\n }\n}\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n // TODO: Move this to render phase instead of at element creation.\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement(null);\n }\n }\n}\n\nvar jsxDEV = jsxDEV$1 ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzR0FBMEI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBLHFDQUFxQzs7QUFFckMsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHOztBQUVsRztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLGVBQWU7QUFDMUIsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QUFXLGNBQWM7QUFDekI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcz84MDgxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTsgLy8gVE9ETzogRGVsZXRlIHdpdGggZW5hYmxlUmVuZGVyYWJsZUNvbnRleHRcblxudmFyIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb25zdW1lcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIFJFQUNUX0NBQ0hFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jYWNoZScpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG52YXIgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgPSBmYWxzZTtcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxuXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBvdXRlclR5cGUuZGlzcGxheU5hbWU7XG5cbiAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgPSBTeW1ib2wuZm9yKCdyZWFjdC5jbGllbnQucmVmZXJlbmNlJyk7IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMikge1xuICAgICAgLy8gVE9ETzogQ3JlYXRlIGEgY29udmVudGlvbiBmb3IgbmFtaW5nIGNsaWVudCByZWZlcmVuY2VzIHdpdGggZGVidWcgaW5mby5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICAgIGNhc2UgUkVBQ1RfQ0FDSEVfVFlQRTpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICdDYWNoZSc7XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcblxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cbi8qKlxuICogTGV2ZXJhZ2VzIG5hdGl2ZSBicm93c2VyL1ZNIHN0YWNrIGZyYW1lcyB0byBnZXQgcHJvcGVyIGRldGFpbHMgKGUuZy5cbiAqIGZpbGVuYW1lLCBsaW5lICsgY29sIG51bWJlcikgZm9yIGEgc2luZ2xlIGNvbXBvbmVudCBpbiBhIGNvbXBvbmVudCBzdGFjay4gV2VcbiAqIGRvIHRoaXMgYnk6XG4gKiAgICgxKSB0aHJvd2luZyBhbmQgY2F0Y2hpbmcgYW4gZXJyb3IgaW4gdGhlIGZ1bmN0aW9uIC0gdGhpcyB3aWxsIGJlIG91clxuICogICAgICAgY29udHJvbCBlcnJvci5cbiAqICAgKDIpIGNhbGxpbmcgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYW4gZXJyb3IgdGhhdCB3ZSdsbFxuICogICAgICAgY2F0Y2ggLSB0aGlzIHdpbGwgYmUgb3VyIHNhbXBsZSBlcnJvci5cbiAqICAgKDMpIGRpZmZpbmcgdGhlIGNvbnRyb2wgYW5kIHNhbXBsZSBlcnJvciBzdGFja3MgdG8gZmluZCB0aGUgc3RhY2sgZnJhbWVcbiAqICAgICAgIHdoaWNoIHJlcHJlc2VudHMgb3VyIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRpbmcgYSBjb21tb24gc3RhY2sgZnJhbWUgYmV0d2VlbiBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGNhbiBiZVxuICAgKiB0cmlja3kgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgbGV2ZWxzIG9mIHN0YWNrIHRyYWNlIHRydW5jYXRpb24gZnJvbVxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXG4gICAqIGZyYW1lIHNob3VsZCBiZSB0aHJvdWdoIHRoaXMgb2JqZWN0IG1ldGhvZDpcbiAgICogSGF2aW5nIGJvdGggdGhlIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgYmUgaW4gdGhlIGZ1bmN0aW9uIHVuZGVyIHRoZVxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcbiAgICogYGRpc3BsYXlOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSBzdGFja1xuICAgKiBmcmFtZSBleGlzdHMgdGhhdCBoYXMgdGhlIG1ldGhvZCBuYW1lIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgaW5cbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cbiAgICovXG5cblxuICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udHJvbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xuICAgICAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xuXG5cbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gZm4oKTsgLy8gSWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCByZXR1cm5zIGEgcHJvbWlzZSwgaXQncyBsaWtlbHkgYW4gYXN5bmNcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY29tcG9uZW50IHN0YWNrcyBmb3IgYXN5bmMgY2xpZW50IGNvbXBvbmVudHM/XG5cbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcbiAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAnbmFtZScpOyAvLyBCZWZvcmUgRVM2LCB0aGUgYG5hbWVgIHByb3BlcnR5IHdhcyBub3QgY29uZmlndXJhYmxlLlxuXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIC8vIFY4IHV0aWxpemVzIGEgZnVuY3Rpb24ncyBgbmFtZWAgcHJvcGVydHkgd2hlbiBnZW5lcmF0aW5nIGEgc3RhY2sgdHJhY2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgLy8gQ29uZmlndXJhYmxlIHByb3BlcnRpZXMgY2FuIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdHMgd3JpdGFibGUgZGVzY3JpcHRvclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgICduYW1lJywge1xuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXG4gICAgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcblxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICB3aGlsZSAocyA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJiAhc2FtcGxlTGluZXNbc10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIHMrKztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIGMrKztcbiAgICAgIH0gLy8gV2UgY291bGRuJ3QgZmluZCBvdXIgaW50ZW50aW9uYWxseSBpbmplY3RlZCBjb21tb24gcm9vdCBmcmFtZSwgYXR0ZW1wdFxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAvLyBjb250cm9sIHN0YWNrLi4uXG5cblxuICAgICAgaWYgKHMgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fCBjID09PSBjb250cm9sTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgICBjLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB7XG4gICAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxuZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgX3JlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIHJlZjtcblxuICB7XG4gICAgcmVmID0gX3JlZjtcbiAgfVxuXG4gIHZhciBlbGVtZW50O1xuXG4gIHtcbiAgICAvLyBJbiBwcm9kLCBgcmVmYCBpcyBhIHJlZ3VsYXIgcHJvcGVydHkuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhXG4gICAgLy8gZnV0dXJlIHJlbGVhc2UuXG4gICAgZWxlbWVudCA9IHtcbiAgICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBrZXk6IGtleSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICAgIF9vd25lcjogb3duZXJcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBkZWJ1Z0luZm8gY29udGFpbnMgU2VydmVyIENvbXBvbmVudCBkZWJ1ZyBpbmZvcm1hdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX2RlYnVnSW5mbycsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbnZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fTtcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuXG5mdW5jdGlvbiBqc3hERVYkMSh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGludmFsaWQgZWxlbWVudCB0eXBlLlxuICAgICAgLy9cbiAgICAgIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCdSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB2YWxpZCBlbGVtZW50IHR5cGUuXG4gICAgICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgICAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9ycy4gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZFxuICAgICAgLy8gcHJvZC4gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlXG4gICAgICAvLyB0eXBlIGlzIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcbiAgICAgIHZhciBjaGlsZHJlbiA9IGNvbmZpZy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gV2FybiBhYm91dCBrZXkgc3ByZWFkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdHlwZSBpcyB2YWxpZC5cblxuXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICByZXR1cm4gayAhPT0gJ2tleSc7XG4gICAgICB9KTtcbiAgICAgIHZhciBiZWZvcmVFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3trZXk6IHNvbWVLZXksICcgKyBrZXlzLmpvaW4oJzogLi4uLCAnKSArICc6IC4uLn0nIDogJ3trZXk6IHNvbWVLZXl9JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdKSB7XG4gICAgICAgIHZhciBhZnRlckV4YW1wbGUgPSBrZXlzLmxlbmd0aCA+IDAgPyAneycgKyBrZXlzLmpvaW4oJzogLi4uLCAnKSArICc6IC4uLn0nIDogJ3t9JztcblxuICAgICAgICBlcnJvcignQSBwcm9wcyBvYmplY3QgY29udGFpbmluZyBhIFwia2V5XCIgcHJvcCBpcyBiZWluZyBzcHJlYWQgaW50byBKU1g6XFxuJyArICcgIGxldCBwcm9wcyA9ICVzO1xcbicgKyAnICA8JXMgey4uLnByb3BzfSAvPlxcbicgKyAnUmVhY3Qga2V5cyBtdXN0IGJlIHBhc3NlZCBkaXJlY3RseSB0byBKU1ggd2l0aG91dCB1c2luZyBzcHJlYWQ6XFxuJyArICcgIGxldCBwcm9wcyA9ICVzO1xcbicgKyAnICA8JXMga2V5PXtzb21lS2V5fSB7Li4ucHJvcHN9IC8+JywgYmVmb3JlRXhhbXBsZSwgY29tcG9uZW50TmFtZSwgYWZ0ZXJFeGFtcGxlLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBrZXkgPSBudWxsO1xuICAgIHZhciByZWYgPSBudWxsOyAvLyBDdXJyZW50bHksIGtleSBjYW4gYmUgc3ByZWFkIGluIGFzIGEgcHJvcC4gVGhpcyBjYXVzZXMgYSBwb3RlbnRpYWxcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cbiAgICAvLyBvciA8ZGl2IGtleT1cIkhpXCIgey4uLnByb3BzfSAvPiApLiBXZSB3YW50IHRvIGRlcHJlY2F0ZSBrZXkgc3ByZWFkLFxuICAgIC8vIGJ1dCBhcyBhbiBpbnRlcm1lZGlhcnkgc3RlcCwgd2Ugd2lsbCB1c2UganN4REVWIGZvciBldmVyeXRoaW5nIGV4Y2VwdFxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXG4gICAgLy8ga2V5IGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgdW5kZWZpbmVkIG9yIG5vdC5cblxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWF5YmVLZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIG1heWJlS2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgfVxuXG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmIC8vIFNraXAgb3ZlciByZXNlcnZlZCBwcm9wIG5hbWVzXG4gICAgICBwcm9wTmFtZSAhPT0gJ2tleScgJiYgKHByb3BOYW1lICE9PSAncmVmJykpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xuXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHtcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8ICFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIDsgZWxzZSBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gICAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICAgIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAge1xuICAgIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgICBpZiAoIWluZm8pIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHBhcmVudFR5cGUpO1xuXG4gICAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZm87XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gcmVuZGVyIHBoYXNlIGluc3RlYWQgb2YgYXQgZWxlbWVudCBjcmVhdGlvbi5cbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIganN4REVWID0ganN4REVWJDEgO1xuXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuanN4REVWID0ganN4REVWO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js": -/*!******************************************************************!*\ - !*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***! - \******************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw4TEFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtZGV2LXJ1bnRpbWUuanM/YTM2OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n")); - -/***/ }) - -}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } -/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"); }); -/******/ var __webpack_exports__ = __webpack_require__.O(); -/******/ _N_E = __webpack_exports__; -/******/ } -]); \ No newline at end of file diff --git a/.next/static/chunks/app/gunbuilder/[categoryId]/page.js b/.next/static/chunks/app/gunbuilder/[categoryId]/page.js index 38ebe24..63a0a6f 100644 --- a/.next/static/chunks/app/gunbuilder/[categoryId]/page.js +++ b/.next/static/chunks/app/gunbuilder/[categoryId]/page.js @@ -68,7 +68,7 @@ eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={229:func /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // NEW: filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n // NEW: build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // NEW: persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // NEW: handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // NEW: available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // NEW: filtered + sorted parts\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 196,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 195,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 194,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 225,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 229,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 228,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 231,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 250,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 223,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 278,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 272,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 285,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 297,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 291,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 284,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 317,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 318,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 319,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 320,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 283,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 271,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 328,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 332,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 353,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 356,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 350,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 361,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 349,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 372,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 365,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 345,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 392,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 393,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 394,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 395,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 391,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 409,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 413,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 408,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 418,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 421,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 425,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 431,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 424,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 407,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 398,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 268,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 214,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 213,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"pJYAu1Vs5wLdusWqq2Thip72pdg=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7QUFDbkI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCwyQkFBMkI7SUFDM0IsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFFakQsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQ2tDLE9BQU9DLFNBQVMsR0FBR25DLCtDQUFRQSxDQUFhO1FBQzdDLElBQUksS0FBNkIsRUFB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RUFDYiw4REFBQ3JHLGlEQUFJQTtnRUFDSHdHLE1BQU0sZUFBNkJpQixPQUFkdEcsWUFBVyxLQUFXLE9BQVJzRyxLQUFLN0UsRUFBRTtnRUFDMUN5RCxXQUFVOzBFQUNYOzs7Ozs7MEVBR0QsOERBQUNPO2dFQUNDQyxNQUFLO2dFQUNMQyxTQUFTLElBQ1A1QixpQkFBaUIvRCxZQUFZc0csS0FBSzdFLEVBQUU7Z0VBRXRDeUQsV0FBVyxvRkFJVixPQUhDakIsYUFDSSx1RUFDQTswRUFHTEEsYUFBYSxzQkFBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0F0Q3JDcUMsS0FBSzdFLEVBQUU7Ozs7O29DQTRDbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEI7R0E5WndCM0I7O1FBQ1BoQixzREFBU0E7UUFFVEMsc0RBQVNBOzs7S0FIRmUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvW2NhdGVnb3J5SWRdL3BhZ2UudHN4PzhiNWQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5cbnR5cGUgVmlld01vZGUgPSBcImNhcmRcIiB8IFwibGlzdFwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuY29uc3QgQ0FURUdPUllfVE9fUEFSVF9ST0xFUzogUmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZ1tdPiA9IHtcbiAgdXBwZXI6IFtcInVwcGVyLXJlY2VpdmVyXCJdLFxuICBiYXJyZWw6IFtcImJhcnJlbFwiXSxcbiAgaGFuZGd1YXJkOiBbXCJoYW5kZ3VhcmRcIl0sXG4gIGNoYXJnaW5nSGFuZGxlOiBbXCJjaGFyZ2luZy1oYW5kbGVcIl0sXG4gIGJ1ZmZlcjogW1wiYnVmZmVyLWtpdFwiXSxcbiAgbG93ZXJQYXJ0czogW1wibG93ZXItcGFydHMta2l0XCJdLFxuICBzaWdodHM6IFtcInNpZ2h0XCJdLFxufTtcblxuLy8gTkVXOiBzb3J0IG9wdGlvbnNcbnR5cGUgU29ydE9wdGlvbiA9IFwicmVsZXZhbmNlXCIgfCBcInByaWNlLWFzY1wiIHwgXCJwcmljZS1kZXNjXCIgfCBcImJyYW5kLWFzY1wiO1xuXG4vLyBORVc6IGJ1aWxkIHN0YXRlIHR5cGUgKyBzdG9yYWdlIGtleSAobWF0Y2hlcyAvZ3VuYnVpbGRlcilcbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+O1xuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2F0ZWdvcnlQYWdlKCkge1xuICBjb25zdCBwYXJhbXMgPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgY2F0ZWdvcnlJZCA9IHBhcmFtcy5jYXRlZ29yeUlkIGFzIENhdGVnb3J5SWQ7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuXG4gIGNvbnN0IFt2aWV3TW9kZSwgc2V0Vmlld01vZGVdID0gdXNlU3RhdGU8Vmlld01vZGU+KFwibGlzdFwiKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gTkVXOiBmaWx0ZXIgKyBzb3J0IHN0YXRlXG4gIGNvbnN0IFticmFuZEZpbHRlciwgc2V0QnJhbmRGaWx0ZXJdID0gdXNlU3RhdGU8c3RyaW5nPihcImFsbFwiKTtcbiAgY29uc3QgW3NvcnRCeSwgc2V0U29ydEJ5XSA9IHVzZVN0YXRlPFNvcnRPcHRpb24+KFwicmVsZXZhbmNlXCIpO1xuXG4gIC8vIE5FVzogYnVpbGQgc3RhdGUgZm9yIHRoaXMgcGFnZSwgc3luY2VkIHdpdGggbG9jYWxTdG9yYWdlXG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4ge307XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICByZXR1cm4gc3RvcmVkID8gKEpTT04ucGFyc2Uoc3RvcmVkKSBhcyBCdWlsZFN0YXRlKSA6IHt9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSB1c2VNZW1vKFxuICAgICgpID0+IENBVEVHT1JJRVMuZmluZCgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgW2NhdGVnb3J5SWRdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXRlZ29yeVBhcnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm9sZXMgPSBDQVRFR09SWV9UT19QQVJUX1JPTEVTW2NhdGVnb3J5SWRdID8/IFtdO1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgc2VhcmNoLnNldChcInBsYXRmb3JtXCIsIFwiQVItMTVcIik7XG4gICAgICAgIHJvbGVzLmZvckVhY2goKHIpID0+IHNlYXJjaC5hcHBlbmQoXCJwYXJ0Um9sZXNcIiwgcikpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXIke1xuICAgICAgICAgIHJvbGVzLmxlbmd0aCA/IGA/JHtzZWFyY2gudG9TdHJpbmcoKX1gIDogXCJcIlxuICAgICAgICB9YDtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YS5tYXAoKHApID0+ICh7XG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoQ2F0ZWdvcnlQYXJ0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW2NhdGVnb3J5SWRdKTtcblxuICAvLyBORVc6IHBlcnNpc3QgYnVpbGQgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIC8vIE5FVzogaGFuZGxlciB0byB0b2dnbGUgQWRkIC8gUmVtb3ZlIGZvciB0aGlzIGNhdGVnb3J5XG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnRJZDtcblxuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAvLyBSZW1vdmUgZnJvbSBidWlsZFxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZDogQnVpbGRTdGF0ZSA9IHsgLi4ucHJldiB9O1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtjYXRlZ29yeUlkXTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIHRvIGJ1aWxkIGFuZCBuYXZpZ2F0ZSBiYWNrIHRvIG1haW4gZ3VuYnVpbGRlciBwYWdlXG4gICAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICB9KSk7XG4gICAgICByb3V0ZXIucHVzaChcIi9ndW5idWlsZGVyXCIpO1xuICAgIH1cbiAgfTtcblxuICAvLyBORVc6IGF2YWlsYWJsZSBicmFuZHMgZm9yIGZpbHRlclxuICBjb25zdCBhdmFpbGFibGVCcmFuZHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBBcnJheS5mcm9tKG5ldyBTZXQocGFydHMubWFwKChwKSA9PiBwLmJyYW5kKSkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSksXG4gICAgW3BhcnRzXSxcbiAgKTtcblxuICAvLyBORVc6IGZpbHRlcmVkICsgc29ydGVkIHBhcnRzXG4gIGNvbnN0IGZpbHRlcmVkUGFydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gWy4uLnBhcnRzXTtcblxuICAgIGlmIChicmFuZEZpbHRlciAhPT0gXCJhbGxcIikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5icmFuZCA9PT0gYnJhbmRGaWx0ZXIpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc29ydEJ5KSB7XG4gICAgICBjYXNlIFwicHJpY2UtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInByaWNlLWRlc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnJhbmQtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmJyYW5kLmxvY2FsZUNvbXBhcmUoYi5icmFuZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWxldmFuY2VcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGxlYXZlIGluIGJhY2tlbmQgb3JkZXJcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW3BhcnRzLCBicmFuZEZpbHRlciwgc29ydEJ5XSk7XG5cbiAgaWYgKCFjYXRlZ29yeSkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgQ2F0ZWdvcnkgTm90IEZvdW5kXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmV0dXJuIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX0gPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5QYXJ0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgICBCcm93c2UgYWxsIGF2YWlsYWJsZSB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfSBvcHRpb25zIGZvclxuICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQsIHB1bGxlZCBsaXZlIGZyb20geW91ciBCYWxsaXN0aWMgYmFja2VuZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTIgYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMSBiZy16aW5jLTk1MC82MFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJjYXJkXCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImNhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2FyZCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYXJkXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImxpc3RcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJMaXN0IHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIExpc3RcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogUGFydHMgR3JpZC9MaXN0ICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHsvKiBGaWx0ZXIgKyBzb3J0IHRvb2xiYXIgKi99XG4gICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCBmbGV4IGZsZXgtY29sIGdhcC0zIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaG93aW5ne1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgIG9me1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtwYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBodG1sRm9yPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQnJhbmRcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2JyYW5kRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEJyYW5kRmlsdGVyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhbGxcIj5BbGwgYnJhbmRzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHthdmFpbGFibGVCcmFuZHMubWFwKChiKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2J9IHZhbHVlPXtifT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtifVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwic29ydC1ieVwiIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICBTb3J0XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cInNvcnQtYnlcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c29ydEJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U29ydEJ5KGUudGFyZ2V0LnZhbHVlIGFzIFNvcnRPcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWxldmFuY2VcIj5SZWxldmFuY2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWFzY1wiPlByaWNlOiBMb3cg4oaSIEhpZ2g8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWRlc2NcIj5QcmljZTogSGlnaCDihpIgTG93PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJicmFuZC1hc2NcIj5CcmFuZDogQSDihpIgWjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAgTG9hZGluZyB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfeKAplxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBmaWx0ZXJlZFBhcnRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIE5vIHBhcnRzIGF2YWlsYWJsZSBmb3IgdGhpcyBjYXRlZ29yeSB5ZXQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IHZpZXdNb2RlID09PSBcImNhcmRcIiA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnQuaWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdyb3VwIHJlbGF0aXZlIGJvcmRlciBib3JkZXItemluYy03MDAgcm91bmRlZC1tZCBwLTMgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGZsZXggZmxleC1jb2xcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbm9ybWFsXCI+4oCUIHtwYXJ0Lm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlVG9nZ2xlUGFydChjYXRlZ29yeUlkLCBwYXJ0LmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGZsZXgtMSByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtMTAwIGJvcmRlciBib3JkZXItemluYy02MDAgaG92ZXI6YmctemluYy03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBcIlJlbW92ZSBmcm9tIEJ1aWxkXCIgOiBcIkFkZCB0byBCdWlsZFwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHsvKiBIZWFkZXIgcm93IGZvciBsaXN0IHZpZXcgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmdyaWQgZ3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBnYXAtNCBweC0zIHBiLTIgdGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlBhcnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+QnJhbmQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodFwiPlByaWNlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHQgcHItMlwiPkFjdGlvbnM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnQuaWQ7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ3JvdXAgcmVsYXRpdmUgYm9yZGVyIGJvcmRlci16aW5jLTcwMCByb3VuZGVkLW1kIHAtMyBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmdyaWQgbWQ6Z3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBtZDppdGVtcy1jZW50ZXIgbWQ6Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIG1kOnRleHQtc20gdGV4dC16aW5jLTQwMCBtZDp0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIG1kOnRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlUGFydChjYXRlZ29yeUlkLCBwYXJ0LmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNjAwIGhvdmVyOmJnLXppbmMtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWxlY3RlZCA/IFwiUmVtb3ZlIGZyb20gQnVpbGRcIiA6IFwiQWRkIHRvIEJ1aWxkXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkxpbmsiLCJ1c2VQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIkNBVEVHT1JZX1RPX1BBUlRfUk9MRVMiLCJ1cHBlciIsImJhcnJlbCIsImhhbmRndWFyZCIsImNoYXJnaW5nSGFuZGxlIiwiYnVmZmVyIiwibG93ZXJQYXJ0cyIsInNpZ2h0cyIsIlNUT1JBR0VfS0VZIiwiQ2F0ZWdvcnlQYWdlIiwicGFyYW1zIiwiY2F0ZWdvcnlJZCIsInJvdXRlciIsInZpZXdNb2RlIiwic2V0Vmlld01vZGUiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnJhbmRGaWx0ZXIiLCJzZXRCcmFuZEZpbHRlciIsInNvcnRCeSIsInNldFNvcnRCeSIsImJ1aWxkIiwic2V0QnVpbGQiLCJzdG9yZWQiLCJ3aW5kb3ciLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwiY2F0ZWdvcnkiLCJmaW5kIiwiYyIsImlkIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoQ2F0ZWdvcnlQYXJ0cyIsInJvbGVzIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwic2V0IiwiZm9yRWFjaCIsInIiLCJhcHBlbmQiLCJ1cmwiLCJsZW5ndGgiLCJ0b1N0cmluZyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwiYnV5VXJsIiwibm90ZXMiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiaGFuZGxlVG9nZ2xlUGFydCIsInBhcnRJZCIsImlzU2VsZWN0ZWQiLCJwcmV2IiwidXBkYXRlZCIsInB1c2giLCJhdmFpbGFibGVCcmFuZHMiLCJBcnJheSIsImZyb20iLCJTZXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImZpbHRlcmVkUGFydHMiLCJyZXN1bHQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaDEiLCJocmVmIiwiaGVhZGVyIiwic3BhbiIsInRvTG93ZXJDYXNlIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwic2VjdGlvbiIsImxhYmVsIiwiaHRtbEZvciIsInNlbGVjdCIsInZhbHVlIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0Iiwib3B0aW9uIiwicGFydCIsInRvRml4ZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n const normalizedQuery = searchQuery.trim().toLowerCase();\n if (normalizedQuery) {\n result = result.filter((p)=>{\n const name = p.name.toLowerCase();\n const brand = p.brand.toLowerCase();\n return name.includes(normalizedQuery) || brand.includes(normalizedQuery);\n });\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId,\n searchQuery\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 215,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 250,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 259,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 271,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 244,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"part-search\",\n className: \"text-xs text-zinc-500\",\n children: \"Search\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"part-search\",\n type: \"text\",\n value: searchQuery,\n onChange: (e)=>setSearchQuery(e.target.value),\n placeholder: \"Search \".concat(category.name.toLowerCase(), \"...\"),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 pr-6 focus:outline-none focus:ring-1 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 310,\n columnNumber: 19\n }, this),\n searchQuery && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setSearchQuery(\"\"),\n className: \"absolute right-1 top-1/2 -translate-y-1/2 text-zinc-500 hover:text-zinc-300 text-xs leading-none\",\n \"aria-label\": \"Clear search\",\n children: \"\\xd7\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 319,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 331,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 343,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 345,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 337,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 330,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 352,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 363,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 364,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 365,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 355,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 304,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 374,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 378,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 382,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 flex flex-col border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 401,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 406,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 400,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 411,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 399,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 416,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 422,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 415,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 391,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 386,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 442,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 443,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 444,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 445,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 441,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 463,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 467,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 462,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 472,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 475,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 479,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 485,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 478,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 461,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 453,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 448,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 289,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 234,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"hQW9WjwScoo4vSowKyqHqdjUZSA=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7QUFDbkI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCxzQkFBc0I7SUFDdEIsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFDakQsTUFBTSxDQUFDa0MsYUFBYUMsZUFBZSxHQUFHbkMsK0NBQVFBLENBQVM7SUFFdkQsdURBQXVEO0lBQ3ZELE1BQU0sQ0FBQ29DLE9B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OERBQUN1Qzt3REFBSUQsV0FBVTs7NERBQXFEOzREQUNoRXFCLEtBQUsxRCxLQUFLLENBQUMyRCxPQUFPLENBQUM7Ozs7Ozs7a0VBRXZCLDhEQUFDckI7d0RBQUlELFdBQVU7OzBFQUNiLDhEQUFDOUcsaURBQUlBO2dFQUNIaUgsTUFBTSxlQUE2QmtCLE9BQWRoSCxZQUFXLEtBQVcsT0FBUmdILEtBQUtyRixFQUFFO2dFQUMxQ2dFLFdBQVU7MEVBQ1g7Ozs7OzswRUFHRCw4REFBQ007Z0VBQ0NDLE1BQUs7Z0VBQ0xDLFNBQVMsSUFDUGxDLGlCQUFpQmpFLFlBQVlnSCxLQUFLckYsRUFBRTtnRUFFdENnRSxXQUFXLG9GQUlWLE9BSEN4QixhQUNJLHVFQUNBOzBFQUdMQSxhQUFhLHNCQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQTFDckM2QyxLQUFLckYsRUFBRTs7Ozs7b0NBZ0RsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFoQjtHQXBkd0I3Qjs7UUFDUGhCLHNEQUFTQTtRQUVUQyxzREFBU0E7OztLQUhGZSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3g/OGI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxudHlwZSBWaWV3TW9kZSA9IFwiY2FyZFwiIHwgXCJsaXN0XCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5jb25zdCBDQVRFR09SWV9UT19QQVJUX1JPTEVTOiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nW10+ID0ge1xuICB1cHBlcjogW1widXBwZXItcmVjZWl2ZXJcIl0sXG4gIGJhcnJlbDogW1wiYmFycmVsXCJdLFxuICBoYW5kZ3VhcmQ6IFtcImhhbmRndWFyZFwiXSxcbiAgY2hhcmdpbmdIYW5kbGU6IFtcImNoYXJnaW5nLWhhbmRsZVwiXSxcbiAgYnVmZmVyOiBbXCJidWZmZXIta2l0XCJdLFxuICBsb3dlclBhcnRzOiBbXCJsb3dlci1wYXJ0cy1raXRcIl0sXG4gIHNpZ2h0czogW1wic2lnaHRcIl0sXG59O1xuXG4vLyBzb3J0IG9wdGlvbnNcbnR5cGUgU29ydE9wdGlvbiA9IFwicmVsZXZhbmNlXCIgfCBcInByaWNlLWFzY1wiIHwgXCJwcmljZS1kZXNjXCIgfCBcImJyYW5kLWFzY1wiO1xuXG4vLyBidWlsZCBzdGF0ZSB0eXBlICsgc3RvcmFnZSBrZXkgKG1hdGNoZXMgL2d1bmJ1aWxkZXIpXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjtcbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhdGVnb3J5UGFnZSgpIHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGNhdGVnb3J5SWQgPSBwYXJhbXMuY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcblxuICBjb25zdCBbdmlld01vZGUsIHNldFZpZXdNb2RlXSA9IHVzZVN0YXRlPFZpZXdNb2RlPihcImxpc3RcIik7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIGZpbHRlciArIHNvcnQgc3RhdGVcbiAgY29uc3QgW2JyYW5kRmlsdGVyLCBzZXRCcmFuZEZpbHRlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiYWxsXCIpO1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydE9wdGlvbj4oXCJyZWxldmFuY2VcIik7XG4gIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcblxuICAvLyAgYnVpbGQgc3RhdGUgZm9yIHRoaXMgcGFnZSwgc3luY2VkIHdpdGggbG9jYWxTdG9yYWdlXG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4ge307XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICByZXR1cm4gc3RvcmVkID8gKEpTT04ucGFyc2Uoc3RvcmVkKSBhcyBCdWlsZFN0YXRlKSA6IHt9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSB1c2VNZW1vKFxuICAgICgpID0+IENBVEVHT1JJRVMuZmluZCgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgW2NhdGVnb3J5SWRdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXRlZ29yeVBhcnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm9sZXMgPSBDQVRFR09SWV9UT19QQVJUX1JPTEVTW2NhdGVnb3J5SWRdID8/IFtdO1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgc2VhcmNoLnNldChcInBsYXRmb3JtXCIsIFwiQVItMTVcIik7XG4gICAgICAgIHJvbGVzLmZvckVhY2goKHIpID0+IHNlYXJjaC5hcHBlbmQoXCJwYXJ0Um9sZXNcIiwgcikpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXIke1xuICAgICAgICAgIHJvbGVzLmxlbmd0aCA/IGA/JHtzZWFyY2gudG9TdHJpbmcoKX1gIDogXCJcIlxuICAgICAgICB9YDtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YS5tYXAoKHApID0+ICh7XG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoQ2F0ZWdvcnlQYXJ0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW2NhdGVnb3J5SWRdKTtcblxuICAvLyAgcGVyc2lzdCBidWlsZCB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgLy8gIGhhbmRsZXIgdG8gdG9nZ2xlIEFkZCAvIFJlbW92ZSBmb3IgdGhpcyBjYXRlZ29yeVxuICBjb25zdCBoYW5kbGVUb2dnbGVQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0SWQ7XG5cbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgLy8gUmVtb3ZlIGZyb20gYnVpbGRcbiAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQ6IEJ1aWxkU3RhdGUgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRbY2F0ZWdvcnlJZF07XG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCB0byBidWlsZCBhbmQgbmF2aWdhdGUgYmFjayB0byBtYWluIGd1bmJ1aWxkZXIgcGFnZVxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgfSkpO1xuICAgICAgcm91dGVyLnB1c2goXCIvZ3VuYnVpbGRlclwiKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gYXZhaWxhYmxlIGJyYW5kcyBmb3IgZmlsdGVyXG4gIGNvbnN0IGF2YWlsYWJsZUJyYW5kcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIEFycmF5LmZyb20obmV3IFNldChwYXJ0cy5tYXAoKHApID0+IHAuYnJhbmQpKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKSxcbiAgICBbcGFydHNdLFxuICApO1xuXG4gIC8vIGZpbHRlcmVkICsgc29ydGVkIHBhcnRzIHdpdGggc2VsZWN0ZWQgcGFydCBwaW5uZWQgdG8gdG9wXG4gIGNvbnN0IGZpbHRlcmVkUGFydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gWy4uLnBhcnRzXTtcblxuICAgIGlmIChicmFuZEZpbHRlciAhPT0gXCJhbGxcIikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5icmFuZCA9PT0gYnJhbmRGaWx0ZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHNlYXJjaFF1ZXJ5LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChub3JtYWxpemVkUXVlcnkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHAubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBicmFuZCA9IHAuYnJhbmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBuYW1lLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkgfHxcbiAgICAgICAgICBicmFuZC5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNvcnRCeSkge1xuICAgICAgY2FzZSBcInByaWNlLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5wcmljZSAtIGIucHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwcmljZS1kZXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJyYW5kLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5icmFuZC5sb2NhbGVDb21wYXJlKGIuYnJhbmQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmVsZXZhbmNlXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBsZWF2ZSBpbiBiYWNrZW5kIG9yZGVyXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFBpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBhcnQgKGZvciB0aGlzIGNhdGVnb3J5KSB0byB0aGUgdG9wLCBpZiBhbnlcbiAgICBjb25zdCBzZWxlY3RlZElkID0gYnVpbGRbY2F0ZWdvcnlJZF07XG4gICAgaWYgKHNlbGVjdGVkSWQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRJZCk7XG4gICAgICBjb25zdCBvdGhlcnMgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmlkICE9PSBzZWxlY3RlZElkKTtcbiAgICAgIHJlc3VsdCA9IFsuLi5zZWxlY3RlZCwgLi4ub3RoZXJzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBbcGFydHMsIGJyYW5kRmlsdGVyLCBzb3J0QnksIGJ1aWxkLCBjYXRlZ29yeUlkLCBzZWFyY2hRdWVyeV0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtemluYy01MCBtYi00XCI+XG4gICAgICAgICAgICAgIENhdGVnb3J5IE5vdCBGb3VuZFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJldHVybiB0byBHdW5idWlsZGVyXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYWluPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDAgbWItNCBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKGkCBCYWNrIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UGFydHM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgICAgQnJvd3NlIGFsbCBhdmFpbGFibGUge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX0gb3B0aW9ucyBmb3JcbiAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkLCBwdWxsZWQgbGl2ZSBmcm9tIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIGJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTEgYmctemluYy05NTAvNjBcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwiY2FyZFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNhcmQgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FyZFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJsaXN0XCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGlzdCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBMaXN0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFBhcnRzIEdyaWQvTGlzdCAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7LyogRmlsdGVyICsgc29ydCB0b29sYmFyICovfVxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgZmxleCBmbGV4LWNvbCBnYXAtMyBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hvd2luZ3tcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBvZntcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7cGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgcGFydHNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwicGFydC1zZWFyY2hcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlYXJjaFxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwicGFydC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2hRdWVyeShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfS4uLmB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIHByLTYgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge3NlYXJjaFF1ZXJ5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlYXJjaFF1ZXJ5KFwiXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTEgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtemluYy01MDAgaG92ZXI6dGV4dC16aW5jLTMwMCB0ZXh0LXhzIGxlYWRpbmctbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICDDl1xuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBodG1sRm9yPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQnJhbmRcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2JyYW5kRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEJyYW5kRmlsdGVyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhbGxcIj5BbGwgYnJhbmRzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHthdmFpbGFibGVCcmFuZHMubWFwKChiKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2J9IHZhbHVlPXtifT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtifVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwic29ydC1ieVwiIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICBTb3J0XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cInNvcnQtYnlcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c29ydEJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U29ydEJ5KGUudGFyZ2V0LnZhbHVlIGFzIFNvcnRPcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWxldmFuY2VcIj5SZWxldmFuY2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWFzY1wiPlByaWNlOiBMb3cg4oaSIEhpZ2g8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWRlc2NcIj5QcmljZTogSGlnaCDihpIgTG93PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJicmFuZC1hc2NcIj5CcmFuZDogQSDihpIgWjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAgTG9hZGluZyB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfeKAplxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBmaWx0ZXJlZFBhcnRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIE5vIHBhcnRzIGF2YWlsYWJsZSBmb3IgdGhpcyBjYXRlZ29yeSB5ZXQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IHZpZXdNb2RlID09PSBcImNhcmRcIiA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnQuaWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGdyb3VwIHJlbGF0aXZlIHJvdW5kZWQtbWQgcC0zIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBmbGV4IGZsZXgtY29sIGJvcmRlciAke1xuICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItYW1iZXItNDAwLzcwIGJnLWFtYmVyLTQwMC8xMCBzaGFkb3ctWzBfMF8wXzFweF9yZ2JhKDI1MSwxOTEsMzYsMC4yNSldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTBcIlxuICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW5vcm1hbFwiPuKAlCB7cGFydC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0yIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BmbGV4LTEgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNjAwIGhvdmVyOmJnLXppbmMtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7LyogSGVhZGVyIHJvdyBmb3IgbGlzdCB2aWV3ICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpncmlkIGdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gZ2FwLTQgcHgtMyBwYi0yIHRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5QYXJ0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkJyYW5kPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHRcIj5QcmljZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0IHByLTJcIj5BY3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGdyb3VwIHJlbGF0aXZlIHJvdW5kZWQtbWQgcC0zIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBib3JkZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJvcmRlci1hbWJlci00MDAvNzAgYmctYW1iZXItNDAwLzEwIHNoYWRvdy1bMF8wXzBfMXB4X3JnYmEoMjUxLDE5MSwzNiwwLjI1KV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwXCJcbiAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpncmlkIG1kOmdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gbWQ6aXRlbXMtY2VudGVyIG1kOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBtZDp0ZXh0LXNtIHRleHQtemluYy00MDAgbWQ6dGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCBtZDp0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBcIlJlbW92ZSBmcm9tIEJ1aWxkXCIgOiBcIkFkZCB0byBCdWlsZFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJMaW5rIiwidXNlUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJDQVRFR09SWV9UT19QQVJUX1JPTEVTIiwidXBwZXIiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJjaGFyZ2luZ0hhbmRsZSIsImJ1ZmZlciIsImxvd2VyUGFydHMiLCJzaWdodHMiLCJTVE9SQUdFX0tFWSIsIkNhdGVnb3J5UGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJyb3V0ZXIiLCJ2aWV3TW9kZSIsInNldFZpZXdNb2RlIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJyYW5kRmlsdGVyIiwic2V0QnJhbmRGaWx0ZXIiLCJzb3J0QnkiLCJzZXRTb3J0QnkiLCJzZWFyY2hRdWVyeSIsInNldFNlYXJjaFF1ZXJ5IiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsIndpbmRvdyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjYXRlZ29yeSIsImZpbmQiLCJjIiwiaWQiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hDYXRlZ29yeVBhcnRzIiwicm9sZXMiLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJmb3JFYWNoIiwiciIsImFwcGVuZCIsInVybCIsImxlbmd0aCIsInRvU3RyaW5nIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJidXlVcmwiLCJub3RlcyIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJoYW5kbGVUb2dnbGVQYXJ0IiwicGFydElkIiwiaXNTZWxlY3RlZCIsInByZXYiLCJ1cGRhdGVkIiwicHVzaCIsImF2YWlsYWJsZUJyYW5kcyIsIkFycmF5IiwiZnJvbSIsIlNldCIsImZpbHRlciIsIkJvb2xlYW4iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZmlsdGVyZWRQYXJ0cyIsInJlc3VsdCIsIm5vcm1hbGl6ZWRRdWVyeSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwic2VsZWN0ZWRJZCIsInNlbGVjdGVkIiwib3RoZXJzIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImFyaWEtbGFiZWwiLCJzZWN0aW9uIiwibGFiZWwiLCJodG1sRm9yIiwiaW5wdXQiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwic2VsZWN0Iiwib3B0aW9uIiwicGFydCIsInRvRml4ZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); /***/ }), diff --git a/.next/static/chunks/app/gunbuilder/build/page.js b/.next/static/chunks/app/gunbuilder/build/page.js deleted file mode 100644 index 218f90a..0000000 --- a/.next/static/chunks/app/gunbuilder/build/page.js +++ /dev/null @@ -1,324 +0,0 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/gunbuilder/build/page"],{ - -/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!": -/*!***************************************************************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false! ***! - \***************************************************************************************************************************************************************************************************************************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - -eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/gunbuilder/build/page.tsx */ \"(app-pages-browser)/./app/gunbuilder/build/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGVXNlcnMlMkZzZWFuJTJGRGV2JTJGZ3VuYnVpbGRlci1wcm90b3R5cGUlMkZhcHAlMkZndW5idWlsZGVyJTJGYnVpbGQlMkZwYWdlLnRzeCUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9ZmFsc2UhIiwibWFwcGluZ3MiOiJBQUFBLHdMQUF1RyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvPzM0N2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2d1bmJ1aWxkZXIvYnVpbGQvcGFnZS50c3hcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/api/link.js": -/*!********************************************!*\ - !*** ./node_modules/next/dist/api/link.js ***! - \********************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport default from dynamic */ _client_link__WEBPACK_IMPORTED_MODULE_0___default.a; }\n/* harmony export */ });\n/* harmony import */ var _client_link__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/link */ \"(app-pages-browser)/./node_modules/next/dist/client/link.js\");\n/* harmony import */ var _client_link__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_link__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _client_link__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _client_link__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n\n//# sourceMappingURL=link.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL2xpbmsuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXlDO0FBQ1Y7O0FBRS9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL2xpbmsuanM/NzkyYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi4uL2NsaWVudC9saW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vY2xpZW50L2xpbmtcIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGluay5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/link.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js": -/*!**************************************************!*\ - !*** ./node_modules/next/dist/api/navigation.js ***! - \**************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEOztBQUVoRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2FwaS9uYXZpZ2F0aW9uLmpzPzdkMGYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4uL2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb25cIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmF2aWdhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js": -/*!***********************************************************!*\ - !*** ./node_modules/next/dist/build/polyfills/process.js ***! - \***********************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nvar _global_process, _global_process1;\nmodule.exports = ((_global_process = __webpack_require__.g.process) == null ? void 0 : _global_process.env) && typeof ((_global_process1 = __webpack_require__.g.process) == null ? void 0 : _global_process1.env) === \"object\" ? __webpack_require__.g.process : __webpack_require__(/*! next/dist/compiled/process */ \"(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js\");\n\n//# sourceMappingURL=process.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLHFDQUFxQyxxQkFBTSxpRkFBaUYscUJBQU0sa0VBQWtFLHFCQUFNLFdBQVcsbUJBQU8sQ0FBQyw0R0FBNEI7O0FBRXpQIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanM/MGE5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfZ2xvYmFsX3Byb2Nlc3MsIF9nbG9iYWxfcHJvY2VzczE7XG5tb2R1bGUuZXhwb3J0cyA9ICgoX2dsb2JhbF9wcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsX3Byb2Nlc3MuZW52KSAmJiB0eXBlb2YgKChfZ2xvYmFsX3Byb2Nlc3MxID0gZ2xvYmFsLnByb2Nlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsX3Byb2Nlc3MxLmVudikgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwucHJvY2VzcyA6IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcHJvY2Vzc1wiKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvY2Vzcy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js": -/*!************************************************************!*\ - !*** ./node_modules/next/dist/compiled/process/browser.js ***! - \************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={229:function(e){var t=e.exports={};var r;var n;function defaultSetTimout(){throw new Error(\"setTimeout has not been defined\")}function defaultClearTimeout(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{if(typeof setTimeout===\"function\"){r=setTimeout}else{r=defaultSetTimout}}catch(e){r=defaultSetTimout}try{if(typeof clearTimeout===\"function\"){n=clearTimeout}else{n=defaultClearTimeout}}catch(e){n=defaultClearTimeout}})();function runTimeout(e){if(r===setTimeout){return setTimeout(e,0)}if((r===defaultSetTimout||!r)&&setTimeout){r=setTimeout;return setTimeout(e,0)}try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}function runClearTimeout(e){if(n===clearTimeout){return clearTimeout(e)}if((n===defaultClearTimeout||!n)&&clearTimeout){n=clearTimeout;return clearTimeout(e)}try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}var i=[];var o=false;var u;var a=-1;function cleanUpNextTick(){if(!o||!u){return}o=false;if(u.length){i=u.concat(i)}else{a=-1}if(i.length){drainQueue()}}function drainQueue(){if(o){return}var e=runTimeout(cleanUpNextTick);o=true;var t=i.length;while(t){u=i;i=[];while(++a1){for(var r=1;r CategoryId (same as /gunbuilder page)\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\"\n};\n// Encode build state to URL-friendly string\nfunction encodeBuildState(build) {\n const entries = Object.entries(build).filter((param)=>{\n let [_, partId] = param;\n return partId;\n }).map((param)=>{\n let [categoryId, partId] = param;\n return \"\".concat(categoryId, \":\").concat(partId);\n }).join(\",\");\n return btoa(entries);\n}\n// Decode URL string to build state\nfunction decodeBuildState(encoded) {\n try {\n const decoded = atob(encoded);\n const build = {};\n decoded.split(\",\").forEach((entry)=>{\n const [categoryId, partId] = entry.split(\":\");\n if (categoryId && partId) {\n build[categoryId] = partId;\n }\n });\n return build;\n } catch (e) {\n return {};\n }\n}\nfunction BuildDetailsPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const [shareUrl, setShareUrl] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [copied, setCopied] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loadingParts, setLoadingParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [partsError, setPartsError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Load build from URL params or localStorage\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const buildParam = searchParams.get(\"build\");\n if (buildParam) {\n const decoded = decodeBuildState(buildParam);\n setBuild(decoded);\n // Also save to localStorage\n localStorage.setItem(STORAGE_KEY, JSON.stringify(decoded));\n } else if (true) {\n // Load from localStorage\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n const parsed = JSON.parse(stored);\n setBuild(parsed);\n } catch (e) {\n // Invalid stored data\n }\n }\n }\n }, [\n searchParams\n ]);\n // Fetch live parts from backend (same source as /gunbuilder)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoadingParts(true);\n setPartsError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) return null;\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter(Boolean);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setPartsError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoadingParts(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Generate shareable URL\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if ( true && Object.keys(build).length > 0) {\n const encoded = encodeBuildState(build);\n const url = \"\".concat(window.location.origin, \"/gunbuilder/build?build=\").concat(encoded);\n setShareUrl(url);\n }\n }, [\n build\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n if (parts.length === 0) return [];\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleCopyLink = async ()=>{\n if (shareUrl) {\n try {\n await navigator.clipboard.writeText(shareUrl);\n setCopied(true);\n setTimeout(()=>setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy:\", err);\n }\n }\n };\n const handleShare = async ()=>{\n if (navigator.share && shareUrl) {\n try {\n await navigator.share({\n title: \"My AR-15 Build\",\n text: \"Check out my AR-15 build: $\".concat(totalPrice.toFixed(2)),\n url: shareUrl\n });\n } catch (e) {\n handleCopyLink();\n }\n } else {\n handleCopyLink();\n }\n };\n if (!loadingParts && selectedParts.length === 0) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-4xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"No Build Selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 208,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-400 mb-6\",\n children: \"You need to select at least one part to view your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 211,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"inline-block rounded-md border border-amber-400/60 bg-amber-400/10 px-4 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 transition-colors\",\n children: \"Go to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 214,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 207,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 206,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 205,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 231,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-4 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 239,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Build \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 243,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 242,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Review your build, purchase parts from our affiliate partners, or share your build with others.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 245,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 238,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Total Build Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-3xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 253,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" parts selected\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 256,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 251,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 237,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 230,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mb-6 rounded-lg border border-zinc-800 bg-zinc-950/60 p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-2\",\n children: \"Share Your Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 267,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-400\",\n children: \"Share this link to let others view your build or bookmark it to come back later.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 270,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 266,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleShare,\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-4 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"Share\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 276,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleCopyLink,\n className: \"rounded-md border px-4 py-2 text-sm font-medium transition-colors \".concat(copied ? \"border-green-500 bg-green-500/10 text-green-400\" : \"border-zinc-700 bg-zinc-900/50 text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600\"),\n children: copied ? \"Copied!\" : \"Copy Link\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 283,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 275,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 265,\n columnNumber: 11\n }, this),\n shareUrl && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 rounded-md bg-zinc-900/50 border border-zinc-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500 mb-1\",\n children: \"Shareable URL:\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 298,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-400 break-all font-mono\",\n children: shareUrl\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 297,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 264,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-4 md:p-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-4\",\n children: \"Selected Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 308,\n columnNumber: 11\n }, this),\n loadingParts && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 mb-4\",\n children: \"Loading parts…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 313,\n columnNumber: 13\n }, this),\n partsError && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 mb-4\",\n children: [\n partsError,\n \" — check the Ballistic API.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 316,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>{\n const selectedPartId = build[category.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === category.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-4 bg-zinc-900/30\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500 mb-2\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 337,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg font-semibold text-zinc-50 mb-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 343,\n columnNumber: 29\n }, this),\n \" \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 342,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 flex gap-2 flex-wrap\",\n children: [\n part.url && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: part.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"inline-flex items-center gap-2 rounded-md border border-amber-400/60 bg-amber-400/10 px-4 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 transition-colors\",\n children: [\n \"Purchase from Retailer\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 361,\n columnNumber: 35\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 355,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 348,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(category.id, \"/\").concat(part.id),\n className: \"inline-flex items-center rounded-md border border-zinc-700 bg-zinc-900/50 px-4 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 370,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 346,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 379,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 336,\n columnNumber: 21\n }, this),\n part && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-right\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 386,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 385,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 335,\n columnNumber: 19\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 331,\n columnNumber: 17\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 321,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 307,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 flex flex-col gap-3 sm:flex-row sm:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-6 py-3 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center\",\n children: \"Edit Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 400,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n localStorage.removeItem(STORAGE_KEY);\n router.push(\"/gunbuilder\");\n },\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-6 py-3 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 407,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 406,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 399,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 228,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 227,\n columnNumber: 5\n }, this);\n}\n_s(BuildDetailsPage, \"yI2VUmiaBW67/yRb849/GHK2EJo=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = BuildDetailsPage;\nvar _c;\n$RefreshReg$(_c, \"BuildDetailsPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2J1aWxkL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFFcUQ7QUFDeEI7QUFDZ0M7QUFDVDtBQUlwRCxNQUFNTyxjQUFjO0lBR2xCQztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQWExQyxnRUFBZ0U7QUFDaEUsTUFBTUksd0JBQW9EO0lBQ3hELGtCQUFrQjtJQUNsQkMsUUFBUTtJQUNSQyxXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkJDLE9BQU87QUFDVDtBQUVBLDRDQUE0QztBQUM1QyxTQUFTQyxpQkFBaUJDLEtBQWlCO0lBQ3pDLE1BQU1DLFVBQVVDLE9BQU9ELE9BQU8sQ0FBQ0QsT0FDNUJHLE1BQU0sQ0FBQztZQUFDLENBQUNDLEdBQUdDLE9BQU87ZUFBS0E7T0FDeEJDLEdBQUcsQ0FBQztZQUFDLENBQUNDLFlBQVlGLE9BQU87ZUFBSyxHQUFpQkEsT0FBZEUsWUFBVyxLQUFVLE9BQVBGO09BQy9DRyxJQUFJLENBQUM7SUFDUixPQUFPQyxLQUFLUjtBQUNkO0FBRUEsbUNBQW1DO0FBQ25DLFNBQVNTLGlCQUFpQkMsT0FBZTtJQUN2QyxJQUFJO1FBQ0YsTUFBTUMsVUFBVUMsS0FBS0Y7UUFDckIsTUFBTVgsUUFBb0IsQ0FBQztRQUMzQlksUUFBUUUsS0FBSyxDQUFDLEtBQUtDLE9BQU8sQ0FBQyxDQUFDQztZQUMxQixNQUFNLENBQUNULFlBQVlGLE9BQU8sR0FBR1csTUFBTUYsS0FBSyxDQUFDO1lBQ3pDLElBQUlQLGNBQWNGLFFBQVE7Z0JBQ3hCTCxLQUFLLENBQUNPLFdBQXlCLEdBQUdGO1lBQ3BDO1FBQ0Y7UUFDQSxPQUFPTDtJQUNULEVBQUUsVUFBTTtRQUNOLE9BQU8sQ0FBQztJQUNWO0FBQ0Y7QUFFZSxTQUFTaUI7O0lBQ3RC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dEI7Ozs7Ozs7Ozs7Ozs4QkFLSiw4REFBQ3NDO29CQUFJRCxXQUFVOztzQ0FDYiw4REFBQzFHLGlEQUFJQTs0QkFDSDZHLE1BQUs7NEJBQ0xILFdBQVU7c0NBQ1g7Ozs7OztzQ0FHRCw4REFBQ0M7NEJBQUlELFdBQVU7c0NBQ2IsNEVBQUNRO2dDQUNDQyxNQUFLO2dDQUNMQyxTQUFTO29DQUNQckUsYUFBYXFGLFVBQVUsQ0FBQ2hJO29DQUN4QjZCLE9BQU9vRyxJQUFJLENBQUM7Z0NBQ2Q7Z0NBQ0EzQixXQUFVOzBDQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWI7R0F2V3dCM0U7O1FBQ0Q5Qiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkY2QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9idWlsZC9wYWdlLnRzeD8wYzZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjsgLy8gY2F0ZWdvcnlJZCAtPiBwYXJ0SWRcbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZzsgLy8gYmFja2VuZCBVVUlEIHN0cmluZ1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIC0+IENhdGVnb3J5SWQgKHNhbWUgYXMgL2d1bmJ1aWxkZXIgcGFnZSlcbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiLFxuICBiYXJyZWw6IFwiYmFycmVsXCIsXG4gIGhhbmRndWFyZDogXCJoYW5kZ3VhcmRcIixcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIixcbiAgXCJsb3dlci1wYXJ0cy1raXRcIjogXCJsb3dlclBhcnRzXCIsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiLFxufTtcblxuLy8gRW5jb2RlIGJ1aWxkIHN0YXRlIHRvIFVSTC1mcmllbmRseSBzdHJpbmdcbmZ1bmN0aW9uIGVuY29kZUJ1aWxkU3RhdGUoYnVpbGQ6IEJ1aWxkU3RhdGUpOiBzdHJpbmcge1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgLmZpbHRlcigoW18sIHBhcnRJZF0pID0+IHBhcnRJZClcbiAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT4gYCR7Y2F0ZWdvcnlJZH06JHtwYXJ0SWR9YClcbiAgICAuam9pbihcIixcIik7XG4gIHJldHVybiBidG9hKGVudHJpZXMpO1xufVxuXG4vLyBEZWNvZGUgVVJMIHN0cmluZyB0byBidWlsZCBzdGF0ZVxuZnVuY3Rpb24gZGVjb2RlQnVpbGRTdGF0ZShlbmNvZGVkOiBzdHJpbmcpOiBCdWlsZFN0YXRlIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkZWNvZGVkID0gYXRvYihlbmNvZGVkKTtcbiAgICBjb25zdCBidWlsZDogQnVpbGRTdGF0ZSA9IHt9O1xuICAgIGRlY29kZWQuc3BsaXQoXCIsXCIpLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IGVudHJ5LnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCkge1xuICAgICAgICBidWlsZFtjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWRdID0gcGFydElkO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJ1aWxkRGV0YWlsc1BhZ2UoKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcblxuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KHt9KTtcbiAgY29uc3QgW3NoYXJlVXJsLCBzZXRTaGFyZVVybF0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nUGFydHMsIHNldExvYWRpbmdQYXJ0c10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW3BhcnRzRXJyb3IsIHNldFBhcnRzRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gTG9hZCBidWlsZCBmcm9tIFVSTCBwYXJhbXMgb3IgbG9jYWxTdG9yYWdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJidWlsZFwiKTtcbiAgICBpZiAoYnVpbGRQYXJhbSkge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUJ1aWxkU3RhdGUoYnVpbGRQYXJhbSk7XG4gICAgICBzZXRCdWlsZChkZWNvZGVkKTtcbiAgICAgIC8vIEFsc28gc2F2ZSB0byBsb2NhbFN0b3JhZ2VcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShkZWNvZGVkKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAvLyBMb2FkIGZyb20gbG9jYWxTdG9yYWdlXG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICAgIHNldEJ1aWxkKHBhcnNlZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEludmFsaWQgc3RvcmVkIGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtc10pO1xuXG4gIC8vIEZldGNoIGxpdmUgcGFydHMgZnJvbSBiYWNrZW5kIChzYW1lIHNvdXJjZSBhcyAvZ3VuYnVpbGRlcilcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmdQYXJ0cyh0cnVlKTtcbiAgICAgICAgc2V0UGFydHNFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyP3BsYXRmb3JtPUFSLTE1YCxcbiAgICAgICAgICB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YVxuICAgICAgICAgIC5tYXAoKHApOiBQYXJ0IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gUEFSVF9ST0xFX1RPX0NBVEVHT1JZW3AucGFydFJvbGVdO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IHAuaWQsIC8vIGFscmVhZHkgYSBzdHJpbmcgVVVJRFxuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0UGFydHNFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZ1BhcnRzKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gR2VuZXJhdGUgc2hhcmVhYmxlIFVSTFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIE9iamVjdC5rZXlzKGJ1aWxkKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlQnVpbGRTdGF0ZShidWlsZCk7XG4gICAgICBjb25zdCB1cmwgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9ndW5idWlsZGVyL2J1aWxkP2J1aWxkPSR7ZW5jb2RlZH1gO1xuICAgICAgc2V0U2hhcmVVcmwodXJsKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFydHM6IFBhcnRbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZChcbiAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgIHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IChjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWQpLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ29weUxpbmsgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHNoYXJlVXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChzaGFyZVVybCk7XG4gICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRDb3BpZWQoZmFsc2UpLCAyMDAwKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHk6XCIsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNoYXJlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChuYXZpZ2F0b3Iuc2hhcmUgJiYgc2hhcmVVcmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG5hdmlnYXRvci5zaGFyZSh7XG4gICAgICAgICAgdGl0bGU6IFwiTXkgQVItMTUgQnVpbGRcIixcbiAgICAgICAgICB0ZXh0OiBgQ2hlY2sgb3V0IG15IEFSLTE1IGJ1aWxkOiAkJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9YCxcbiAgICAgICAgICB1cmw6IHNoYXJlVXJsLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBoYW5kbGVDb3B5TGluaygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVDb3B5TGluaygpO1xuICAgIH1cbiAgfTtcblxuICBpZiAoIWxvYWRpbmdQYXJ0cyAmJiBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy00eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgTm8gQnVpbGQgU2VsZWN0ZWRcbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy00MDAgbWItNlwiPlxuICAgICAgICAgICAgICBZb3UgbmVlZCB0byBzZWxlY3QgYXQgbGVhc3Qgb25lIHBhcnQgdG8gdmlldyB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWJsb2NrIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEdvIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTQgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAgQnVpbGQgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5TdW1tYXJ5PC9zcGFuPlxuICAgICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICAgIFJldmlldyB5b3VyIGJ1aWxkLCBwdXJjaGFzZSBwYXJ0cyBmcm9tIG91ciBhZmZpbGlhdGUgcGFydG5lcnMsIG9yXG4gICAgICAgICAgICAgICAgc2hhcmUgeW91ciBidWlsZCB3aXRoIG90aGVycy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBtZDptdC0wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+VG90YWwgQnVpbGQgUHJpY2U8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IHBhcnRzIHNlbGVjdGVkXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBTaGFyZSBTZWN0aW9uICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtYi02IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTMgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyIHNtOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgU2hhcmUgWW91ciBCdWlsZFxuICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFyZSB0aGlzIGxpbmsgdG8gbGV0IG90aGVycyB2aWV3IHlvdXIgYnVpbGQgb3IgYm9va21hcmsgaXQgdG9cbiAgICAgICAgICAgICAgICBjb21lIGJhY2sgbGF0ZXIuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTaGFyZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU2hhcmVcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5TGlua31cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3VuZGVkLW1kIGJvcmRlciBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgY29waWVkXG4gICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItZ3JlZW4tNTAwIGJnLWdyZWVuLTUwMC8xMCB0ZXh0LWdyZWVuLTQwMFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDBcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2NvcGllZCA/IFwiQ29waWVkIVwiIDogXCJDb3B5IExpbmtcIn1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7c2hhcmVVcmwgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHAtMyByb3VuZGVkLW1kIGJnLXppbmMtOTAwLzUwIGJvcmRlciBib3JkZXItemluYy04MDBcIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwIG1iLTFcIj5TaGFyZWFibGUgVVJMOjwvcD5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGJyZWFrLWFsbCBmb250LW1vbm9cIj5cbiAgICAgICAgICAgICAgICB7c2hhcmVVcmx9XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICB7LyogQnVpbGQgUGFydHMgKi99XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTQgbWQ6cC02XCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi00XCI+XG4gICAgICAgICAgICBTZWxlY3RlZCBQYXJ0c1xuICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICB7bG9hZGluZ1BhcnRzICYmIChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCBtYi00XCI+TG9hZGluZyBwYXJ0c+KApjwvcD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtwYXJ0c0Vycm9yICYmIChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwIG1iLTRcIj5cbiAgICAgICAgICAgICAge3BhcnRzRXJyb3J9IOKAlCBjaGVjayB0aGUgQmFsbGlzdGljIEFQSS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cbiAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXRlZ29yeS5pZF07XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5maW5kKFxuICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiZcbiAgICAgICAgICAgICAgICAgIHAuY2F0ZWdvcnlJZCA9PT0gKGNhdGVnb3J5LmlkIGFzIENhdGVnb3J5SWQpLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTQgYmctemluYy05MDAvMzBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTAgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj57cGFydC5icmFuZH08L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgZmxleCBnYXAtMiBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC51cmwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17cGFydC51cmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVyY2hhc2UgZnJvbSBSZXRhaWxlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy00IGgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwIDZINmEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTBhMiAyIDAgMDAyLTJ2LTRNMTQgNGg2bTAgMHY2bTAtNkwxMCAxNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnkuaWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cGFydCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICB7LyogQWN0aW9ucyAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IGZsZXggZmxleC1jb2wgZ2FwLTMgc206ZmxleC1yb3cgc206anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtNiBweS0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEVkaXQgQnVpbGRcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgICAgICAgICAgIHJvdXRlci5wdXNoKFwiL2d1bmJ1aWxkZXJcIik7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC02IHB5LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENsZWFyIEJ1aWxkXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkxpbmsiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiU1RPUkFHRV9LRVkiLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiUEFSVF9ST0xFX1RPX0NBVEVHT1JZIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwic2lnaHQiLCJlbmNvZGVCdWlsZFN0YXRlIiwiYnVpbGQiLCJlbnRyaWVzIiwiT2JqZWN0IiwiZmlsdGVyIiwiXyIsInBhcnRJZCIsIm1hcCIsImNhdGVnb3J5SWQiLCJqb2luIiwiYnRvYSIsImRlY29kZUJ1aWxkU3RhdGUiLCJlbmNvZGVkIiwiZGVjb2RlZCIsImF0b2IiLCJzcGxpdCIsImZvckVhY2giLCJlbnRyeSIsIkJ1aWxkRGV0YWlsc1BhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJzZXRCdWlsZCIsInNoYXJlVXJsIiwic2V0U2hhcmVVcmwiLCJjb3BpZWQiLCJzZXRDb3BpZWQiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZ1BhcnRzIiwic2V0TG9hZGluZ1BhcnRzIiwicGFydHNFcnJvciIsInNldFBhcnRzRXJyb3IiLCJidWlsZFBhcmFtIiwiZ2V0IiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdG9yZWQiLCJnZXRJdGVtIiwicGFyc2VkIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsInAiLCJwYXJ0Um9sZSIsImlkIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsInVybCIsImJ1eVVybCIsIm5vdGVzIiwiQm9vbGVhbiIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsImtleXMiLCJsZW5ndGgiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIm9yaWdpbiIsInNlbGVjdGVkUGFydHMiLCJmaW5kIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZUNvcHlMaW5rIiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0Iiwic2V0VGltZW91dCIsImNvbnNvbGUiLCJlcnJvciIsImhhbmRsZVNoYXJlIiwic2hhcmUiLCJ0aXRsZSIsInRleHQiLCJ0b0ZpeGVkIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJzZWN0aW9uIiwiaDIiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImNhdGVnb3J5Iiwic2VsZWN0ZWRQYXJ0SWQiLCJwYXJ0IiwiYSIsInRhcmdldCIsInJlbCIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInJlbW92ZUl0ZW0iLCJwdXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/build/page.tsx\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./data/gunbuilderParts.ts": -/*!*********************************!*\ - !*** ./data/gunbuilderParts.ts ***! - \*********************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CATEGORIES: function() { return /* binding */ CATEGORIES; },\n/* harmony export */ PARTS: function() { return /* binding */ PARTS; }\n/* harmony export */ });\nconst CATEGORIES = [\n {\n id: \"lower\",\n name: \"Lower Receiver\"\n },\n {\n id: \"upper\",\n name: \"Upper Receiver\"\n },\n {\n id: \"barrel\",\n name: \"Barrel\"\n },\n {\n id: \"handguard\",\n name: \"Handguard\"\n },\n {\n id: \"stock\",\n name: \"Stock\"\n },\n {\n id: \"optic\",\n name: \"Optic\"\n }\n];\nconst PARTS = [\n {\n id: \"lower-aero-m4e1\",\n name: \"M4E1 Stripped Lower Receiver\",\n brand: \"Aero Precision\",\n categoryId: \"lower\",\n price: 129.99,\n affiliateUrl: \"https://example.com/aero-m4e1\",\n notes: \"Forged 7075-T6, threaded bolt catch\"\n },\n {\n id: \"lower-solgw\",\n name: \"Loyal 9 Stripped Lower\",\n brand: \"Sons of Liberty Gun Works\",\n categoryId: \"lower\",\n price: 189.0,\n affiliateUrl: \"https://example.com/solgw-lower\"\n },\n {\n id: \"upper-aero-enhanced\",\n name: \"Enhanced Upper Receiver\",\n brand: \"Aero Precision\",\n categoryId: \"upper\",\n price: 149.99,\n affiliateUrl: \"https://example.com/aero-enhanced-upper\"\n },\n {\n id: \"upper-bcm-m4\",\n name: \"M4 Upper Receiver\",\n brand: \"BCM\",\n categoryId: \"upper\",\n price: 159.99,\n affiliateUrl: \"https://example.com/bcm-m4-upper\"\n },\n {\n id: \"barrel-criterion-16\",\n name: '16\" Hybrid Barrel',\n brand: \"Criterion\",\n categoryId: \"barrel\",\n price: 279.99,\n affiliateUrl: \"https://example.com/criterion-16\",\n notes: \"Mid-length gas, chrome-lined\"\n },\n {\n id: \"barrel-ba-13-9\",\n name: '13.9\" Hanson Performance Series',\n brand: \"Ballistic Advantage\",\n categoryId: \"barrel\",\n price: 209.99,\n affiliateUrl: \"https://example.com/ba-13-9\"\n },\n {\n id: \"hg-geissele-mk8\",\n name: 'MK8 Rail 13.5\"',\n brand: \"Geissele\",\n categoryId: \"handguard\",\n price: 324.99,\n affiliateUrl: \"https://example.com/geissele-mk8\"\n },\n {\n id: \"hg-centurion-c4\",\n name: 'C4 M-LOK 12\"',\n brand: \"Centurion Arms\",\n categoryId: \"handguard\",\n price: 284.99,\n affiliateUrl: \"https://example.com/centurion-c4\"\n },\n {\n id: \"stock-b5-bravo\",\n name: \"BRAVO Stock\",\n brand: \"B5 Systems\",\n categoryId: \"stock\",\n price: 74.99,\n affiliateUrl: \"https://example.com/b5-bravo\"\n },\n {\n id: \"stock-magpul-sl\",\n name: \"MOE SL Carbine Stock\",\n brand: \"Magpul\",\n categoryId: \"stock\",\n price: 69.99,\n affiliateUrl: \"https://example.com/magpul-sl\"\n },\n {\n id: \"optic-eotech-exps3\",\n name: \"EXPS3 Holographic Sight\",\n brand: \"EOTECH\",\n categoryId: \"optic\",\n price: 749.0,\n affiliateUrl: \"https://example.com/eotech-exps3\"\n },\n {\n id: \"optic-holosun-509t\",\n name: \"HE509T Red Dot\",\n brand: \"Holosun\",\n categoryId: \"optic\",\n price: 349.99,\n affiliateUrl: \"https://example.com/holosun-509t\"\n }\n];\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2RhdGEvZ3VuYnVpbGRlclBhcnRzLnRzIiwibWFwcGluZ3MiOiI7Ozs7O0FBRU8sTUFBTUEsYUFBeUI7SUFDcEM7UUFBRUMsSUFBSTtRQUFTQyxNQUFNO0lBQWlCO0lBQ3RDO1FBQUVELElBQUk7UUFBU0MsTUFBTTtJQUFpQjtJQUN0QztRQUFFRCxJQUFJO1FBQVVDLE1BQU07SUFBUztJQUMvQjtRQUFFRCxJQUFJO1FBQWFDLE1BQU07SUFBWTtJQUNyQztRQUFFRCxJQUFJO1FBQVNDLE1BQU07SUFBUTtJQUM3QjtRQUFFRCxJQUFJO1FBQVNDLE1BQU07SUFBUTtDQUM5QixDQUFDO0FBRUssTUFBTUMsUUFBZ0I7SUFDM0I7UUFDRUYsSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7UUFDZEMsT0FBTztJQUNUO0lBQ0E7UUFDRVAsSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7UUFDZEMsT0FBTztJQUNUO0lBQ0E7UUFDRVAsSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQTtRQUNFTixJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztRQUNQQyxZQUFZO1FBQ1pDLE9BQU87UUFDUEMsY0FBYztJQUNoQjtJQUNBO1FBQ0VOLElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO1FBQ1BDLFlBQVk7UUFDWkMsT0FBTztRQUNQQyxjQUFjO0lBQ2hCO0lBQ0E7UUFDRU4sSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87UUFDUEMsWUFBWTtRQUNaQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7Q0FDRCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2RhdGEvZ3VuYnVpbGRlclBhcnRzLnRzPzczYWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYXRlZ29yeSwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JJRVM6IENhdGVnb3J5W10gPSBbXG4gIHsgaWQ6IFwibG93ZXJcIiwgbmFtZTogXCJMb3dlciBSZWNlaXZlclwiIH0sXG4gIHsgaWQ6IFwidXBwZXJcIiwgbmFtZTogXCJVcHBlciBSZWNlaXZlclwiIH0sXG4gIHsgaWQ6IFwiYmFycmVsXCIsIG5hbWU6IFwiQmFycmVsXCIgfSxcbiAgeyBpZDogXCJoYW5kZ3VhcmRcIiwgbmFtZTogXCJIYW5kZ3VhcmRcIiB9LFxuICB7IGlkOiBcInN0b2NrXCIsIG5hbWU6IFwiU3RvY2tcIiB9LFxuICB7IGlkOiBcIm9wdGljXCIsIG5hbWU6IFwiT3B0aWNcIiB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IFBBUlRTOiBQYXJ0W10gPSBbXG4gIHtcbiAgICBpZDogXCJsb3dlci1hZXJvLW00ZTFcIixcbiAgICBuYW1lOiBcIk00RTEgU3RyaXBwZWQgTG93ZXIgUmVjZWl2ZXJcIixcbiAgICBicmFuZDogXCJBZXJvIFByZWNpc2lvblwiLFxuICAgIGNhdGVnb3J5SWQ6IFwibG93ZXJcIixcbiAgICBwcmljZTogMTI5Ljk5LFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2Flcm8tbTRlMVwiLFxuICAgIG5vdGVzOiBcIkZvcmdlZCA3MDc1LVQ2LCB0aHJlYWRlZCBib2x0IGNhdGNoXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJsb3dlci1zb2xnd1wiLFxuICAgIG5hbWU6IFwiTG95YWwgOSBTdHJpcHBlZCBMb3dlclwiLFxuICAgIGJyYW5kOiBcIlNvbnMgb2YgTGliZXJ0eSBHdW4gV29ya3NcIixcbiAgICBjYXRlZ29yeUlkOiBcImxvd2VyXCIsXG4gICAgcHJpY2U6IDE4OS4wLFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL3NvbGd3LWxvd2VyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ1cHBlci1hZXJvLWVuaGFuY2VkXCIsXG4gICAgbmFtZTogXCJFbmhhbmNlZCBVcHBlciBSZWNlaXZlclwiLFxuICAgIGJyYW5kOiBcIkFlcm8gUHJlY2lzaW9uXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJ1cHBlclwiLFxuICAgIHByaWNlOiAxNDkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYWVyby1lbmhhbmNlZC11cHBlclwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidXBwZXItYmNtLW00XCIsXG4gICAgbmFtZTogXCJNNCBVcHBlciBSZWNlaXZlclwiLFxuICAgIGJyYW5kOiBcIkJDTVwiLFxuICAgIGNhdGVnb3J5SWQ6IFwidXBwZXJcIixcbiAgICBwcmljZTogMTU5Ljk5LFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2JjbS1tNC11cHBlclwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYmFycmVsLWNyaXRlcmlvbi0xNlwiLFxuICAgIG5hbWU6IFwiMTZcXFwiIEh5YnJpZCBCYXJyZWxcIixcbiAgICBicmFuZDogXCJDcml0ZXJpb25cIixcbiAgICBjYXRlZ29yeUlkOiBcImJhcnJlbFwiLFxuICAgIHByaWNlOiAyNzkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vY3JpdGVyaW9uLTE2XCIsXG4gICAgbm90ZXM6IFwiTWlkLWxlbmd0aCBnYXMsIGNocm9tZS1saW5lZFwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYmFycmVsLWJhLTEzLTlcIixcbiAgICBuYW1lOiBcIjEzLjlcXFwiIEhhbnNvbiBQZXJmb3JtYW5jZSBTZXJpZXNcIixcbiAgICBicmFuZDogXCJCYWxsaXN0aWMgQWR2YW50YWdlXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJiYXJyZWxcIixcbiAgICBwcmljZTogMjA5Ljk5LFxuICAgIGFmZmlsaWF0ZVVybDogXCJodHRwczovL2V4YW1wbGUuY29tL2JhLTEzLTlcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcImhnLWdlaXNzZWxlLW1rOFwiLFxuICAgIG5hbWU6IFwiTUs4IFJhaWwgMTMuNVxcXCJcIixcbiAgICBicmFuZDogXCJHZWlzc2VsZVwiLFxuICAgIGNhdGVnb3J5SWQ6IFwiaGFuZGd1YXJkXCIsXG4gICAgcHJpY2U6IDMyNC45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9nZWlzc2VsZS1tazhcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcImhnLWNlbnR1cmlvbi1jNFwiLFxuICAgIG5hbWU6IFwiQzQgTS1MT0sgMTJcXFwiXCIsXG4gICAgYnJhbmQ6IFwiQ2VudHVyaW9uIEFybXNcIixcbiAgICBjYXRlZ29yeUlkOiBcImhhbmRndWFyZFwiLFxuICAgIHByaWNlOiAyODQuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vY2VudHVyaW9uLWM0XCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzdG9jay1iNS1icmF2b1wiLFxuICAgIG5hbWU6IFwiQlJBVk8gU3RvY2tcIixcbiAgICBicmFuZDogXCJCNSBTeXN0ZW1zXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJzdG9ja1wiLFxuICAgIHByaWNlOiA3NC45OSxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9iNS1icmF2b1wiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic3RvY2stbWFncHVsLXNsXCIsXG4gICAgbmFtZTogXCJNT0UgU0wgQ2FyYmluZSBTdG9ja1wiLFxuICAgIGJyYW5kOiBcIk1hZ3B1bFwiLFxuICAgIGNhdGVnb3J5SWQ6IFwic3RvY2tcIixcbiAgICBwcmljZTogNjkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vbWFncHVsLXNsXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJvcHRpYy1lb3RlY2gtZXhwczNcIixcbiAgICBuYW1lOiBcIkVYUFMzIEhvbG9ncmFwaGljIFNpZ2h0XCIsXG4gICAgYnJhbmQ6IFwiRU9URUNIXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJvcHRpY1wiLFxuICAgIHByaWNlOiA3NDkuMCxcbiAgICBhZmZpbGlhdGVVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9lb3RlY2gtZXhwczNcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcIm9wdGljLWhvbG9zdW4tNTA5dFwiLFxuICAgIG5hbWU6IFwiSEU1MDlUIFJlZCBEb3RcIixcbiAgICBicmFuZDogXCJIb2xvc3VuXCIsXG4gICAgY2F0ZWdvcnlJZDogXCJvcHRpY1wiLFxuICAgIHByaWNlOiAzNDkuOTksXG4gICAgYWZmaWxpYXRlVXJsOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vaG9sb3N1bi01MDl0XCIsXG4gIH0sXG5dO1xuIl0sIm5hbWVzIjpbIkNBVEVHT1JJRVMiLCJpZCIsIm5hbWUiLCJQQVJUUyIsImJyYW5kIiwiY2F0ZWdvcnlJZCIsInByaWNlIiwiYWZmaWxpYXRlVXJsIiwibm90ZXMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./data/gunbuilderParts.ts\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/add-locale.js": -/*!*****************************************************!*\ - !*** ./node_modules/next/dist/client/add-locale.js ***! - \*****************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst addLocale = function(path) {\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 (false) {}\n return path;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1sb2NhbGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs2Q0FHYUE7OztlQUFBQTs7O29EQUY4QjtBQUVwQyxNQUFNQSxZQUF1QixTQUFDQyxJQUFBQTtxQ0FBU0MsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsSUFBQUEsT0FBQUEsSUFBQUEsSUFBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7UUFBQUEsSUFBQUEsQ0FBQUEsT0FBQUEsRUFBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O0lBQzVDLElBQUlDLEtBQStCLEVBQUUsRUFJckM7SUFDQSxPQUFPRjtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2FkZC1sb2NhbGUudHM/ZmFhZSJdLCJuYW1lcyI6WyJhZGRMb2NhbGUiLCJwYXRoIiwiYXJncyIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/add-locale.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/get-domain-locale.js": -/*!************************************************************!*\ - !*** ./node_modules/next/dist/client/get-domain-locale.js ***! - \************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getDomainLocale\", ({\n enumerable: true,\n get: function() {\n return getDomainLocale;\n }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath = false || \"\";\nfunction getDomainLocale(path, locale, locales, domainLocales) {\n if (false) {} else {\n return false;\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-domain-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2dldC1kb21haW4tbG9jYWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7bURBT2dCQTs7O2VBQUFBOzs7b0RBSjJCO0FBRTNDLE1BQU1DLFdBQVdDLE1BQW1DLElBQWU7QUFFNUQsU0FBU0YsZ0JBQ2RLLElBQVksRUFDWkMsTUFBdUIsRUFDdkJDLE9BQWtCLEVBQ2xCQyxhQUE4QjtJQUU5QixJQUFJTixLQUErQixFQUFFLEVBZ0JyQyxNQUFPO1FBQ0wsT0FBTztJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvZ2V0LWRvbWFpbi1sb2NhbGUudHM/MWQ0ZSJdLCJuYW1lcyI6WyJnZXREb21haW5Mb2NhbGUiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsImxvY2FsZSIsImxvY2FsZXMiLCJkb21haW5Mb2NhbGVzIiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsIm5vcm1hbGl6ZUxvY2FsZVBhdGgiLCJyZXF1aXJlIiwiZGV0ZWN0RG9tYWluTG9jYWxlIiwidGFyZ2V0IiwiZGV0ZWN0ZWRMb2NhbGUiLCJkb21haW4iLCJ1bmRlZmluZWQiLCJwcm90byIsImh0dHAiLCJmaW5hbExvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/get-domain-locale.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/link.js": -/*!***********************************************!*\ - !*** ./node_modules/next/dist/client/link.js ***! - \***********************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _resolvehref = __webpack_require__(/*! ./resolve-href */ \"(app-pages-browser)/./node_modules/next/dist/client/resolve-href.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"(app-pages-browser)/./node_modules/next/dist/client/add-locale.js\");\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _useintersection = __webpack_require__(/*! ./use-intersection */ \"(app-pages-browser)/./node_modules/next/dist/client/use-intersection.js\");\nconst _getdomainlocale = __webpack_require__(/*! ./get-domain-locale */ \"(app-pages-browser)/./node_modules/next/dist/client/get-domain-locale.js\");\nconst _addbasepath = __webpack_require__(/*! ./add-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./components/router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst prefetched = new Set();\nfunction prefetch(router, href, as, options, appOptions, isAppRouter) {\n if (typeof window === \"undefined\") {\n return;\n }\n // app-router supports external urls out of the box so it shouldn't short-circuit here as support for e.g. `replace` is added in the app-router.\n if (!isAppRouter && !(0, _islocalurl.isLocalURL)(href)) {\n return;\n }\n // We should only dedupe requests when experimental.optimisticClientCache is\n // disabled.\n if (!options.bypassPrefetchedCheck) {\n const locale = typeof options.locale !== \"undefined\" ? options.locale : \"locale\" in router ? router.locale : undefined;\n const prefetchedKey = href + \"%\" + as + \"%\" + locale;\n // If we've already fetched the key, then don't prefetch it again!\n if (prefetched.has(prefetchedKey)) {\n return;\n }\n // Mark this URL as prefetched.\n prefetched.add(prefetchedKey);\n }\n const prefetchPromise = isAppRouter ? router.prefetch(href, appOptions) : router.prefetch(href, as, options);\n // Prefetch the JSON page if asked (only in the client)\n // We need to handle a prefetch error here since we may be\n // loading with priority which can reject but we don't\n // want to force navigation since this is only a prefetch\n Promise.resolve(prefetchPromise).catch((err)=>{\n if (true) {\n // rethrow to show invalid URL errors\n throw err;\n }\n });\n}\nfunction isModifiedEvent(event) {\n const eventTarget = event.currentTarget;\n const target = eventTarget.getAttribute(\"target\");\n return target && target !== \"_self\" || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || // triggers resource download\n event.nativeEvent && event.nativeEvent.which === 2;\n}\nfunction linkClicked(e, router, href, as, replace, shallow, scroll, locale, isAppRouter) {\n const { nodeName } = e.currentTarget;\n // anchors inside an svg have a lowercase nodeName\n const isAnchorNodeName = nodeName.toUpperCase() === \"A\";\n if (isAnchorNodeName && (isModifiedEvent(e) || // app-router supports external urls out of the box so it shouldn't short-circuit here as support for e.g. `replace` is added in the app-router.\n !isAppRouter && !(0, _islocalurl.isLocalURL)(href))) {\n // ignore click for browser’s default behavior\n return;\n }\n e.preventDefault();\n const navigate = ()=>{\n // If the router is an NextRouter instance it will have `beforePopState`\n const routerScroll = scroll != null ? scroll : true;\n if (\"beforePopState\" in router) {\n router[replace ? \"replace\" : \"push\"](href, as, {\n shallow,\n locale,\n scroll: routerScroll\n });\n } else {\n router[replace ? \"replace\" : \"push\"](as || href, {\n scroll: routerScroll\n });\n }\n };\n if (isAppRouter) {\n _react.default.startTransition(navigate);\n } else {\n navigate();\n }\n}\nfunction formatStringOrUrl(urlObjOrString) {\n if (typeof urlObjOrString === \"string\") {\n return urlObjOrString;\n }\n return (0, _formaturl.formatUrl)(urlObjOrString);\n}\n/**\n * A React component that extends the HTML `` element to provide [prefetching](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#2-prefetching)\n * and client-side navigation between routes.\n *\n * It is the primary way to navigate between routes in Next.js.\n *\n * Read more: [Next.js docs: ``](https://nextjs.org/docs/app/api-reference/components/link)\n */ const Link = /*#__PURE__*/ _s(_react.default.forwardRef(_c = _s(function LinkComponent(props, forwardedRef) {\n _s();\n let children;\n const { href: hrefProp, as: asProp, children: childrenProp, prefetch: prefetchProp = null, passHref, replace, shallow, scroll, locale, onClick, onMouseEnter: onMouseEnterProp, onTouchStart: onTouchStartProp, legacyBehavior = false, ...restProps } = props;\n children = childrenProp;\n if (legacyBehavior && (typeof children === \"string\" || typeof children === \"number\")) {\n children = /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n children: children\n });\n }\n const pagesRouter = _react.default.useContext(_routercontextsharedruntime.RouterContext);\n const appRouter = _react.default.useContext(_approutercontextsharedruntime.AppRouterContext);\n const router = pagesRouter != null ? pagesRouter : appRouter;\n // We're in the app directory if there is no pages router.\n const isAppRouter = !pagesRouter;\n const prefetchEnabled = prefetchProp !== false;\n /**\n * The possible states for prefetch are:\n * - null: this is the default \"auto\" mode, where we will prefetch partially if the link is in the viewport\n * - true: we will prefetch if the link is visible and prefetch the full page, not just partially\n * - false: we will not prefetch if in the viewport at all\n */ const appPrefetchKind = prefetchProp === null ? _routerreducertypes.PrefetchKind.AUTO : _routerreducertypes.PrefetchKind.FULL;\n if (true) {\n function createPropError(args) {\n return new Error(\"Failed prop type: The prop `\" + args.key + \"` expects a \" + args.expected + \" in ``, but got `\" + args.actual + \"` instead.\" + (typeof window !== \"undefined\" ? \"\\nOpen your browser's console to view the Component stack trace.\" : \"\"));\n }\n // TypeScript trick for type-guarding:\n const requiredPropsGuard = {\n href: true\n };\n const requiredProps = Object.keys(requiredPropsGuard);\n requiredProps.forEach((key)=>{\n if (key === \"href\") {\n if (props[key] == null || typeof props[key] !== \"string\" && typeof props[key] !== \"object\") {\n throw createPropError({\n key,\n expected: \"`string` or `object`\",\n actual: props[key] === null ? \"null\" : typeof props[key]\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = key;\n }\n });\n // TypeScript trick for type-guarding:\n const optionalPropsGuard = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n locale: true,\n onClick: true,\n onMouseEnter: true,\n onTouchStart: true,\n legacyBehavior: true\n };\n const optionalProps = Object.keys(optionalPropsGuard);\n optionalProps.forEach((key)=>{\n const valType = typeof props[key];\n if (key === \"as\") {\n if (props[key] && valType !== \"string\" && valType !== \"object\") {\n throw createPropError({\n key,\n expected: \"`string` or `object`\",\n actual: valType\n });\n }\n } else if (key === \"locale\") {\n if (props[key] && valType !== \"string\") {\n throw createPropError({\n key,\n expected: \"`string`\",\n actual: valType\n });\n }\n } else if (key === \"onClick\" || key === \"onMouseEnter\" || key === \"onTouchStart\") {\n if (props[key] && valType !== \"function\") {\n throw createPropError({\n key,\n expected: \"`function`\",\n actual: valType\n });\n }\n } else if (key === \"replace\" || key === \"scroll\" || key === \"shallow\" || key === \"passHref\" || key === \"prefetch\" || key === \"legacyBehavior\") {\n if (props[key] != null && valType !== \"boolean\") {\n throw createPropError({\n key,\n expected: \"`boolean`\",\n actual: valType\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = key;\n }\n });\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const hasWarned = _react.default.useRef(false);\n if (props.prefetch && !hasWarned.current && !isAppRouter) {\n hasWarned.current = true;\n console.warn(\"Next.js auto-prefetches automatically based on viewport. The prefetch attribute is no longer needed. More: https://nextjs.org/docs/messages/prefetch-true-deprecated\");\n }\n }\n if (true) {\n if (isAppRouter && !asProp) {\n let href;\n if (typeof hrefProp === \"string\") {\n href = hrefProp;\n } else if (typeof hrefProp === \"object\" && typeof hrefProp.pathname === \"string\") {\n href = hrefProp.pathname;\n }\n if (href) {\n const hasDynamicSegment = href.split(\"/\").some((segment)=>segment.startsWith(\"[\") && segment.endsWith(\"]\"));\n if (hasDynamicSegment) {\n throw new Error(\"Dynamic href `\" + href + \"` found in while using the `/app` router, this is not supported. Read more: https://nextjs.org/docs/messages/app-dir-dynamic-href\");\n }\n }\n }\n }\n const { href, as } = _react.default.useMemo(()=>{\n if (!pagesRouter) {\n const resolvedHref = formatStringOrUrl(hrefProp);\n return {\n href: resolvedHref,\n as: asProp ? formatStringOrUrl(asProp) : resolvedHref\n };\n }\n const [resolvedHref, resolvedAs] = (0, _resolvehref.resolveHref)(pagesRouter, hrefProp, true);\n return {\n href: resolvedHref,\n as: asProp ? (0, _resolvehref.resolveHref)(pagesRouter, asProp) : resolvedAs || resolvedHref\n };\n }, [\n pagesRouter,\n hrefProp,\n asProp\n ]);\n const previousHref = _react.default.useRef(href);\n const previousAs = _react.default.useRef(as);\n // This will return the first child, if multiple are provided it will throw an error\n let child;\n if (legacyBehavior) {\n if (true) {\n if (onClick) {\n console.warn('\"onClick\" was passed to with `href` of `' + hrefProp + '` but \"legacyBehavior\" was set. The legacy behavior requires onClick be set on the child of next/link');\n }\n if (onMouseEnterProp) {\n console.warn('\"onMouseEnter\" was passed to with `href` of `' + hrefProp + '` but \"legacyBehavior\" was set. The legacy behavior requires onMouseEnter be set on the child of next/link');\n }\n try {\n child = _react.default.Children.only(children);\n } catch (err) {\n if (!children) {\n throw new Error(\"No children were passed to with `href` of `\" + hrefProp + \"` but one child is required https://nextjs.org/docs/messages/link-no-children\");\n }\n throw new Error(\"Multiple children were passed to with `href` of `\" + hrefProp + \"` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children\" + (typeof window !== \"undefined\" ? \" \\nOpen your browser's console to view the Component stack trace.\" : \"\"));\n }\n } else {}\n } else {\n if (true) {\n if ((children == null ? void 0 : children.type) === \"a\") {\n throw new Error(\"Invalid with child. Please remove or use .\\nLearn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor\");\n }\n }\n }\n const childRef = legacyBehavior ? child && typeof child === \"object\" && child.ref : forwardedRef;\n const [setIntersectionRef, isVisible, resetVisible] = (0, _useintersection.useIntersection)({\n rootMargin: \"200px\"\n });\n const setRef = _react.default.useCallback((el)=>{\n // Before the link getting observed, check if visible state need to be reset\n if (previousAs.current !== as || previousHref.current !== href) {\n resetVisible();\n previousAs.current = as;\n previousHref.current = href;\n }\n setIntersectionRef(el);\n if (childRef) {\n if (typeof childRef === \"function\") childRef(el);\n else if (typeof childRef === \"object\") {\n childRef.current = el;\n }\n }\n }, [\n as,\n childRef,\n href,\n resetVisible,\n setIntersectionRef\n ]);\n // Prefetch the URL if we haven't already and it's visible.\n _react.default.useEffect(()=>{\n // in dev, we only prefetch on hover to avoid wasting resources as the prefetch will trigger compiling the page.\n if (true) {\n return;\n }\n if (!router) {\n return;\n }\n // If we don't need to prefetch the URL, don't do prefetch.\n if (!isVisible || !prefetchEnabled) {\n return;\n }\n // Prefetch the URL.\n prefetch(router, href, as, {\n locale\n }, {\n kind: appPrefetchKind\n }, isAppRouter);\n }, [\n as,\n href,\n isVisible,\n locale,\n prefetchEnabled,\n pagesRouter == null ? void 0 : pagesRouter.locale,\n router,\n isAppRouter,\n appPrefetchKind\n ]);\n const childProps = {\n ref: setRef,\n onClick (e) {\n if (true) {\n if (!e) {\n throw new Error('Component rendered inside next/link has to pass click event to \"onClick\" prop.');\n }\n }\n if (!legacyBehavior && typeof onClick === \"function\") {\n onClick(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onClick === \"function\") {\n child.props.onClick(e);\n }\n if (!router) {\n return;\n }\n if (e.defaultPrevented) {\n return;\n }\n linkClicked(e, router, href, as, replace, shallow, scroll, locale, isAppRouter);\n },\n onMouseEnter (e) {\n if (!legacyBehavior && typeof onMouseEnterProp === \"function\") {\n onMouseEnterProp(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onMouseEnter === \"function\") {\n child.props.onMouseEnter(e);\n }\n if (!router) {\n return;\n }\n if ((!prefetchEnabled || \"development\" === \"development\") && isAppRouter) {\n return;\n }\n prefetch(router, href, as, {\n locale,\n priority: true,\n // @see {https://github.com/vercel/next.js/discussions/40268?sort=top#discussioncomment-3572642}\n bypassPrefetchedCheck: true\n }, {\n kind: appPrefetchKind\n }, isAppRouter);\n },\n onTouchStart: false ? 0 : function onTouchStart(e) {\n if (!legacyBehavior && typeof onTouchStartProp === \"function\") {\n onTouchStartProp(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onTouchStart === \"function\") {\n child.props.onTouchStart(e);\n }\n if (!router) {\n return;\n }\n if (!prefetchEnabled && isAppRouter) {\n return;\n }\n prefetch(router, href, as, {\n locale,\n priority: true,\n // @see {https://github.com/vercel/next.js/discussions/40268?sort=top#discussioncomment-3572642}\n bypassPrefetchedCheck: true\n }, {\n kind: appPrefetchKind\n }, isAppRouter);\n }\n };\n // If child is an tag and doesn't have a href attribute, or if the 'passHref' property is\n // defined, we specify the current 'href', so that repetition is not needed by the user.\n // If the url is absolute, we can bypass the logic to prepend the domain and locale.\n if ((0, _utils.isAbsoluteUrl)(as)) {\n childProps.href = as;\n } else if (!legacyBehavior || passHref || child.type === \"a\" && !(\"href\" in child.props)) {\n const curLocale = typeof locale !== \"undefined\" ? locale : pagesRouter == null ? void 0 : pagesRouter.locale;\n // we only render domain locales if we are currently on a domain locale\n // so that locale links are still visitable in development/preview envs\n const localeDomain = (pagesRouter == null ? void 0 : pagesRouter.isLocaleDomain) && (0, _getdomainlocale.getDomainLocale)(as, curLocale, pagesRouter == null ? void 0 : pagesRouter.locales, pagesRouter == null ? void 0 : pagesRouter.domainLocales);\n childProps.href = localeDomain || (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, curLocale, pagesRouter == null ? void 0 : pagesRouter.defaultLocale));\n }\n return legacyBehavior ? /*#__PURE__*/ _react.default.cloneElement(child, childProps) : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n ...restProps,\n ...childProps,\n children: children\n });\n}, \"wKD5mb5mk47bkaStGb/Fvd6RWZE=\")), \"wKD5mb5mk47bkaStGb/Fvd6RWZE=\");\n_c1 = Link;\nconst _default = Link;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=link.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"Link$_react.default.forwardRef\");\n$RefreshReg$(_c1, \"Link\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2xpbmsuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7NkJBUzRCQSx5QkFBQUMsQ0FBQSxDQUFBQyxtQkFBQUEsQ0FBQTt5Q0FDRDt3Q0FDRDt1Q0FDSTs7Ozt1Q0FRRUEsbUJBQUFBLENBQUE7NkNBQ0E7NkNBQ0o7O0FBMkY1QixNQUFNQyxzQkFBaUJDLG1CQUFBQSxDQUFBQSwrSkFBQUE7QUFVdkIsTUFBQUQsYUFDRUUsSUFBQUE7U0FPSUMsU0FBT0MsTUFBQUEsRUFBV0MsSUFBQSxFQUFBQyxFQUFBLEVBQUFDLE9BQWEsRUFBQUMsVUFBQSxFQUFBQyxXQUFBO1FBQ2pDLE9BQUFMLFdBQUE7UUFDRjtJQUVBO0lBQ0EsZ0pBQXVDO1FBQ3JDLENBQUFLLGVBQUEsS0FBQUMsWUFBQUMsVUFBQSxFQUFBTixPQUFBO1FBQ0Y7SUFFQTtJQUNBLDRFQUFZO0lBQ1osWUFBS0U7UUFDSCxDQUFBQSxRQUFNSyxxQkFDSjtRQUNBLE1BQUFBLFNBT0YsT0FBTUMsUUFBQUEsTUFBQUEsS0FBZ0JSLGNBQWtCRSxRQUFNSyxNQUFBQSxHQUFBQSxZQUFBQSxTQUFBQSxPQUFBQSxNQUFBQSxHQUFBQTtRQUU5QyxNQUFBQyxnQkFBQVIsT0FBQSxNQUFBQyxLQUFBLE1BQUFNO1FBQ0Esa0VBQW1DO1lBQ2pDWixXQUFBYyxHQUFBLENBQUFELGdCQUFBO1lBQ0Y7UUFFQTtRQUNBYiwrQkFBZWE7UUFDakJiLFdBQUFlLEdBQUEsQ0FBQUY7SUFFQTtJQUlBLE1BQUFHLGtCQUFBUCxjQUFBUCxPQUFBQyxRQUFBLENBQUFFLE1BQXVERyxjQUFBTixPQUFBQyxRQUFBLENBQUFFLE1BQUFDLElBQUFDO0lBQ3ZEO0lBQ0EsMERBQXNEO0lBQ3REO0lBQ0FVLHlEQUF3Q0M7WUFDbENDLE9BQUFBLENBQVFDLGlCQUFpQkMsS0FBQSxFQUFBSDtZQUMzQkMsSUFBQSxFQUFxQztZQUNyQyxxQ0FBTUQ7WUFD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QUFBdEMsT0FBQXlCLGNBQUEsa0JBQUFjLFlBQUFDLEdBQUE7UUFBRyxHQUFHZixTQUFBQTtxQkFDbkIxRTs7SUFHUCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9saW5rLnRzeD9hY2YwIl0sIm5hbWVzIjpbIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsIl8iLCJyZXF1aXJlIiwicHJlZmV0Y2hlZCIsIlNldCIsInJvdXRlciIsInByZWZldGNoIiwid2luZG93IiwiaHJlZiIsImFzIiwib3B0aW9ucyIsImFwcE9wdGlvbnMiLCJpc0FwcFJvdXRlciIsIl9pc2xvY2FsdXJsIiwiaXNMb2NhbFVSTCIsImxvY2FsZSIsInByZWZldGNoZWRLZXkiLCJoYXMiLCJhZGQiLCJwcmVmZXRjaFByb21pc2UiLCJQcm9taXNlIiwiZXJyIiwicHJvY2VzcyIsImVudiIsImNhdGNoIiwiaXNNb2RpZmllZEV2ZW50IiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwidGFyZ2V0IiwiZXZlbnRUYXJnZXQiLCJuYXRpdmVFdmVudCIsIndoaWNoIiwibWV0YUtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsImFsdEtleSIsImxpbmtDbGlja2VkIiwiZSIsInJlcGxhY2UiLCJzaGFsbG93Iiwic2Nyb2xsIiwibm9kZU5hbWUiLCJpc0FuY2hvck5vZGVOYW1lIiwicHJldmVudERlZmF1bHQiLCJuYXZpZ2F0ZSIsInJvdXRlclNjcm9sbCIsIlJlYWN0IiwiX3JlYWN0IiwiZGVmYXVsdCIsInN0YXJ0VHJhbnNpdGlvbiIsImZvcm1hdFN0cmluZ09yVXJsIiwidXJsT2JqT3JTdHJpbmciLCJfZm9ybWF0dXJsIiwiZm9ybWF0VXJsIiwiY2hpbGRyZW4iLCJjaGlsZHJlblByb3AiLCJsZWdhY3lCZWhhdmlvciIsImEiLCJhcHBSb3V0ZXIiLCJ1c2VDb250ZXh0IiwiQXBwUm91dGVyQ29udGV4dCIsInBhZ2VzUm91dGVyIiwicHJlZmV0Y2hFbmFibGVkIiwicHJlZmV0Y2hQcm9wIiwiX3JvdXRlcnJlZHVjZXJ0eXBlcyIsIlByZWZldGNoS2luZCIsIkFVVE8iLCJGVUxMIiwiYXJncyIsImNyZWF0ZVByb3BFcnJvciIsIkVycm9yIiwia2V5IiwiZXhwZWN0ZWQiLCJhY3R1YWwiLCJyZXF1aXJlZFByb3BzIiwiT2JqZWN0IiwicHJvcHMiLCJwYXNzSHJlZiIsIm9uQ2xpY2siLCJvbk1vdXNlRW50ZXIiLCJvblRvdWNoU3RhcnQiLCJvcHRpb25hbFByb3BzIiwidmFsVHlwZSIsImhhc1dhcm5lZCIsImN1cnJlbnQiLCJjb25zb2xlIiwid2FybiIsImFzUHJvcCIsImhyZWZQcm9wIiwicGF0aG5hbWUiLCJoYXNEeW5hbWljU2VnbWVudCIsInNwbGl0Iiwic29tZSIsInNlZ21lbnQiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJ1c2VNZW1vIiwicmVzb2x2ZWRIcmVmIiwicmVzb2x2ZWRBcyIsIl9yZXNvbHZlaHJlZiIsInJlc29sdmVIcmVmIiwicHJldmlvdXNBcyIsInVzZVJlZiIsImNoaWxkIiwiTk9ERV9FTlYiLCJDaGlsZHJlbiIsIm9ubHkiLCJ0eXBlIiwiY2hpbGRSZWYiLCJzZXRJbnRlcnNlY3Rpb25SZWYiLCJpc1Zpc2libGUiLCJyZXNldFZpc2libGUiLCJ1c2VJbnRlcnNlY3Rpb24iLCJyb290TWFyZ2luIiwiX3VzZWludGVyc2VjdGlvbiIsInNldFJlZiIsInVzZUNhbGxiYWNrIiwiZWwiLCJwcmV2aW91c0hyZWYiLCJ1c2VFZmZlY3QiLCJhcHBQcmVmZXRjaEtpbmQiLCJyZWYiLCJkZWZhdWx0UHJldmVudGVkIiwib25Nb3VzZUVudGVyUHJvcCIsInByaW9yaXR5IiwiYnlwYXNzUHJlZmV0Y2hlZENoZWNrIiwib25Ub3VjaFN0YXJ0UHJvcCIsInVuZGVmaW5lZCIsImNoaWxkUHJvcHMiLCJjdXJMb2NhbGUiLCJpc0xvY2FsZURvbWFpbiIsImxvY2FsZURvbWFpbiIsImFkZEJhc2VQYXRoIiwiYWRkTG9jYWxlIiwiX2dldGRvbWFpbmxvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJsb2NhbGVzIiwiZG9tYWluTG9jYWxlcyIsIl9hZGRiYXNlcGF0aCIsIl9hZGRsb2NhbGUiLCJyZXN0UHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJfanN4cnVudGltZSIsImpzeCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/link.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/request-idle-callback.js": -/*!****************************************************************!*\ - !*** ./node_modules/next/dist/client/request-idle-callback.js ***! - \****************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n cancelIdleCallback: function() {\n return cancelIdleCallback;\n },\n requestIdleCallback: function() {\n return requestIdleCallback;\n }\n});\nconst requestIdleCallback = typeof self !== \"undefined\" && self.requestIdleCallback && self.requestIdleCallback.bind(window) || function(cb) {\n let start = Date.now();\n return self.setTimeout(function() {\n cb({\n didTimeout: false,\n timeRemaining: function() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n};\nconst cancelIdleCallback = typeof self !== \"undefined\" && self.cancelIdleCallback && self.cancelIdleCallback.bind(window) || function(id) {\n return clearTimeout(id);\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=request-idle-callback.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlcXVlc3QtaWRsZS1jYWxsYmFjay5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFnQmFBLG9CQUFrQjtlQUFsQkE7O0lBaEJBQyxxQkFBbUI7ZUFBbkJBOzs7QUFBTixNQUFNQSxzQkFDWCxPQUFRQyxTQUFTLGVBQ2ZBLEtBQUtELG1CQUFtQixJQUN4QkMsS0FBS0QsbUJBQW1CLENBQUNFLElBQUksQ0FBQ0MsV0FDaEMsU0FBVUMsRUFBdUI7SUFDL0IsSUFBSUMsUUFBUUMsS0FBS0MsR0FBRztJQUNwQixPQUFPTixLQUFLTyxVQUFVLENBQUM7UUFDckJKLEdBQUc7WUFDREssWUFBWTtZQUNaQyxlQUFlO2dCQUNiLE9BQU9DLEtBQUtDLEdBQUcsQ0FBQyxHQUFHLEtBQU1OLENBQUFBLEtBQUtDLEdBQUcsS0FBS0YsS0FBQUE7WUFDeEM7UUFDRjtJQUNGLEdBQUc7QUFDTDtBQUVLLE1BQU1OLHFCQUNYLE9BQVFFLFNBQVMsZUFDZkEsS0FBS0Ysa0JBQWtCLElBQ3ZCRSxLQUFLRixrQkFBa0IsQ0FBQ0csSUFBSSxDQUFDQyxXQUMvQixTQUFVVSxFQUFVO0lBQ2xCLE9BQU9DLGFBQWFEO0FBQ3RCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L3JlcXVlc3QtaWRsZS1jYWxsYmFjay50cz8wNWY0Il0sIm5hbWVzIjpbImNhbmNlbElkbGVDYWxsYmFjayIsInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJzZWxmIiwiYmluZCIsIndpbmRvdyIsImNiIiwic3RhcnQiLCJEYXRlIiwibm93Iiwic2V0VGltZW91dCIsImRpZFRpbWVvdXQiLCJ0aW1lUmVtYWluaW5nIiwiTWF0aCIsIm1heCIsImlkIiwiY2xlYXJUaW1lb3V0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/request-idle-callback.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/resolve-href.js": -/*!*******************************************************!*\ - !*** ./node_modules/next/dist/client/resolve-href.js ***! - \*******************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"resolveHref\", ({\n enumerable: true,\n get: function() {\n return resolveHref;\n }\n}));\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _omit = __webpack_require__(/*! ../shared/lib/router/utils/omit */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _utils1 = __webpack_require__(/*! ../shared/lib/router/utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nfunction resolveHref(router, href, resolveAs) {\n // we use a dummy base url for relative urls\n let base;\n let urlAsString = typeof href === \"string\" ? href : (0, _formaturl.formatWithValidation)(href);\n // repeated slashes and backslashes in the URL are considered\n // invalid and will never match a Next.js page/file\n const urlProtoMatch = urlAsString.match(/^[a-zA-Z]{1,}:\\/\\//);\n const urlAsStringNoProto = urlProtoMatch ? urlAsString.slice(urlProtoMatch[0].length) : urlAsString;\n const urlParts = urlAsStringNoProto.split(\"?\", 1);\n if ((urlParts[0] || \"\").match(/(\\/\\/|\\\\)/)) {\n console.error(\"Invalid href '\" + urlAsString + \"' passed to next/router in page: '\" + router.pathname + \"'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.\");\n const normalizedUrl = (0, _utils.normalizeRepeatedSlashes)(urlAsStringNoProto);\n urlAsString = (urlProtoMatch ? urlProtoMatch[0] : \"\") + normalizedUrl;\n }\n // Return because it cannot be routed by the Next.js router\n if (!(0, _islocalurl.isLocalURL)(urlAsString)) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n try {\n base = new URL(urlAsString.startsWith(\"#\") ? router.asPath : router.pathname, \"http://n\");\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n base = new URL(\"/\", \"http://n\");\n }\n try {\n const finalUrl = new URL(urlAsString, base);\n finalUrl.pathname = (0, _normalizetrailingslash.normalizePathTrailingSlash)(finalUrl.pathname);\n let interpolatedAs = \"\";\n if ((0, _utils1.isDynamicRoute)(finalUrl.pathname) && finalUrl.searchParams && resolveAs) {\n const query = (0, _querystring.searchParamsToUrlQuery)(finalUrl.searchParams);\n const { result, params } = (0, _interpolateas.interpolateAs)(finalUrl.pathname, finalUrl.pathname, query);\n if (result) {\n interpolatedAs = (0, _formaturl.formatWithValidation)({\n pathname: result,\n hash: finalUrl.hash,\n query: (0, _omit.omit)(query, params)\n });\n }\n }\n // if the origin didn't change, it means we received a relative href\n const resolvedHref = finalUrl.origin === base.origin ? finalUrl.href.slice(finalUrl.origin.length) : finalUrl.href;\n return resolveAs ? [\n resolvedHref,\n interpolatedAs || resolvedHref\n ] : resolvedHref;\n } catch (_) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=resolve-href.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3Jlc29sdmUtaHJlZi5qcyIsIm1hcHBpbmdzIjoiOzs7OytDQXlCZ0JBOzs7ZUFBQUE7Ozt5Q0F2QnVCO3VDQUNGO2tDQUNoQjttQ0FDb0I7b0RBQ0U7d0NBQ2hCO29DQUNJOzJDQUNEO0FBZ0J2QixTQUFTQSxZQUNkQyxNQUFrQixFQUNsQkMsSUFBUyxFQUNUQyxTQUFtQjtJQUVuQiw0Q0FBNEM7SUFDNUMsSUFBSUM7SUFDSixJQUFJQyxjQUFjLE9BQU9ILFNBQVMsV0FBV0EsT0FBT0ksQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQW9CLEVBQUNKO0lBRXpFLDZEQUE2RDtJQUM3RCxtREFBbUQ7SUFDbkQsTUFBTUssZ0JBQWdCRixZQUFZRyxLQUFLLENBQUM7SUFDeEMsTUFBTUMscUJBQXFCRixnQkFDdkJGLFlBQVlLLEtBQUssQ0FBQ0gsYUFBYSxDQUFDLEVBQUUsQ0FBQ0ksTUFBTSxJQUN6Q047SUFFSixNQUFNTyxXQUFXSCxtQkFBbUJJLEtBQUssQ0FBQyxLQUFLO0lBRS9DLElBQUksQ0FBQ0QsUUFBUSxDQUFDLEVBQUUsSUFBSSxJQUFJSixLQUFLLENBQUMsY0FBYztRQUMxQ00sUUFBUUMsS0FBSyxDQUNYLG1CQUFpQlYsY0FBWSx1Q0FBb0NKLE9BQU9lLFFBQVEsR0FBQztRQUVuRixNQUFNQyxnQkFBZ0JDLENBQUFBLEdBQUFBLE9BQUFBLHdCQUF3QixFQUFDVDtRQUMvQ0osY0FBYyxDQUFDRSxnQkFBZ0JBLGFBQWEsQ0FBQyxFQUFFLEdBQUcsTUFBTVU7SUFDMUQ7SUFFQSwyREFBMkQ7SUFDM0QsSUFBSSxDQUFDRSxDQUFBQSxHQUFBQSxZQUFBQSxVQUFVLEVBQUNkLGNBQWM7UUFDNUIsT0FBUUYsWUFBWTtZQUFDRTtTQUFZLEdBQUdBO0lBQ3RDO0lBRUEsSUFBSTtRQUNGRCxPQUFPLElBQUlnQixJQUNUZixZQUFZZ0IsVUFBVSxDQUFDLE9BQU9wQixPQUFPcUIsTUFBTSxHQUFHckIsT0FBT2UsUUFBUSxFQUM3RDtJQUVKLEVBQUUsT0FBT08sR0FBRztRQUNWLGtEQUFrRDtRQUNsRG5CLE9BQU8sSUFBSWdCLElBQUksS0FBSztJQUN0QjtJQUVBLElBQUk7UUFDRixNQUFNSSxXQUFXLElBQUlKLElBQUlmLGFBQWFEO1FBQ3RDb0IsU0FBU1IsUUFBUSxHQUFHUyxDQUFBQSxHQUFBQSx3QkFBQUEsMEJBQTBCLEVBQUNELFNBQVNSLFFBQVE7UUFDaEUsSUFBSVUsaUJBQWlCO1FBRXJCLElBQ0VDLENBQUFBLEdBQUFBLFFBQUFBLGNBQWMsRUFBQ0gsU0FBU1IsUUFBUSxLQUNoQ1EsU0FBU0ksWUFBWSxJQUNyQnpCLFdBQ0E7WUFDQSxNQUFNMEIsUUFBUUMsQ0FBQUEsR0FBQUEsYUFBQUEsc0JBQXNCLEVBQUNOLFNBQVNJLFlBQVk7WUFFMUQsTUFBTSxFQUFFRyxNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFhLEVBQ3RDVCxTQUFTUixRQUFRLEVBQ2pCUSxTQUFTUixRQUFRLEVBQ2pCYTtZQUdGLElBQUlFLFFBQVE7Z0JBQ1ZMLGlCQUFpQnBCLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFvQixFQUFDO29CQUNwQ1UsVUFBVWU7b0JBQ1ZHLE1BQU1WLFNBQVNVLElBQUk7b0JBQ25CTCxPQUFPTSxDQUFBQSxHQUFBQSxNQUFBQSxJQUFJLEVBQUNOLE9BQU9HO2dCQUNyQjtZQUNGO1FBQ0Y7UUFFQSxvRUFBb0U7UUFDcEUsTUFBTUksZUFDSlosU0FBU2EsTUFBTSxLQUFLakMsS0FBS2lDLE1BQU0sR0FDM0JiLFNBQVN0QixJQUFJLENBQUNRLEtBQUssQ0FBQ2MsU0FBU2EsTUFBTSxDQUFDMUIsTUFBTSxJQUMxQ2EsU0FBU3RCLElBQUk7UUFFbkIsT0FBT0MsWUFDSDtZQUFDaUM7WUFBY1Ysa0JBQWtCVTtTQUFhLEdBQzlDQTtJQUNOLEVBQUUsT0FBT2IsR0FBRztRQUNWLE9BQU9wQixZQUFZO1lBQUNFO1NBQVksR0FBR0E7SUFDckM7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9yZXNvbHZlLWhyZWYudHM/ZTZkMiJdLCJuYW1lcyI6WyJyZXNvbHZlSHJlZiIsInJvdXRlciIsImhyZWYiLCJyZXNvbHZlQXMiLCJiYXNlIiwidXJsQXNTdHJpbmciLCJmb3JtYXRXaXRoVmFsaWRhdGlvbiIsInVybFByb3RvTWF0Y2giLCJtYXRjaCIsInVybEFzU3RyaW5nTm9Qcm90byIsInNsaWNlIiwibGVuZ3RoIiwidXJsUGFydHMiLCJzcGxpdCIsImNvbnNvbGUiLCJlcnJvciIsInBhdGhuYW1lIiwibm9ybWFsaXplZFVybCIsIm5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyIsImlzTG9jYWxVUkwiLCJVUkwiLCJzdGFydHNXaXRoIiwiYXNQYXRoIiwiXyIsImZpbmFsVXJsIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJpbnRlcnBvbGF0ZWRBcyIsImlzRHluYW1pY1JvdXRlIiwic2VhcmNoUGFyYW1zIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwicmVzdWx0IiwicGFyYW1zIiwiaW50ZXJwb2xhdGVBcyIsImhhc2giLCJvbWl0IiwicmVzb2x2ZWRIcmVmIiwib3JpZ2luIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/resolve-href.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/client/use-intersection.js": -/*!***********************************************************!*\ - !*** ./node_modules/next/dist/client/use-intersection.js ***! - \***********************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useIntersection\", ({\n enumerable: true,\n get: function() {\n return useIntersection;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"(app-pages-browser)/./node_modules/next/dist/client/request-idle-callback.js\");\nconst hasIntersectionObserver = typeof IntersectionObserver === \"function\";\nconst observers = new Map();\nconst idList = [];\nfunction createObserver(options) {\n const id = {\n root: options.root || null,\n margin: options.rootMargin || \"\"\n };\n const existing = idList.find((obj)=>obj.root === id.root && obj.margin === id.margin);\n let instance;\n if (existing) {\n instance = observers.get(existing);\n if (instance) {\n return instance;\n }\n }\n const elements = new Map();\n const observer = new IntersectionObserver((entries)=>{\n entries.forEach((entry)=>{\n const callback = elements.get(entry.target);\n const isVisible = entry.isIntersecting || entry.intersectionRatio > 0;\n if (callback && isVisible) {\n callback(isVisible);\n }\n });\n }, options);\n instance = {\n id,\n observer,\n elements\n };\n idList.push(id);\n observers.set(id, instance);\n return instance;\n}\nfunction observe(element, callback, options) {\n const { id, observer, elements } = createObserver(options);\n elements.set(element, callback);\n observer.observe(element);\n return function unobserve() {\n elements.delete(element);\n observer.unobserve(element);\n // Destroy observer when there's nothing left to watch:\n if (elements.size === 0) {\n observer.disconnect();\n observers.delete(id);\n const index = idList.findIndex((obj)=>obj.root === id.root && obj.margin === id.margin);\n if (index > -1) {\n idList.splice(index, 1);\n }\n }\n };\n}\nfunction useIntersection(param) {\n let { rootRef, rootMargin, disabled } = param;\n const isDisabled = disabled || !hasIntersectionObserver;\n const [visible, setVisible] = (0, _react.useState)(false);\n const elementRef = (0, _react.useRef)(null);\n const setElement = (0, _react.useCallback)((element)=>{\n elementRef.current = element;\n }, []);\n (0, _react.useEffect)(()=>{\n if (hasIntersectionObserver) {\n if (isDisabled || visible) return;\n const element = elementRef.current;\n if (element && element.tagName) {\n const unobserve = observe(element, (isVisible)=>isVisible && setVisible(isVisible), {\n root: rootRef == null ? void 0 : rootRef.current,\n rootMargin\n });\n return unobserve;\n }\n } else {\n if (!visible) {\n const idleCallback = (0, _requestidlecallback.requestIdleCallback)(()=>setVisible(true));\n return ()=>(0, _requestidlecallback.cancelIdleCallback)(idleCallback);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isDisabled,\n rootMargin,\n rootRef,\n visible,\n elementRef.current\n ]);\n const resetVisible = (0, _react.useCallback)(()=>{\n setVisible(false);\n }, []);\n return [\n setElement,\n visible,\n resetVisible\n ];\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-intersection.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3VzZS1pbnRlcnNlY3Rpb24uanMiLCJtYXBwaW5ncyI6Ijs7OzttREErRmdCQTs7O2VBQUFBOzs7bUNBL0Z5QztpREFJbEQ7QUFxQlAsTUFBTUMsMEJBQTBCLE9BQU9DLHlCQUF5QjtBQUVoRSxNQUFNQyxZQUFZLElBQUlDO0FBQ3RCLE1BQU1DLFNBQXVCLEVBQUU7QUFFL0IsU0FBU0MsZUFBZUMsT0FBb0M7SUFDMUQsTUFBTUMsS0FBSztRQUNUQyxNQUFNRixRQUFRRSxJQUFJLElBQUk7UUFDdEJDLFFBQVFILFFBQVFJLFVBQVUsSUFBSTtJQUNoQztJQUNBLE1BQU1DLFdBQVdQLE9BQU9RLElBQUksQ0FDMUIsQ0FBQ0MsTUFBUUEsSUFBSUwsSUFBSSxLQUFLRCxHQUFHQyxJQUFJLElBQUlLLElBQUlKLE1BQU0sS0FBS0YsR0FBR0UsTUFBTTtJQUUzRCxJQUFJSztJQUVKLElBQUlILFVBQVU7UUFDWkcsV0FBV1osVUFBVWEsR0FBRyxDQUFDSjtRQUN6QixJQUFJRyxVQUFVO1lBQ1osT0FBT0E7UUFDVDtJQUNGO0lBRUEsTUFBTUUsV0FBVyxJQUFJYjtJQUNyQixNQUFNYyxXQUFXLElBQUloQixxQkFBcUIsQ0FBQ2lCO1FBQ3pDQSxRQUFRQyxPQUFPLENBQUMsQ0FBQ0M7WUFDZixNQUFNQyxXQUFXTCxTQUFTRCxHQUFHLENBQUNLLE1BQU1FLE1BQU07WUFDMUMsTUFBTUMsWUFBWUgsTUFBTUksY0FBYyxJQUFJSixNQUFNSyxpQkFBaUIsR0FBRztZQUNwRSxJQUFJSixZQUFZRSxXQUFXO2dCQUN6QkYsU0FBU0U7WUFDWDtRQUNGO0lBQ0YsR0FBR2pCO0lBQ0hRLFdBQVc7UUFDVFA7UUFDQVU7UUFDQUQ7SUFDRjtJQUVBWixPQUFPc0IsSUFBSSxDQUFDbkI7SUFDWkwsVUFBVXlCLEdBQUcsQ0FBQ3BCLElBQUlPO0lBQ2xCLE9BQU9BO0FBQ1Q7QUFFQSxTQUFTYyxRQUNQQyxPQUFnQixFQUNoQlIsUUFBeUIsRUFDekJmLE9BQW9DO0lBRXBDLE1BQU0sRUFBRUMsRUFBRSxFQUFFVSxRQUFRLEVBQUVELFFBQVEsRUFBRSxHQUFHWCxlQUFlQztJQUNsRFUsU0FBU1csR0FBRyxDQUFDRSxTQUFTUjtJQUV0QkosU0FBU1csT0FBTyxDQUFDQztJQUNqQixPQUFPLFNBQVNDO1FBQ2RkLFNBQVNlLE1BQU0sQ0FBQ0Y7UUFDaEJaLFNBQVNhLFNBQVMsQ0FBQ0Q7UUFFbkIsdURBQXVEO1FBQ3ZELElBQUliLFNBQVNnQixJQUFJLEtBQUssR0FBRztZQUN2QmYsU0FBU2dCLFVBQVU7WUFDbkIvQixVQUFVNkIsTUFBTSxDQUFDeEI7WUFDakIsTUFBTTJCLFFBQVE5QixPQUFPK0IsU0FBUyxDQUM1QixDQUFDdEIsTUFBUUEsSUFBSUwsSUFBSSxLQUFLRCxHQUFHQyxJQUFJLElBQUlLLElBQUlKLE1BQU0sS0FBS0YsR0FBR0UsTUFBTTtZQUUzRCxJQUFJeUIsUUFBUSxDQUFDLEdBQUc7Z0JBQ2Q5QixPQUFPZ0MsTUFBTSxDQUFDRixPQUFPO1lBQ3ZCO1FBQ0Y7SUFDRjtBQUNGO0FBRU8sU0FBU25DLGdCQUFtQ3NDLEtBSWpDO0lBSmlDLE1BQ2pEQyxPQUFPLEVBQ1A1QixVQUFVLEVBQ1Y2QixRQUFRLEVBQ1EsR0FKaUNGO0lBS2pELE1BQU1HLGFBQXNCRCxZQUFZLENBQUN2QztJQUV6QyxNQUFNLENBQUN5QyxTQUFTQyxXQUFXLEdBQUdDLENBQUFBLEdBQUFBLE9BQUFBLFFBQVEsRUFBQztJQUN2QyxNQUFNQyxhQUFhQyxDQUFBQSxHQUFBQSxPQUFBQSxNQUFNLEVBQVc7SUFDcEMsTUFBTUMsYUFBYUMsQ0FBQUEsR0FBQUEsT0FBQUEsV0FBVyxFQUFDLENBQUNsQjtRQUM5QmUsV0FBV0ksT0FBTyxHQUFHbkI7SUFDdkIsR0FBRyxFQUFFO0lBRUxvQixDQUFBQSxHQUFBQSxPQUFBQSxTQUFTLEVBQUM7UUFDUixJQUFJakQseUJBQXlCO1lBQzNCLElBQUl3QyxjQUFjQyxTQUFTO1lBRTNCLE1BQU1aLFVBQVVlLFdBQVdJLE9BQU87WUFDbEMsSUFBSW5CLFdBQVdBLFFBQVFxQixPQUFPLEVBQUU7Z0JBQzlCLE1BQU1wQixZQUFZRixRQUNoQkMsU0FDQSxDQUFDTixZQUFjQSxhQUFhbUIsV0FBV25CLFlBQ3ZDO29CQUFFZixNQUFNOEIsV0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsUUFBU1UsT0FBTztvQkFBRXRDO2dCQUFXO2dCQUd2QyxPQUFPb0I7WUFDVDtRQUNGLE9BQU87WUFDTCxJQUFJLENBQUNXLFNBQVM7Z0JBQ1osTUFBTVUsZUFBZUMsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFtQixFQUFDLElBQU1WLFdBQVc7Z0JBQzFELE9BQU8sSUFBTVcsQ0FBQUEsR0FBQUEscUJBQUFBLGtCQUFrQixFQUFDRjtZQUNsQztRQUNGO0lBQ0EsdURBQXVEO0lBQ3pELEdBQUc7UUFBQ1g7UUFBWTlCO1FBQVk0QjtRQUFTRztRQUFTRyxXQUFXSSxPQUFPO0tBQUM7SUFFakUsTUFBTU0sZUFBZVAsQ0FBQUEsR0FBQUEsT0FBQUEsV0FBVyxFQUFDO1FBQy9CTCxXQUFXO0lBQ2IsR0FBRyxFQUFFO0lBRUwsT0FBTztRQUFDSTtRQUFZTDtRQUFTYTtLQUFhO0FBQzVDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L3VzZS1pbnRlcnNlY3Rpb24udHN4PzU3ZWUiXSwibmFtZXMiOlsidXNlSW50ZXJzZWN0aW9uIiwiaGFzSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmVycyIsIk1hcCIsImlkTGlzdCIsImNyZWF0ZU9ic2VydmVyIiwib3B0aW9ucyIsImlkIiwicm9vdCIsIm1hcmdpbiIsInJvb3RNYXJnaW4iLCJleGlzdGluZyIsImZpbmQiLCJvYmoiLCJpbnN0YW5jZSIsImdldCIsImVsZW1lbnRzIiwib2JzZXJ2ZXIiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImVudHJ5IiwiY2FsbGJhY2siLCJ0YXJnZXQiLCJpc1Zpc2libGUiLCJpc0ludGVyc2VjdGluZyIsImludGVyc2VjdGlvblJhdGlvIiwicHVzaCIsInNldCIsIm9ic2VydmUiLCJlbGVtZW50IiwidW5vYnNlcnZlIiwiZGVsZXRlIiwic2l6ZSIsImRpc2Nvbm5lY3QiLCJpbmRleCIsImZpbmRJbmRleCIsInNwbGljZSIsInBhcmFtIiwicm9vdFJlZiIsImRpc2FibGVkIiwiaXNEaXNhYmxlZCIsInZpc2libGUiLCJzZXRWaXNpYmxlIiwidXNlU3RhdGUiLCJlbGVtZW50UmVmIiwidXNlUmVmIiwic2V0RWxlbWVudCIsInVzZUNhbGxiYWNrIiwiY3VycmVudCIsInVzZUVmZmVjdCIsInRhZ05hbWUiLCJpZGxlQ2FsbGJhY2siLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwiY2FuY2VsSWRsZUNhbGxiYWNrIiwicmVzZXRWaXNpYmxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/use-intersection.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js": -/*!************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/escape-regexp.js ***! - \************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("// regexp is based on https://github.com/sindresorhus/escape-string-regexp\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"escapeStringRegexp\", ({\n enumerable: true,\n get: function() {\n return escapeStringRegexp;\n }\n}));\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/;\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g;\nfunction escapeStringRegexp(str) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, \"\\\\$&\");\n }\n return str;\n} //# sourceMappingURL=escape-regexp.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lc2NhcGUtcmVnZXhwLmpzIiwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTs7Ozs7c0RBSTFEQTs7O2VBQUFBOzs7QUFIaEIsTUFBTUMsY0FBYztBQUNwQixNQUFNQyxrQkFBa0I7QUFFakIsU0FBU0YsbUJBQW1CRyxHQUFXO0lBQzVDLCtHQUErRztJQUMvRyxJQUFJRixZQUFZRyxJQUFJLENBQUNELE1BQU07UUFDekIsT0FBT0EsSUFBSUUsT0FBTyxDQUFDSCxpQkFBaUI7SUFDdEM7SUFDQSxPQUFPQztBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9lc2NhcGUtcmVnZXhwLnRzP2RjYjEiXSwibmFtZXMiOlsiZXNjYXBlU3RyaW5nUmVnZXhwIiwicmVIYXNSZWdFeHAiLCJyZVJlcGxhY2VSZWdFeHAiLCJzdHIiLCJ0ZXN0IiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js": -/*!****************************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router-context.shared-runtime.js ***! - \****************************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouterContext\", ({\n enumerable: true,\n get: function() {\n return RouterContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst RouterContext = _react.default.createContext(null);\nif (true) {\n RouterContext.displayName = \"RouterContext\";\n} //# sourceMappingURL=router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQUdhQTs7O2VBQUFBOzs7OzRFQUhLO0FBR1gsTUFBTUEsZ0JBQWdCQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBb0I7QUFFcEUsSUFBSUMsSUFBeUIsRUFBYztJQUN6Q0gsY0FBY0ksV0FBVyxHQUFHO0FBQzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS50cz82MzZjIl0sIm5hbWVzIjpbIlJvdXRlckNvbnRleHQiLCJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js": -/*!**********************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/format-url.js ***! - \**********************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n formatUrl: function() {\n return formatUrl;\n },\n formatWithValidation: function() {\n return formatWithValidation;\n },\n urlObjectKeys: function() {\n return urlObjectKeys;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./querystring */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\"));\nconst slashedProtocols = /https?|ftp|gopher|file/;\nfunction formatUrl(urlObj) {\n let { auth, hostname } = urlObj;\n let protocol = urlObj.protocol || \"\";\n let pathname = urlObj.pathname || \"\";\n let hash = urlObj.hash || \"\";\n let query = urlObj.query || \"\";\n let host = false;\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, \":\") + \"@\" : \"\";\n if (urlObj.host) {\n host = auth + urlObj.host;\n } else if (hostname) {\n host = auth + (~hostname.indexOf(\":\") ? \"[\" + hostname + \"]\" : hostname);\n if (urlObj.port) {\n host += \":\" + urlObj.port;\n }\n }\n if (query && typeof query === \"object\") {\n query = String(_querystring.urlQueryToSearchParams(query));\n }\n let search = urlObj.search || query && \"?\" + query || \"\";\n if (protocol && !protocol.endsWith(\":\")) protocol += \":\";\n if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {\n host = \"//\" + (host || \"\");\n if (pathname && pathname[0] !== \"/\") pathname = \"/\" + pathname;\n } else if (!host) {\n host = \"\";\n }\n if (hash && hash[0] !== \"#\") hash = \"#\" + hash;\n if (search && search[0] !== \"?\") search = \"?\" + search;\n pathname = pathname.replace(/[?#]/g, encodeURIComponent);\n search = search.replace(\"#\", \"%23\");\n return \"\" + protocol + host + pathname + search + hash;\n}\nconst urlObjectKeys = [\n \"auth\",\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"slashes\"\n];\nfunction formatWithValidation(url) {\n if (true) {\n if (url !== null && typeof url === \"object\") {\n Object.keys(url).forEach((key)=>{\n if (!urlObjectKeys.includes(key)) {\n console.warn(\"Unknown key passed via urlObject into url.format: \" + key);\n }\n });\n }\n }\n return formatUrl(url);\n} //# sourceMappingURL=format-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybC5qcyIsIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUM7QUFDdkMsc0RBQXNEO0FBQ3RELEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLHNFQUFzRTtBQUN0RSxzRUFBc0U7QUFDdEUsNEVBQTRFO0FBQzVFLHFFQUFxRTtBQUNyRSx3QkFBd0I7QUFDeEIsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSw2REFBNkQ7QUFDN0QsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLHlDQUF5Qzs7Ozs7Ozs7Ozs7OztJQVF6QkEsV0FBUztlQUFUQTs7SUE2REFDLHNCQUFvQjtlQUFwQkE7O0lBZkhDLGVBQWE7ZUFBYkE7Ozs7bUZBbERnQjtBQUU3QixNQUFNQyxtQkFBbUI7QUFFbEIsU0FBU0gsVUFBVUksTUFBaUI7SUFDekMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRSxHQUFHRjtJQUN6QixJQUFJRyxXQUFXSCxPQUFPRyxRQUFRLElBQUk7SUFDbEMsSUFBSUMsV0FBV0osT0FBT0ksUUFBUSxJQUFJO0lBQ2xDLElBQUlDLE9BQU9MLE9BQU9LLElBQUksSUFBSTtJQUMxQixJQUFJQyxRQUFRTixPQUFPTSxLQUFLLElBQUk7SUFDNUIsSUFBSUMsT0FBdUI7SUFFM0JOLE9BQU9BLE9BQU9PLG1CQUFtQlAsTUFBTVEsT0FBTyxDQUFDLFFBQVEsT0FBTyxNQUFNO0lBRXBFLElBQUlULE9BQU9PLElBQUksRUFBRTtRQUNmQSxPQUFPTixPQUFPRCxPQUFPTyxJQUFJO0lBQzNCLE9BQU8sSUFBSUwsVUFBVTtRQUNuQkssT0FBT04sT0FBUSxFQUFDQyxTQUFTUSxPQUFPLENBQUMsT0FBTyxNQUFJUixXQUFTLE1BQUtBLFFBQUFBO1FBQzFELElBQUlGLE9BQU9XLElBQUksRUFBRTtZQUNmSixRQUFRLE1BQU1QLE9BQU9XLElBQUk7UUFDM0I7SUFDRjtJQUVBLElBQUlMLFNBQVMsT0FBT0EsVUFBVSxVQUFVO1FBQ3RDQSxRQUFRTSxPQUFPQyxhQUFZQyxzQkFBc0IsQ0FBQ1I7SUFDcEQ7SUFFQSxJQUFJUyxTQUFTZixPQUFPZSxNQUFNLElBQUtULFNBQVMsTUFBSUEsU0FBWTtJQUV4RCxJQUFJSCxZQUFZLENBQUNBLFNBQVNhLFFBQVEsQ0FBQyxNQUFNYixZQUFZO0lBRXJELElBQ0VILE9BQU9pQixPQUFPLElBQ2IsQ0FBQyxDQUFDZCxZQUFZSixpQkFBaUJtQixJQUFJLENBQUNmLFNBQUFBLEtBQWNJLFNBQVMsT0FDNUQ7UUFDQUEsT0FBTyxPQUFRQSxDQUFBQSxRQUFRO1FBQ3ZCLElBQUlILFlBQVlBLFFBQVEsQ0FBQyxFQUFFLEtBQUssS0FBS0EsV0FBVyxNQUFNQTtJQUN4RCxPQUFPLElBQUksQ0FBQ0csTUFBTTtRQUNoQkEsT0FBTztJQUNUO0lBRUEsSUFBSUYsUUFBUUEsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLQSxPQUFPLE1BQU1BO0lBQzFDLElBQUlVLFVBQVVBLE1BQU0sQ0FBQyxFQUFFLEtBQUssS0FBS0EsU0FBUyxNQUFNQTtJQUVoRFgsV0FBV0EsU0FBU0ssT0FBTyxDQUFDLFNBQVNEO0lBQ3JDTyxTQUFTQSxPQUFPTixPQUFPLENBQUMsS0FBSztJQUU3QixPQUFPLEtBQUdOLFdBQVdJLE9BQU9ILFdBQVdXLFNBQVNWO0FBQ2xEO0FBRU8sTUFBTVAsZ0JBQWdCO0lBQzNCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRU0sU0FBU0QscUJBQXFCc0IsR0FBYztJQUNqRCxJQUFJQyxJQUF5QixFQUFlO1FBQzFDLElBQUlELFFBQVEsUUFBUSxPQUFPQSxRQUFRLFVBQVU7WUFDM0NFLE9BQU9DLElBQUksQ0FBQ0gsS0FBS0ksT0FBTyxDQUFDLENBQUNDO2dCQUN4QixJQUFJLENBQUMxQixjQUFjMkIsUUFBUSxDQUFDRCxNQUFNO29CQUNoQ0UsUUFBUUMsSUFBSSxDQUNWLHVEQUFxREg7Z0JBRXpEO1lBQ0Y7UUFDRjtJQUNGO0lBRUEsT0FBTzVCLFVBQVV1QjtBQUNuQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwudHM/NTJiMSJdLCJuYW1lcyI6WyJmb3JtYXRVcmwiLCJmb3JtYXRXaXRoVmFsaWRhdGlvbiIsInVybE9iamVjdEtleXMiLCJzbGFzaGVkUHJvdG9jb2xzIiwidXJsT2JqIiwiYXV0aCIsImhvc3RuYW1lIiwicHJvdG9jb2wiLCJwYXRobmFtZSIsImhhc2giLCJxdWVyeSIsImhvc3QiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwiaW5kZXhPZiIsInBvcnQiLCJTdHJpbmciLCJxdWVyeXN0cmluZyIsInVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMiLCJzZWFyY2giLCJlbmRzV2l0aCIsInNsYXNoZXMiLCJ0ZXN0IiwidXJsIiwicHJvY2VzcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiaW5jbHVkZXMiLCJjb25zb2xlIiwid2FybiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js": -/*!*****************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/index.js ***! - \*****************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getSortedRoutes: function() {\n return _sortedroutes.getSortedRoutes;\n },\n isDynamicRoute: function() {\n return _isdynamic.isDynamicRoute;\n }\n});\nconst _sortedroutes = __webpack_require__(/*! ./sorted-routes */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\");\nconst _isdynamic = __webpack_require__(/*! ./is-dynamic */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\"); //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQVNBLGlCQUFlO2VBQWZBLGNBQUFBLGVBQWU7O0lBQ2ZDLGdCQUFjO2VBQWRBLFdBQUFBLGNBQWM7OzswQ0FEUzt1Q0FDRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2luZGV4LnRzPzkxMmIiXSwibmFtZXMiOlsiZ2V0U29ydGVkUm91dGVzIiwiaXNEeW5hbWljUm91dGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js": -/*!**************************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js ***! - \**************************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"interpolateAs\", ({\n enumerable: true,\n get: function() {\n return interpolateAs;\n }\n}));\nconst _routematcher = __webpack_require__(/*! ./route-matcher */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./route-regex */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction interpolateAs(route, asPathname, query) {\n let interpolatedRoute = \"\";\n const dynamicRegex = (0, _routeregex.getRouteRegex)(route);\n const dynamicGroups = dynamicRegex.groups;\n const dynamicMatches = (asPathname !== route ? (0, _routematcher.getRouteMatcher)(dynamicRegex)(asPathname) : \"\") || // Fall back to reading the values from the href\n // TODO: should this take priority; also need to change in the router.\n query;\n interpolatedRoute = route;\n const params = Object.keys(dynamicGroups);\n if (!params.every((param)=>{\n let value = dynamicMatches[param] || \"\";\n const { repeat, optional } = dynamicGroups[param];\n // support single-level catch-all\n // TODO: more robust handling for user-error (passing `/`)\n let replaced = \"[\" + (repeat ? \"...\" : \"\") + param + \"]\";\n if (optional) {\n replaced = (!value ? \"/\" : \"\") + \"[\" + replaced + \"]\";\n }\n if (repeat && !Array.isArray(value)) value = [\n value\n ];\n return (optional || param in dynamicMatches) && // Interpolate group into data URL if present\n (interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map(// path delimiter escaped since they are being inserted\n // into the URL and we expect URL encoded segments\n // when parsing dynamic route params\n (segment)=>encodeURIComponent(segment)).join(\"/\") : encodeURIComponent(value)) || \"/\");\n })) {\n interpolatedRoute = \"\" // did not satisfy all requirements\n ;\n // n.b. We ignore this error because we handle warning for this case in\n // development in the `` component directly.\n }\n return {\n params,\n result: interpolatedRoute\n };\n} //# sourceMappingURL=interpolate-as.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJwb2xhdGUtYXMuanMiLCJtYXBwaW5ncyI6Ijs7OztpREFLZ0JBOzs7ZUFBQUE7OzswQ0FIZ0I7d0NBQ0Y7QUFFdkIsU0FBU0EsY0FDZEMsS0FBYSxFQUNiQyxVQUFrQixFQUNsQkMsS0FBcUI7SUFFckIsSUFBSUMsb0JBQW9CO0lBRXhCLE1BQU1DLGVBQWVDLENBQUFBLEdBQUFBLFlBQUFBLGFBQWEsRUFBQ0w7SUFDbkMsTUFBTU0sZ0JBQWdCRixhQUFhRyxNQUFNO0lBQ3pDLE1BQU1DLGlCQUVIUCxDQUFBQSxlQUFlRCxRQUFRUyxDQUFBQSxHQUFBQSxjQUFBQSxlQUFlLEVBQUNMLGNBQWNILGNBQWMsT0FDcEUsZ0RBQWdEO0lBQ2hELHNFQUFzRTtJQUN0RUM7SUFFRkMsb0JBQW9CSDtJQUNwQixNQUFNVSxTQUFTQyxPQUFPQyxJQUFJLENBQUNOO0lBRTNCLElBQ0UsQ0FBQ0ksT0FBT0csS0FBSyxDQUFDLENBQUNDO1FBQ2IsSUFBSUMsUUFBUVAsY0FBYyxDQUFDTSxNQUFNLElBQUk7UUFDckMsTUFBTSxFQUFFRSxNQUFNLEVBQUVDLFFBQVEsRUFBRSxHQUFHWCxhQUFhLENBQUNRLE1BQU07UUFFakQsaUNBQWlDO1FBQ2pDLDBEQUEwRDtRQUMxRCxJQUFJSSxXQUFXLE1BQUlGLENBQUFBLFNBQVMsUUFBUSxNQUFLRixRQUFNO1FBQy9DLElBQUlHLFVBQVU7WUFDWkMsV0FBVyxDQUFHLENBQUNILFFBQVEsTUFBTSxNQUFHLE1BQUdHLFdBQVM7UUFDOUM7UUFDQSxJQUFJRixVQUFVLENBQUNHLE1BQU1DLE9BQU8sQ0FBQ0wsUUFBUUEsUUFBUTtZQUFDQTtTQUFNO1FBRXBELE9BQ0UsQ0FBQ0UsWUFBWUgsU0FBU04sY0FBQUEsS0FDdEIsNkNBQTZDO1FBQzVDTCxDQUFBQSxvQkFDQ0Esa0JBQW1Ca0IsT0FBTyxDQUN4QkgsVUFDQUYsU0FDSUQsTUFDR08sR0FBRyxDQUVGLHVEQUF1RDtRQUN2RCxrREFBa0Q7UUFDbEQsb0NBQW9DO1FBQ3BDLENBQUNDLFVBQVlDLG1CQUFtQkQsVUFFakNFLElBQUksQ0FBQyxPQUNSRCxtQkFBbUJULFdBQ3BCO0lBRVgsSUFDQTtRQUNBWixvQkFBb0IsR0FBRyxtQ0FBbUM7O0lBRTFELHVFQUF1RTtJQUN2RSxrREFBa0Q7SUFDcEQ7SUFDQSxPQUFPO1FBQ0xPO1FBQ0FnQixRQUFRdkI7SUFDVjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJwb2xhdGUtYXMudHM/ODUyZCJdLCJuYW1lcyI6WyJpbnRlcnBvbGF0ZUFzIiwicm91dGUiLCJhc1BhdGhuYW1lIiwicXVlcnkiLCJpbnRlcnBvbGF0ZWRSb3V0ZSIsImR5bmFtaWNSZWdleCIsImdldFJvdXRlUmVnZXgiLCJkeW5hbWljR3JvdXBzIiwiZ3JvdXBzIiwiZHluYW1pY01hdGNoZXMiLCJnZXRSb3V0ZU1hdGNoZXIiLCJwYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwiZXZlcnkiLCJwYXJhbSIsInZhbHVlIiwicmVwZWF0Iiwib3B0aW9uYWwiLCJyZXBsYWNlZCIsIkFycmF5IiwiaXNBcnJheSIsInJlcGxhY2UiLCJtYXAiLCJzZWdtZW50IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsInJlc3VsdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js": -/*!**********************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js ***! - \**********************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isDynamicRoute\", ({\n enumerable: true,\n get: function() {\n return isDynamicRoute;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"(app-pages-browser)/./node_modules/next/dist/server/future/helpers/interception-routes.js\");\n// Identify /[param]/ in route string\nconst TEST_ROUTE = /\\/\\[[^/]+?\\](?=\\/|$)/;\nfunction isDynamicRoute(route) {\n if ((0, _interceptionroutes.isInterceptionRouteAppPath)(route)) {\n route = (0, _interceptionroutes.extractInterceptionRouteInformation)(route).interceptedRoute;\n }\n return TEST_ROUTE.test(route);\n} //# sourceMappingURL=is-dynamic.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy5qcyIsIm1hcHBpbmdzIjoiOzs7O2tEQVFnQkE7OztlQUFBQTs7O2dEQUxUO0FBRVAscUNBQXFDO0FBQ3JDLE1BQU1DLGFBQWE7QUFFWixTQUFTRCxlQUFlRSxLQUFhO0lBQzFDLElBQUlDLENBQUFBLEdBQUFBLG9CQUFBQSwwQkFBMEIsRUFBQ0QsUUFBUTtRQUNyQ0EsUUFBUUUsQ0FBQUEsR0FBQUEsb0JBQUFBLG1DQUFtQyxFQUFDRixPQUFPRyxnQkFBZ0I7SUFDckU7SUFFQSxPQUFPSixXQUFXSyxJQUFJLENBQUNKO0FBQ3pCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy50cz8xNDY1Il0sIm5hbWVzIjpbImlzRHluYW1pY1JvdXRlIiwiVEVTVF9ST1VURSIsInJvdXRlIiwiaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgiLCJleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbiIsImludGVyY2VwdGVkUm91dGUiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js": -/*!************************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/is-local-url.js ***! - \************************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isLocalURL\", ({\n enumerable: true,\n get: function() {\n return isLocalURL;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../../client/has-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\");\nfunction isLocalURL(url) {\n // prevent a hydration mismatch on href for url with anchor refs\n if (!(0, _utils.isAbsoluteUrl)(url)) return true;\n try {\n // absolute urls can be local if they are on the same origin\n const locationOrigin = (0, _utils.getLocationOrigin)();\n const resolved = new URL(url, locationOrigin);\n return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);\n } catch (_) {\n return false;\n }\n} //# sourceMappingURL=is-local-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsLmpzIiwibWFwcGluZ3MiOiI7Ozs7OENBTWdCQTs7O2VBQUFBOzs7bUNBTmlDO3lDQUNyQjtBQUtyQixTQUFTQSxXQUFXQyxHQUFXO0lBQ3BDLGdFQUFnRTtJQUNoRSxJQUFJLENBQUNDLENBQUFBLEdBQUFBLE9BQUFBLGFBQWEsRUFBQ0QsTUFBTSxPQUFPO0lBQ2hDLElBQUk7UUFDRiw0REFBNEQ7UUFDNUQsTUFBTUUsaUJBQWlCQyxDQUFBQSxHQUFBQSxPQUFBQSxpQkFBaUI7UUFDeEMsTUFBTUMsV0FBVyxJQUFJQyxJQUFJTCxLQUFLRTtRQUM5QixPQUFPRSxTQUFTRSxNQUFNLEtBQUtKLGtCQUFrQkssQ0FBQUEsR0FBQUEsYUFBQUEsV0FBVyxFQUFDSCxTQUFTSSxRQUFRO0lBQzVFLEVBQUUsT0FBT0MsR0FBRztRQUNWLE9BQU87SUFDVDtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsLnRzP2UxYzIiXSwibmFtZXMiOlsiaXNMb2NhbFVSTCIsInVybCIsImlzQWJzb2x1dGVVcmwiLCJsb2NhdGlvbk9yaWdpbiIsImdldExvY2F0aW9uT3JpZ2luIiwicmVzb2x2ZWQiLCJVUkwiLCJvcmlnaW4iLCJoYXNCYXNlUGF0aCIsInBhdGhuYW1lIiwiXyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js": -/*!****************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/omit.js ***! - \****************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"omit\", ({\n enumerable: true,\n get: function() {\n return omit;\n }\n}));\nfunction omit(object, keys) {\n const omitted = {};\n Object.keys(object).forEach((key)=>{\n if (!keys.includes(key)) {\n omitted[key] = object[key];\n }\n });\n return omitted;\n} //# sourceMappingURL=omit.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvb21pdC5qcyIsIm1hcHBpbmdzIjoiOzs7O3dDQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsS0FDZEMsTUFBUyxFQUNUQyxJQUFTO0lBRVQsTUFBTUMsVUFBc0MsQ0FBQztJQUM3Q0MsT0FBT0YsSUFBSSxDQUFDRCxRQUFRSSxPQUFPLENBQUMsQ0FBQ0M7UUFDM0IsSUFBSSxDQUFDSixLQUFLSyxRQUFRLENBQUNELE1BQVc7WUFDNUJILE9BQU8sQ0FBQ0csSUFBSSxHQUFHTCxNQUFNLENBQUNLLElBQUk7UUFDNUI7SUFDRjtJQUNBLE9BQU9IO0FBQ1QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9vbWl0LnRzP2Y3ZWEiXSwibmFtZXMiOlsib21pdCIsIm9iamVjdCIsImtleXMiLCJvbWl0dGVkIiwiT2JqZWN0IiwiZm9yRWFjaCIsImtleSIsImluY2x1ZGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js": -/*!***********************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/querystring.js ***! - \***********************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n assign: function() {\n return assign;\n },\n searchParamsToUrlQuery: function() {\n return searchParamsToUrlQuery;\n },\n urlQueryToSearchParams: function() {\n return urlQueryToSearchParams;\n }\n});\nfunction searchParamsToUrlQuery(searchParams) {\n const query = {};\n searchParams.forEach((value, key)=>{\n if (typeof query[key] === \"undefined\") {\n query[key] = value;\n } else if (Array.isArray(query[key])) {\n query[key].push(value);\n } else {\n query[key] = [\n query[key],\n value\n ];\n }\n });\n return query;\n}\nfunction stringifyUrlQueryParam(param) {\n if (typeof param === \"string\" || typeof param === \"number\" && !isNaN(param) || typeof param === \"boolean\") {\n return String(param);\n } else {\n return \"\";\n }\n}\nfunction urlQueryToSearchParams(urlQuery) {\n const result = new URLSearchParams();\n Object.entries(urlQuery).forEach((param)=>{\n let [key, value] = param;\n if (Array.isArray(value)) {\n value.forEach((item)=>result.append(key, stringifyUrlQueryParam(item)));\n } else {\n result.set(key, stringifyUrlQueryParam(value));\n }\n });\n return result;\n}\nfunction assign(target) {\n for(var _len = arguments.length, searchParamsList = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n searchParamsList[_key - 1] = arguments[_key];\n }\n searchParamsList.forEach((searchParams)=>{\n Array.from(searchParams.keys()).forEach((key)=>target.delete(key));\n searchParams.forEach((value, key)=>target.append(key, value));\n });\n return target;\n} //# sourceMappingURL=querystring.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBNENnQkEsUUFBTTtlQUFOQTs7SUExQ0FDLHdCQUFzQjtlQUF0QkE7O0lBNEJBQyx3QkFBc0I7ZUFBdEJBOzs7QUE1QlQsU0FBU0QsdUJBQ2RFLFlBQTZCO0lBRTdCLE1BQU1DLFFBQXdCLENBQUM7SUFDL0JELGFBQWFFLE9BQU8sQ0FBQyxDQUFDQyxPQUFPQztRQUMzQixJQUFJLE9BQU9ILEtBQUssQ0FBQ0csSUFBSSxLQUFLLGFBQWE7WUFDckNILEtBQUssQ0FBQ0csSUFBSSxHQUFHRDtRQUNmLE9BQU8sSUFBSUUsTUFBTUMsT0FBTyxDQUFDTCxLQUFLLENBQUNHLElBQUksR0FBRztZQUNsQ0gsS0FBSyxDQUFDRyxJQUFJLENBQWNHLElBQUksQ0FBQ0o7UUFDakMsT0FBTztZQUNMRixLQUFLLENBQUNHLElBQUksR0FBRztnQkFBQ0gsS0FBSyxDQUFDRyxJQUFJO2dCQUFZRDthQUFNO1FBQzVDO0lBQ0Y7SUFDQSxPQUFPRjtBQUNUO0FBRUEsU0FBU08sdUJBQXVCQyxLQUFjO0lBQzVDLElBQ0UsT0FBT0EsVUFBVSxZQUNoQixPQUFPQSxVQUFVLFlBQVksQ0FBQ0MsTUFBTUQsVUFDckMsT0FBT0EsVUFBVSxXQUNqQjtRQUNBLE9BQU9FLE9BQU9GO0lBQ2hCLE9BQU87UUFDTCxPQUFPO0lBQ1Q7QUFDRjtBQUVPLFNBQVNWLHVCQUNkYSxRQUF3QjtJQUV4QixNQUFNQyxTQUFTLElBQUlDO0lBQ25CQyxPQUFPQyxPQUFPLENBQUNKLFVBQVVWLE9BQU8sQ0FBQyxDQUFBTztZQUFDLENBQUNMLEtBQUtELE1BQU0sR0FBQU07UUFDNUMsSUFBSUosTUFBTUMsT0FBTyxDQUFDSCxRQUFRO1lBQ3hCQSxNQUFNRCxPQUFPLENBQUMsQ0FBQ2UsT0FBU0osT0FBT0ssTUFBTSxDQUFDZCxLQUFLSSx1QkFBdUJTO1FBQ3BFLE9BQU87WUFDTEosT0FBT00sR0FBRyxDQUFDZixLQUFLSSx1QkFBdUJMO1FBQ3pDO0lBQ0Y7SUFDQSxPQUFPVTtBQUNUO0FBRU8sU0FBU2hCLE9BQ2R1QixNQUF1QjtJQUN2QixRQUFBQyxPQUFBQyxVQUFBQyxNQUFBLEVBQUFDLG1CQUFBLElBQUFuQixNQUFBZ0IsT0FBQSxJQUFBQSxPQUFBLFFBQUFJLE9BQUEsR0FBQUEsT0FBQUosTUFBQUksT0FBQTtRQUFHRCxnQkFBQUEsQ0FBSEMsT0FBQSxLQUFBSCxTQUFBLENBQUFHLEtBQXNDOztJQUV0Q0QsaUJBQWlCdEIsT0FBTyxDQUFDLENBQUNGO1FBQ3hCSyxNQUFNcUIsSUFBSSxDQUFDMUIsYUFBYTJCLElBQUksSUFBSXpCLE9BQU8sQ0FBQyxDQUFDRSxNQUFRZ0IsT0FBT1EsTUFBTSxDQUFDeEI7UUFDL0RKLGFBQWFFLE9BQU8sQ0FBQyxDQUFDQyxPQUFPQyxNQUFRZ0IsT0FBT0YsTUFBTSxDQUFDZCxLQUFLRDtJQUMxRDtJQUNBLE9BQU9pQjtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcudHM/NTIxNSJdLCJuYW1lcyI6WyJhc3NpZ24iLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInNlYXJjaFBhcmFtcyIsInF1ZXJ5IiwiZm9yRWFjaCIsInZhbHVlIiwia2V5IiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsInN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0iLCJwYXJhbSIsImlzTmFOIiwiU3RyaW5nIiwidXJsUXVlcnkiLCJyZXN1bHQiLCJVUkxTZWFyY2hQYXJhbXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiaXRlbSIsImFwcGVuZCIsInNldCIsInRhcmdldCIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzZWFyY2hQYXJhbXNMaXN0IiwiX2tleSIsImZyb20iLCJrZXlzIiwiZGVsZXRlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js": -/*!*************************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/route-matcher.js ***! - \*************************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getRouteMatcher\", ({\n enumerable: true,\n get: function() {\n return getRouteMatcher;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nfunction getRouteMatcher(param) {\n let { re, groups } = param;\n return (pathname)=>{\n const routeMatch = re.exec(pathname);\n if (!routeMatch) {\n return false;\n }\n const decode = (param)=>{\n try {\n return decodeURIComponent(param);\n } catch (_) {\n throw new _utils.DecodeError(\"failed to decode param\");\n }\n };\n const params = {};\n Object.keys(groups).forEach((slugName)=>{\n const g = groups[slugName];\n const m = routeMatch[g.pos];\n if (m !== undefined) {\n params[slugName] = ~m.indexOf(\"/\") ? m.split(\"/\").map((entry)=>decode(entry)) : g.repeat ? [\n decode(m)\n ] : decode(m);\n }\n });\n return params;\n };\n} //# sourceMappingURL=route-matcher.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2hlci5qcyIsIm1hcHBpbmdzIjoiOzs7O21EQVdnQkE7OztlQUFBQTs7O21DQVZZO0FBVXJCLFNBQVNBLGdCQUFnQkMsS0FBMEI7SUFBMUIsTUFBRUMsRUFBRSxFQUFFQyxNQUFNLEVBQWMsR0FBMUJGO0lBQzlCLE9BQU8sQ0FBQ0c7UUFDTixNQUFNQyxhQUFhSCxHQUFHSSxJQUFJLENBQUNGO1FBQzNCLElBQUksQ0FBQ0MsWUFBWTtZQUNmLE9BQU87UUFDVDtRQUVBLE1BQU1FLFNBQVMsQ0FBQ047WUFDZCxJQUFJO2dCQUNGLE9BQU9PLG1CQUFtQlA7WUFDNUIsRUFBRSxPQUFPUSxHQUFHO2dCQUNWLE1BQU0sSUFBSUMsT0FBQUEsV0FBVyxDQUFDO1lBQ3hCO1FBQ0Y7UUFDQSxNQUFNQyxTQUFxRCxDQUFDO1FBRTVEQyxPQUFPQyxJQUFJLENBQUNWLFFBQVFXLE9BQU8sQ0FBQyxDQUFDQztZQUMzQixNQUFNQyxJQUFJYixNQUFNLENBQUNZLFNBQVM7WUFDMUIsTUFBTUUsSUFBSVosVUFBVSxDQUFDVyxFQUFFRSxHQUFHLENBQUM7WUFDM0IsSUFBSUQsTUFBTUUsV0FBVztnQkFDbkJSLE1BQU0sQ0FBQ0ksU0FBUyxHQUFHLENBQUNFLEVBQUVHLE9BQU8sQ0FBQyxPQUMxQkgsRUFBRUksS0FBSyxDQUFDLEtBQUtDLEdBQUcsQ0FBQyxDQUFDQyxRQUFVaEIsT0FBT2dCLFVBQ25DUCxFQUFFUSxNQUFNLEdBQ1I7b0JBQUNqQixPQUFPVTtpQkFBRyxHQUNYVixPQUFPVTtZQUNiO1FBQ0Y7UUFDQSxPQUFPTjtJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1tYXRjaGVyLnRzP2JlZmYiXSwibmFtZXMiOlsiZ2V0Um91dGVNYXRjaGVyIiwicGFyYW0iLCJyZSIsImdyb3VwcyIsInBhdGhuYW1lIiwicm91dGVNYXRjaCIsImV4ZWMiLCJkZWNvZGUiLCJkZWNvZGVVUklDb21wb25lbnQiLCJfIiwiRGVjb2RlRXJyb3IiLCJwYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInNsdWdOYW1lIiwiZyIsIm0iLCJwb3MiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwic3BsaXQiLCJtYXAiLCJlbnRyeSIsInJlcGVhdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js": -/*!***********************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/route-regex.js ***! - \***********************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getNamedMiddlewareRegex: function() {\n return getNamedMiddlewareRegex;\n },\n getNamedRouteRegex: function() {\n return getNamedRouteRegex;\n },\n getRouteRegex: function() {\n return getRouteRegex;\n }\n});\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"(app-pages-browser)/./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst NEXT_QUERY_PARAM_PREFIX = \"nxtP\";\nconst NEXT_INTERCEPTION_MARKER_PREFIX = \"nxtI\";\n/**\n * Parses a given parameter from a route to a data structure that can be used\n * to generate the parametrized route. Examples:\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n */ function parseParameter(param) {\n const optional = param.startsWith(\"[\") && param.endsWith(\"]\");\n if (optional) {\n param = param.slice(1, -1);\n }\n const repeat = param.startsWith(\"...\");\n if (repeat) {\n param = param.slice(3);\n }\n return {\n key: param,\n repeat,\n optional\n };\n}\nfunction getParametrizedRoute(route) {\n const segments = (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split(\"/\");\n const groups = {};\n let groupIndex = 1;\n return {\n parameterizedRoute: segments.map((segment)=>{\n const markerMatch = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n const paramMatches = segment.match(/\\[((?:\\[.*\\])|.+)\\]/) // Check for parameters\n ;\n if (markerMatch && paramMatches) {\n const { key, optional, repeat } = parseParameter(paramMatches[1]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(markerMatch) + \"([^/]+?)\";\n } else if (paramMatches) {\n const { key, repeat, optional } = parseParameter(paramMatches[1]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n return repeat ? optional ? \"(?:/(.+?))?\" : \"/(.+?)\" : \"/([^/]+?)\";\n } else {\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(segment);\n }\n }).join(\"\"),\n groups\n };\n}\nfunction getRouteRegex(normalizedRoute) {\n const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute);\n return {\n re: new RegExp(\"^\" + parameterizedRoute + \"(?:/)?$\"),\n groups: groups\n };\n}\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */ function buildGetSafeRouteKey() {\n let i = 0;\n return ()=>{\n let routeKey = \"\";\n let j = ++i;\n while(j > 0){\n routeKey += String.fromCharCode(97 + (j - 1) % 26);\n j = Math.floor((j - 1) / 26);\n }\n return routeKey;\n };\n}\nfunction getSafeKeyFromSegment(param) {\n let { interceptionMarker, getSafeRouteKey, segment, routeKeys, keyPrefix } = param;\n const { key, optional, repeat } = parseParameter(segment);\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, \"\");\n if (keyPrefix) {\n cleanedKey = \"\" + keyPrefix + cleanedKey;\n }\n let invalidKey = false;\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true;\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true;\n }\n if (invalidKey) {\n cleanedKey = getSafeRouteKey();\n }\n if (keyPrefix) {\n routeKeys[cleanedKey] = \"\" + keyPrefix + key;\n } else {\n routeKeys[cleanedKey] = key;\n }\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker ? (0, _escaperegexp.escapeStringRegexp)(interceptionMarker) : \"\";\n return repeat ? optional ? \"(?:/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">.+?))?\" : \"/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">.+?)\" : \"/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">[^/]+?)\";\n}\nfunction getNamedParametrizedRoute(route, prefixRouteKeys) {\n const segments = (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split(\"/\");\n const getSafeRouteKey = buildGetSafeRouteKey();\n const routeKeys = {};\n return {\n namedParameterizedRoute: segments.map((segment)=>{\n const hasInterceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m));\n const paramMatches = segment.match(/\\[((?:\\[.*\\])|.+)\\]/) // Check for parameters\n ;\n if (hasInterceptionMarker && paramMatches) {\n const [usedMarker] = segment.split(paramMatches[0]);\n return getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: usedMarker,\n segment: paramMatches[1],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n });\n } else if (paramMatches) {\n return getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[1],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined\n });\n } else {\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(segment);\n }\n }).join(\"\"),\n routeKeys\n };\n}\nfunction getNamedRouteRegex(normalizedRoute, prefixRouteKey) {\n const result = getNamedParametrizedRoute(normalizedRoute, prefixRouteKey);\n return {\n ...getRouteRegex(normalizedRoute),\n namedRegex: \"^\" + result.namedParameterizedRoute + \"(?:/)?$\",\n routeKeys: result.routeKeys\n };\n}\nfunction getNamedMiddlewareRegex(normalizedRoute, options) {\n const { parameterizedRoute } = getParametrizedRoute(normalizedRoute);\n const { catchAll = true } = options;\n if (parameterizedRoute === \"/\") {\n let catchAllRegex = catchAll ? \".*\" : \"\";\n return {\n namedRegex: \"^/\" + catchAllRegex + \"$\"\n };\n }\n const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false);\n let catchAllGroupedRegex = catchAll ? \"(?:(/.*)?)\" : \"\";\n return {\n namedRegex: \"^\" + namedParameterizedRoute + catchAllGroupedRegex + \"$\"\n };\n} //# sourceMappingURL=route-regex.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtcmVnZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBMk5nQkEseUJBQXVCO2VBQXZCQTs7SUFoQkFDLG9CQUFrQjtlQUFsQkE7O0lBbklBQyxlQUFhO2VBQWJBOzs7Z0RBeEUyQjswQ0FDUjtpREFDQztBQUVwQyxNQUFNQywwQkFBMEI7QUFDaEMsTUFBTUMsa0NBQWtDO0FBYXhDOzs7Ozs7O0NBT0MsR0FDRCxTQUFTQyxlQUFlQyxLQUFhO0lBQ25DLE1BQU1DLFdBQVdELE1BQU1FLFVBQVUsQ0FBQyxRQUFRRixNQUFNRyxRQUFRLENBQUM7SUFDekQsSUFBSUYsVUFBVTtRQUNaRCxRQUFRQSxNQUFNSSxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzFCO0lBQ0EsTUFBTUMsU0FBU0wsTUFBTUUsVUFBVSxDQUFDO0lBQ2hDLElBQUlHLFFBQVE7UUFDVkwsUUFBUUEsTUFBTUksS0FBSyxDQUFDO0lBQ3RCO0lBQ0EsT0FBTztRQUFFRSxLQUFLTjtRQUFPSztRQUFRSjtJQUFTO0FBQ3hDO0FBRUEsU0FBU00scUJBQXFCQyxLQUFhO0lBQ3pDLE1BQU1DLFdBQVdDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ0YsT0FBT0osS0FBSyxDQUFDLEdBQUdPLEtBQUssQ0FBQztJQUMzRCxNQUFNQyxTQUF5QyxDQUFDO0lBQ2hELElBQUlDLGFBQWE7SUFDakIsT0FBTztRQUNMQyxvQkFBb0JMLFNBQ2pCTSxHQUFHLENBQUMsQ0FBQ0M7WUFDSixNQUFNQyxjQUFjQyxvQkFBQUEsMEJBQTBCLENBQUNDLElBQUksQ0FBQyxDQUFDQyxJQUNuREosUUFBUWQsVUFBVSxDQUFDa0I7WUFFckIsTUFBTUMsZUFBZUwsUUFBUU0sS0FBSyxDQUFDLHVCQUF1Qix1QkFBdUI7O1lBRWpGLElBQUlMLGVBQWVJLGNBQWM7Z0JBQy9CLE1BQU0sRUFBRWYs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TSxFQUFFN0Msa0JBQWtCLEVBQUUsR0FBR1AscUJBQXFCbUI7SUFDcEQsTUFBTSxFQUFFa0MsV0FBVyxJQUFJLEVBQUUsR0FBR0Q7SUFDNUIsSUFBSTdDLHVCQUF1QixLQUFLO1FBQzlCLElBQUkrQyxnQkFBZ0JELFdBQVcsT0FBTztRQUN0QyxPQUFPO1lBQ0xGLFlBQVksT0FBS0csZ0JBQWM7UUFDakM7SUFDRjtJQUVBLE1BQU0sRUFBRVYsdUJBQXVCLEVBQUUsR0FBR0YsMEJBQ2xDdkIsaUJBQ0E7SUFFRixJQUFJb0MsdUJBQXVCRixXQUFXLGVBQWU7SUFDckQsT0FBTztRQUNMRixZQUFZLE1BQUlQLDBCQUEwQlcsdUJBQXFCO0lBQ2pFO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1yZWdleC50cz8yYjM3Il0sIm5hbWVzIjpbImdldE5hbWVkTWlkZGxld2FyZVJlZ2V4IiwiZ2V0TmFtZWRSb3V0ZVJlZ2V4IiwiZ2V0Um91dGVSZWdleCIsIk5FWFRfUVVFUllfUEFSQU1fUFJFRklYIiwiTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWCIsInBhcnNlUGFyYW1ldGVyIiwicGFyYW0iLCJvcHRpb25hbCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNsaWNlIiwicmVwZWF0Iiwia2V5IiwiZ2V0UGFyYW1ldHJpemVkUm91dGUiLCJyb3V0ZSIsInNlZ21lbnRzIiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInNwbGl0IiwiZ3JvdXBzIiwiZ3JvdXBJbmRleCIsInBhcmFtZXRlcml6ZWRSb3V0ZSIsIm1hcCIsInNlZ21lbnQiLCJtYXJrZXJNYXRjaCIsIklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTIiwiZmluZCIsIm0iLCJwYXJhbU1hdGNoZXMiLCJtYXRjaCIsInBvcyIsImVzY2FwZVN0cmluZ1JlZ2V4cCIsImpvaW4iLCJub3JtYWxpemVkUm91dGUiLCJyZSIsIlJlZ0V4cCIsImJ1aWxkR2V0U2FmZVJvdXRlS2V5IiwiaSIsInJvdXRlS2V5IiwiaiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIk1hdGgiLCJmbG9vciIsImdldFNhZmVLZXlGcm9tU2VnbWVudCIsImludGVyY2VwdGlvbk1hcmtlciIsImdldFNhZmVSb3V0ZUtleSIsInJvdXRlS2V5cyIsImtleVByZWZpeCIsImNsZWFuZWRLZXkiLCJyZXBsYWNlIiwiaW52YWxpZEtleSIsImxlbmd0aCIsImlzTmFOIiwicGFyc2VJbnQiLCJpbnRlcmNlcHRpb25QcmVmaXgiLCJnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlIiwicHJlZml4Um91dGVLZXlzIiwibmFtZWRQYXJhbWV0ZXJpemVkUm91dGUiLCJoYXNJbnRlcmNlcHRpb25NYXJrZXIiLCJzb21lIiwidXNlZE1hcmtlciIsInVuZGVmaW5lZCIsInByZWZpeFJvdXRlS2V5IiwicmVzdWx0IiwibmFtZWRSZWdleCIsIm9wdGlvbnMiLCJjYXRjaEFsbCIsImNhdGNoQWxsUmVnZXgiLCJjYXRjaEFsbEdyb3VwZWRSZWdleCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js": -/*!*************************************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js ***! - \*************************************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSortedRoutes\", ({\n enumerable: true,\n get: function() {\n return getSortedRoutes;\n }\n}));\nclass UrlNode {\n insert(urlPath) {\n this._insert(urlPath.split(\"/\").filter(Boolean), [], false);\n }\n smoosh() {\n return this._smoosh();\n }\n _smoosh(prefix) {\n if (prefix === void 0) prefix = \"/\";\n const childrenPaths = [\n ...this.children.keys()\n ].sort();\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[]\"), 1);\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[...]\"), 1);\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[[...]]\"), 1);\n }\n const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(\"\" + prefix + c + \"/\")).reduce((prev, curr)=>[\n ...prev,\n ...curr\n ], []);\n if (this.slugName !== null) {\n routes.push(...this.children.get(\"[]\")._smoosh(prefix + \"[\" + this.slugName + \"]/\"));\n }\n if (!this.placeholder) {\n const r = prefix === \"/\" ? \"/\" : prefix.slice(0, -1);\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot define a route with the same specificity as a optional catch-all route (\"' + r + '\" and \"' + r + \"[[...\" + this.optionalRestSlugName + ']]\").');\n }\n routes.unshift(r);\n }\n if (this.restSlugName !== null) {\n routes.push(...this.children.get(\"[...]\")._smoosh(prefix + \"[...\" + this.restSlugName + \"]/\"));\n }\n if (this.optionalRestSlugName !== null) {\n routes.push(...this.children.get(\"[[...]]\")._smoosh(prefix + \"[[...\" + this.optionalRestSlugName + \"]]/\"));\n }\n return routes;\n }\n _insert(urlPaths, slugNames, isCatchAll) {\n if (urlPaths.length === 0) {\n this.placeholder = false;\n return;\n }\n if (isCatchAll) {\n throw new Error(\"Catch-all must be the last part of the URL.\");\n }\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0];\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith(\"[\") && nextSegment.endsWith(\"]\")) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1);\n let isOptional = false;\n if (segmentName.startsWith(\"[\") && segmentName.endsWith(\"]\")) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1);\n isOptional = true;\n }\n if (segmentName.startsWith(\"...\")) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3);\n isCatchAll = true;\n }\n if (segmentName.startsWith(\"[\") || segmentName.endsWith(\"]\")) {\n throw new Error(\"Segment names may not start or end with extra brackets ('\" + segmentName + \"').\");\n }\n if (segmentName.startsWith(\".\")) {\n throw new Error(\"Segment names may not start with erroneous periods ('\" + segmentName + \"').\");\n }\n function handleSlug(previousSlug, nextSlug) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw new Error(\"You cannot use different slug names for the same dynamic path ('\" + previousSlug + \"' !== '\" + nextSlug + \"').\");\n }\n }\n slugNames.forEach((slug)=>{\n if (slug === nextSlug) {\n throw new Error('You cannot have the same slug name \"' + nextSlug + '\" repeat within a single dynamic path');\n }\n if (slug.replace(/\\W/g, \"\") === nextSegment.replace(/\\W/g, \"\")) {\n throw new Error('You cannot have the slug names \"' + slug + '\" and \"' + nextSlug + '\" differ only by non-word symbols within a single dynamic path');\n }\n });\n slugNames.push(nextSlug);\n }\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw new Error('You cannot use both an required and optional catch-all route at the same level (\"[...' + this.restSlugName + ']\" and \"' + urlPaths[0] + '\" ).');\n }\n handleSlug(this.optionalRestSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName;\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = \"[[...]]\";\n } else {\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot use both an optional and required catch-all route at the same level (\"[[...' + this.optionalRestSlugName + ']]\" and \"' + urlPaths[0] + '\").');\n }\n handleSlug(this.restSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName;\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = \"[...]\";\n }\n } else {\n if (isOptional) {\n throw new Error('Optional route parameters are not yet supported (\"' + urlPaths[0] + '\").');\n }\n handleSlug(this.slugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName;\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = \"[]\";\n }\n }\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode());\n }\n this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll);\n }\n constructor(){\n this.placeholder = true;\n this.children = new Map();\n this.slugName = null;\n this.restSlugName = null;\n this.optionalRestSlugName = null;\n }\n}\nfunction getSortedRoutes(normalizedPages) {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode();\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath)=>root.insert(pagePath));\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh();\n} //# sourceMappingURL=sorted-routes.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvc29ydGVkLXJvdXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7O21EQXFNZ0JBOzs7ZUFBQUE7OztBQXJNaEIsTUFBTUM7SUFPSkMsT0FBT0MsT0FBZSxFQUFRO1FBQzVCLElBQUksQ0FBQ0MsT0FBTyxDQUFDRCxRQUFRRSxLQUFLLENBQUMsS0FBS0MsTUFBTSxDQUFDQyxVQUFVLEVBQUUsRUFBRTtJQUN2RDtJQUVBQyxTQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQ0MsT0FBTztJQUNyQjtJQUVRQSxRQUFRQyxNQUFvQixFQUFZO1FBQWhDQSxJQUFBQSxXQUFBQSxLQUFBQSxHQUFBQSxTQUFpQjtRQUMvQixNQUFNQyxnQkFBZ0I7ZUFBSSxJQUFJLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSTtTQUFHLENBQUNDLElBQUk7UUFDcEQsSUFBSSxJQUFJLENBQUNDLFFBQVEsS0FBSyxNQUFNO1lBQzFCSixjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxPQUFPO1FBQ3BEO1FBQ0EsSUFBSSxJQUFJLENBQUNDLFlBQVksS0FBSyxNQUFNO1lBQzlCUCxjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxVQUFVO1FBQ3ZEO1FBQ0EsSUFBSSxJQUFJLENBQUNFLG9CQUFvQixLQUFLLE1BQU07WUFDdENSLGNBQWNLLE1BQU0sQ0FBQ0wsY0FBY00sT0FBTyxDQUFDLFlBQVk7UUFDekQ7UUFFQSxNQUFNRyxTQUFTVCxjQUNaVSxHQUFHLENBQUMsQ0FBQ0MsSUFBTSxJQUFJLENBQUNWLFFBQVEsQ0FBQ1csR0FBRyxDQUFDRCxHQUFJYixPQUFPLENBQUMsS0FBR0MsU0FBU1ksSUFBRSxNQUN2REUsTUFBTSxDQUFDLENBQUNDLE1BQU1DLE9BQVM7bUJBQUlEO21CQUFTQzthQUFLLEVBQUUsRUFBRTtRQUVoRCxJQUFJLElBQUksQ0FBQ1gsUUFBUSxLQUFL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Q0FBQ3pCLFFBQVEsQ0FBQ3NDLEdBQUcsQ0FBQ2IsYUFBYSxJQUFJcEM7UUFDckM7UUFFQSxJQUFJLENBQUNXLFFBQVEsQ0FDVlcsR0FBRyxDQUFDYyxhQUNKakMsT0FBTyxDQUFDNkIsU0FBU0gsS0FBSyxDQUFDLElBQUlJLFdBQVdDO0lBQzNDOzthQWpNQVAsV0FBQUEsR0FBdUI7YUFDdkJoQixRQUFBQSxHQUFpQyxJQUFJdUM7YUFDckNwQyxRQUFBQSxHQUEwQjthQUMxQkcsWUFBQUEsR0FBOEI7YUFDOUJDLG9CQUFBQSxHQUFzQzs7QUE4THhDO0FBRU8sU0FBU25CLGdCQUNkb0QsZUFBc0M7SUFFdEMsa0ZBQWtGO0lBQ2xGLDRFQUE0RTtJQUM1RSwyQ0FBMkM7SUFFM0MseUVBQXlFO0lBQ3pFLDJCQUEyQjtJQUMzQixvQ0FBb0M7SUFDcEMsOEVBQThFO0lBQzlFLHdFQUF3RTtJQUN4RSxnSEFBZ0g7SUFDaEgsNEVBQTRFO0lBQzVFLE1BQU1DLE9BQU8sSUFBSXBEO0lBRWpCLDZGQUE2RjtJQUM3Rm1ELGdCQUFnQk4sT0FBTyxDQUFDLENBQUNRLFdBQWFELEtBQUtuRCxNQUFNLENBQUNvRDtJQUNsRCw0R0FBNEc7SUFDNUcsT0FBT0QsS0FBSzdDLE1BQU07QUFDcEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9zb3J0ZWQtcm91dGVzLnRzP2IwYjAiXSwibmFtZXMiOlsiZ2V0U29ydGVkUm91dGVzIiwiVXJsTm9kZSIsImluc2VydCIsInVybFBhdGgiLCJfaW5zZXJ0Iiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic21vb3NoIiwiX3Ntb29zaCIsInByZWZpeCIsImNoaWxkcmVuUGF0aHMiLCJjaGlsZHJlbiIsImtleXMiLCJzb3J0Iiwic2x1Z05hbWUiLCJzcGxpY2UiLCJpbmRleE9mIiwicmVzdFNsdWdOYW1lIiwib3B0aW9uYWxSZXN0U2x1Z05hbWUiLCJyb3V0ZXMiLCJtYXAiLCJjIiwiZ2V0IiwicmVkdWNlIiwicHJldiIsImN1cnIiLCJwdXNoIiwicGxhY2Vob2xkZXIiLCJyIiwic2xpY2UiLCJFcnJvciIsInVuc2hpZnQiLCJ1cmxQYXRocyIsInNsdWdOYW1lcyIsImlzQ2F0Y2hBbGwiLCJsZW5ndGgiLCJuZXh0U2VnbWVudCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNlZ21lbnROYW1lIiwiaXNPcHRpb25hbCIsInN1YnN0cmluZyIsImhhbmRsZVNsdWciLCJwcmV2aW91c1NsdWciLCJuZXh0U2x1ZyIsImZvckVhY2giLCJzbHVnIiwicmVwbGFjZSIsImhhcyIsInNldCIsIk1hcCIsIm5vcm1hbGl6ZWRQYWdlcyIsInJvb3QiLCJwYWdlUGF0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js": -/*!****************************************************!*\ - !*** ./node_modules/next/dist/shared/lib/utils.js ***! - \****************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DecodeError: function() {\n return DecodeError;\n },\n MiddlewareNotFoundError: function() {\n return MiddlewareNotFoundError;\n },\n MissingStaticPage: function() {\n return MissingStaticPage;\n },\n NormalizeError: function() {\n return NormalizeError;\n },\n PageNotFoundError: function() {\n return PageNotFoundError;\n },\n SP: function() {\n return SP;\n },\n ST: function() {\n return ST;\n },\n WEB_VITALS: function() {\n return WEB_VITALS;\n },\n execOnce: function() {\n return execOnce;\n },\n getDisplayName: function() {\n return getDisplayName;\n },\n getLocationOrigin: function() {\n return getLocationOrigin;\n },\n getURL: function() {\n return getURL;\n },\n isAbsoluteUrl: function() {\n return isAbsoluteUrl;\n },\n isResSent: function() {\n return isResSent;\n },\n loadGetInitialProps: function() {\n return loadGetInitialProps;\n },\n normalizeRepeatedSlashes: function() {\n return normalizeRepeatedSlashes;\n },\n stringifyError: function() {\n return stringifyError;\n }\n});\nconst WEB_VITALS = [\n \"CLS\",\n \"FCP\",\n \"FID\",\n \"INP\",\n \"LCP\",\n \"TTFB\"\n];\nfunction execOnce(fn) {\n let used = false;\n let result;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!used) {\n used = true;\n result = fn(...args);\n }\n return result;\n };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n const { protocol, hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? \":\" + port : \"\");\n}\nfunction getURL() {\n const { href } = window.location;\n const origin = getLocationOrigin();\n return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n return typeof Component === \"string\" ? Component : Component.displayName || Component.name || \"Unknown\";\n}\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n const urlParts = url.split(\"?\");\n const urlNoQuery = urlParts[0];\n return urlNoQuery // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, \"/\").replace(/\\/\\/+/g, \"/\") + (urlParts[1] ? \"?\" + urlParts.slice(1).join(\"?\") : \"\");\n}\nasync function loadGetInitialProps(App, ctx) {\n if (true) {\n var _App_prototype;\n if ((_App_prototype = App.prototype) == null ? void 0 : _App_prototype.getInitialProps) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.';\n throw new Error(message);\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || ctx.ctx && ctx.ctx.res;\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n };\n }\n return {};\n }\n const props = await App.getInitialProps(ctx);\n if (res && isResSent(res)) {\n return props;\n }\n if (!props) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" should resolve to an object. But found \"' + props + '\" instead.';\n throw new Error(message);\n }\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\"\" + getDisplayName(App) + \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\");\n }\n }\n return props;\n}\nconst SP = typeof performance !== \"undefined\";\nconst ST = SP && [\n \"mark\",\n \"measure\",\n \"getEntriesByName\"\n].every((method)=>typeof performance[method] === \"function\");\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n constructor(page){\n super();\n this.code = \"ENOENT\";\n this.name = \"PageNotFoundError\";\n this.message = \"Cannot find module for page: \" + page;\n }\n}\nclass MissingStaticPage extends Error {\n constructor(page, message){\n super();\n this.message = \"Failed to load static file for page: \" + page + \" \" + message;\n }\n}\nclass MiddlewareNotFoundError extends Error {\n constructor(){\n super();\n this.code = \"ENOENT\";\n this.message = \"Cannot find the middleware module\";\n }\n}\nfunction stringifyError(error) {\n return JSON.stringify({\n message: error.message,\n stack: error.stack\n });\n} //# sourceMappingURL=utils.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFvYWFBLGFBQVc7ZUFBWEE7O0lBb0JBQyx5QkFBdUI7ZUFBdkJBOztJQVBBQyxtQkFBaUI7ZUFBakJBOztJQVpBQyxnQkFBYztlQUFkQTs7SUFDQUMsbUJBQWlCO2VBQWpCQTs7SUFUQUMsSUFBRTtlQUFGQTs7SUFDQUMsSUFBRTtlQUFGQTs7SUFsWEFDLFlBQVU7ZUFBVkE7O0lBc1FHQyxVQUFRO2VBQVJBOztJQStCQUMsZ0JBQWM7ZUFBZEE7O0lBWEFDLG1CQUFpQjtlQUFqQkE7O0lBS0FDLFFBQU07ZUFBTkE7O0lBUEhDLGVBQWE7ZUFBYkE7O0lBbUJHQyxXQUFTO2VBQVRBOztJQWtCTUMscUJBQW1CO2VBQW5CQTs7SUFkTkMsMEJBQXdCO2VBQXhCQTs7SUErR0FDLGdCQUFjO2VBQWRBOzs7QUE5WlQsTUFBTVQsYUFBYTtJQUFDO0lBQU87SUFBTztJQUFPO0lBQU87SUFBTztDQUFPO0FBc1E5RCxTQUFTQyxTQUNkUyxFQUFLO0lBRUwsSUFBSUMsT0FBTztJQUNYLElBQUlDO0lBRUosT0FBUTt5Q0FBSUMsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7WUFBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O1FBQ1YsSUFBSSxDQUFDRixNQUFNO1lBQ1RBLE9BQU87WUFDUEMsU0FBU0YsTUFBTUc7UUFDakI7UUFDQSxPQUFPRDtJQUNUO0FBQ0Y7QUFFQSwwREFBMEQ7QUFDMUQsZ0VBQWdFO0FBQ2hFLE1BQU1FLHFCQUFxQjtBQUNwQixNQUFNVCxnQkFBZ0IsQ0FBQ1UsTUFBZ0JELG1CQUFtQkUsSUFBSSxDQUFDRDtBQUUvRCxTQUFTWjtJQUNkLE1BQU0sRUFBRWMsUUFBUSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFB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O0lBQ3JDVSxZQUFZQyxJQUFZLEVBQUVaLE9BQWUsQ0FBRTtRQUN6QyxLQUFLO1FBQ0wsSUFBSSxDQUFDQSxPQUFPLEdBQUcsMENBQXdDWSxPQUFLLE1BQUdaO0lBQ2pFO0FBQ0Y7QUFFTyxNQUFNakQsZ0NBQWdDa0Q7SUFFM0NVLGFBQWM7UUFDWixLQUFLO1FBQ0wsSUFBSSxDQUFDRSxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUNiLE9BQU8sR0FBSTtJQUNsQjtBQUNGO0FBV08sU0FBU2xDLGVBQWVnRCxLQUFZO0lBQ3pDLE9BQU9DLEtBQUtDLFNBQVMsQ0FBQztRQUFFaEIsU0FBU2MsTUFBTWQsT0FBTztRQUFFaUIsT0FBT0gsTUFBTUcsS0FBSztJQUFDO0FBQ3JFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi91dGlscy50cz8xYmQ1Il0sIm5hbWVzIjpbIkRlY29kZUVycm9yIiwiTWlkZGxld2FyZU5vdEZvdW5kRXJyb3IiLCJNaXNzaW5nU3RhdGljUGFnZSIsIk5vcm1hbGl6ZUVycm9yIiwiUGFnZU5vdEZvdW5kRXJyb3IiLCJTUCIsIlNUIiwiV0VCX1ZJVEFMUyIsImV4ZWNPbmNlIiwiZ2V0RGlzcGxheU5hbWUiLCJnZXRMb2NhdGlvbk9yaWdpbiIsImdldFVSTCIsImlzQWJzb2x1dGVVcmwiLCJpc1Jlc1NlbnQiLCJsb2FkR2V0SW5pdGlhbFByb3BzIiwibm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzIiwic3RyaW5naWZ5RXJyb3IiLCJmbiIsInVzZWQiLCJyZXN1bHQiLCJhcmdzIiwiQUJTT0xVVEVfVVJMX1JFR0VYIiwidXJsIiwidGVzdCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0Iiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwib3JpZ2luIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiLCJuYW1lIiwicmVzIiwiZmluaXNoZWQiLCJoZWFkZXJzU2VudCIsInVybFBhcnRzIiwic3BsaXQiLCJ1cmxOb1F1ZXJ5IiwicmVwbGFjZSIsInNsaWNlIiwiam9pbiIsIkFwcCIsImN0eCIsInByb2Nlc3MiLCJwcm90b3R5cGUiLCJnZXRJbml0aWFsUHJvcHMiLCJtZXNzYWdlIiwiRXJyb3IiLCJwYWdlUHJvcHMiLCJwcm9wcyIsIk9iamVjdCIsImtleXMiLCJjb25zb2xlIiwid2FybiIsInBlcmZvcm1hbmNlIiwiZXZlcnkiLCJtZXRob2QiLCJjb25zdHJ1Y3RvciIsInBhZ2UiLCJjb2RlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhY2siXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js": -/*!****************************************************************************************!*\ - !*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js ***! - \****************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider'); // TODO: Delete with enableRenderableContext\n\nvar REACT_CONSUMER_TYPE = Symbol.for('react.consumer');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\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\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\nvar enableRenderableContext = false;\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE$2) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n {\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n }\n\n case REACT_CONTEXT_TYPE:\n var context = type;\n\n {\n return getContextName(context) + '.Consumer';\n }\n\n case REACT_CONSUMER_TYPE:\n {\n return null;\n }\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n }\n }\n\n return null;\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar assign = Object.assign;\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || enableRenderableContext || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('')) {\n _frame = _frame.replace('', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, _ref, self, source, owner, props) {\n var ref;\n\n {\n ref = _ref;\n }\n\n var element;\n\n {\n // In prod, `ref` is a regular property. It will be removed in a\n // future release.\n element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n }\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // debugInfo contains Server Component debug information.\n\n Object.defineProperty(element, '_debugInfo', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: null\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n}\nvar didWarnAboutKeySpread = {};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self) {\n {\n if (!isValidElementType(type)) {\n // This is an invalid element type.\n //\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n } else {\n // This is a valid element type.\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing\n // errors. We don't want exception behavior to differ between dev and\n // prod. (Rendering will throw with a helpful message and as soon as the\n // type is fixed, the key warnings will appear.)\n var children = config.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n } // Warn about key spread regardless of whether the type is valid.\n\n\n if (hasOwnProperty.call(config, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie.
\n // or
). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n //
, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n {\n ref = config.ref;\n }\n\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names\n propName !== 'key' && (propName !== 'ref')) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n var element = ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n }\n\n return element;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object' || !node) {\n return;\n }\n\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nvar ownerHasKeyUseWarning = {};\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement(null);\n }\n}\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n // TODO: Move this to render phase instead of at element creation.\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement(null);\n }\n }\n}\n\nvar jsxDEV = jsxDEV$1 ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzR0FBMEI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBLHFDQUFxQzs7QUFFckMsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHOztBQUVsRztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0EsU0FBUztBQUNULHVCQUF1QjtBQUN2QjtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1Qsd0JBQXdCO0FBQ3hCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCxpQ0FBaUM7QUFDakM7QUFDQSxTQUFTO0FBQ1QsMkJBQTJCO0FBQzNCO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEOztBQUUzRDtBQUNBOztBQUVBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOzs7QUFHYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYzs7O0FBR2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7OztBQUdBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsZ0hBQWdIOztBQUVoSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0EsZ0ZBQWdGO0FBQ2hGO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsSUFBSTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7OztBQUdsQjtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLGVBQWU7QUFDMUIsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QUFXLGNBQWM7QUFDekI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcz84MDgxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTsgLy8gVE9ETzogRGVsZXRlIHdpdGggZW5hYmxlUmVuZGVyYWJsZUNvbnRleHRcblxudmFyIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb25zdW1lcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIFJFQUNUX0NBQ0hFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jYWNoZScpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG52YXIgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgPSBmYWxzZTtcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxuXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBvdXRlclR5cGUuZGlzcGxheU5hbWU7XG5cbiAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgPSBTeW1ib2wuZm9yKCdyZWFjdC5jbGllbnQucmVmZXJlbmNlJyk7IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMikge1xuICAgICAgLy8gVE9ETzogQ3JlYXRlIGEgY29udmVudGlvbiBmb3IgbmFtaW5nIGNsaWVudCByZWZlcmVuY2VzIHdpdGggZGVidWcgaW5mby5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICAgIGNhc2UgUkVBQ1RfQ0FDSEVfVFlQRTpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICdDYWNoZSc7XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcblxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cbi8qKlxuICogTGV2ZXJhZ2VzIG5hdGl2ZSBicm93c2VyL1ZNIHN0YWNrIGZyYW1lcyB0byBnZXQgcHJvcGVyIGRldGFpbHMgKGUuZy5cbiAqIGZpbGVuYW1lLCBsaW5lICsgY29sIG51bWJlcikgZm9yIGEgc2luZ2xlIGNvbXBvbmVudCBpbiBhIGNvbXBvbmVudCBzdGFjay4gV2VcbiAqIGRvIHRoaXMgYnk6XG4gKiAgICgxKSB0aHJvd2luZyBhbmQgY2F0Y2hpbmcgYW4gZXJyb3IgaW4gdGhlIGZ1bmN0aW9uIC0gdGhpcyB3aWxsIGJlIG91clxuICogICAgICAgY29udHJvbCBlcnJvci5cbiAqICAgKDIpIGNhbGxpbmcgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYW4gZXJyb3IgdGhhdCB3ZSdsbFxuICogICAgICAgY2F0Y2ggLSB0aGlzIHdpbGwgYmUgb3VyIHNhbXBsZSBlcnJvci5cbiAqICAgKDMpIGRpZmZpbmcgdGhlIGNvbnRyb2wgYW5kIHNhbXBsZSBlcnJvciBzdGFja3MgdG8gZmluZCB0aGUgc3RhY2sgZnJhbWVcbiAqICAgICAgIHdoaWNoIHJlcHJlc2VudHMgb3VyIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRpbmcgYSBjb21tb24gc3RhY2sgZnJhbWUgYmV0d2VlbiBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGNhbiBiZVxuICAgKiB0cmlja3kgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgbGV2ZWxzIG9mIHN0YWNrIHRyYWNlIHRydW5jYXRpb24gZnJvbVxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXG4gICAqIGZyYW1lIHNob3VsZCBiZSB0aHJvdWdoIHRoaXMgb2JqZWN0IG1ldGhvZDpcbiAgICogSGF2aW5nIGJvdGggdGhlIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgYmUgaW4gdGhlIGZ1bmN0aW9uIHVuZGVyIHRoZVxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcbiAgICogYGRpc3BsYXlOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSBzdGFja1xuICAgKiBmcmFtZSBleGlzdHMgdGhhdCBoYXMgdGhlIG1ldGhvZCBuYW1lIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgaW5cbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cbiAgICovXG5cblxuICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udHJvbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xuICAgICAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xuXG5cbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gZm4oKTsgLy8gSWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCByZXR1cm5zIGEgcHJvbWlzZSwgaXQncyBsaWtlbHkgYW4gYXN5bmNcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY29tcG9uZW50IHN0YWNrcyBmb3IgYXN5bmMgY2xpZW50IGNvbXBvbmVudHM/XG5cbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcbiAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAnbmFtZScpOyAvLyBCZWZvcmUgRVM2LCB0aGUgYG5hbWVgIHByb3BlcnR5IHdhcyBub3QgY29uZmlndXJhYmxlLlxuXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIC8vIFY4IHV0aWxpemVzIGEgZnVuY3Rpb24ncyBgbmFtZWAgcHJvcGVydHkgd2hlbiBnZW5lcmF0aW5nIGEgc3RhY2sgdHJhY2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgLy8gQ29uZmlndXJhYmxlIHByb3BlcnRpZXMgY2FuIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdHMgd3JpdGFibGUgZGVzY3JpcHRvclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgICduYW1lJywge1xuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXG4gICAgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcblxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICB3aGlsZSAocyA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJiAhc2FtcGxlTGluZXNbc10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIHMrKztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIGMrKztcbiAgICAgIH0gLy8gV2UgY291bGRuJ3QgZmluZCBvdXIgaW50ZW50aW9uYWxseSBpbmplY3RlZCBjb21tb24gcm9vdCBmcmFtZSwgYXR0ZW1wdFxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAvLyBjb250cm9sIHN0YWNrLi4uXG5cblxuICAgICAgaWYgKHMgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fCBjID09PSBjb250cm9sTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgICBjLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB7XG4gICAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxuZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgX3JlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIHJlZjtcblxuICB7XG4gICAgcmVmID0gX3JlZjtcbiAgfVxuXG4gIHZhciBlbGVtZW50O1xuXG4gIHtcbiAgICAvLyBJbiBwcm9kLCBgcmVmYCBpcyBhIHJlZ3VsYXIgcHJvcGVydHkuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhXG4gICAgLy8gZnV0dXJlIHJlbGVhc2UuXG4gICAgZWxlbWVudCA9IHtcbiAgICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBrZXk6IGtleSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICAgIF9vd25lcjogb3duZXJcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBkZWJ1Z0luZm8gY29udGFpbnMgU2VydmVyIENvbXBvbmVudCBkZWJ1ZyBpbmZvcm1hdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX2RlYnVnSW5mbycsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbnZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fTtcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuXG5mdW5jdGlvbiBqc3hERVYkMSh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGludmFsaWQgZWxlbWVudCB0eXBlLlxuICAgICAgLy9cbiAgICAgIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCdSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB2YWxpZCBlbGVtZW50IHR5cGUuXG4gICAgICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgICAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9ycy4gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZFxuICAgICAgLy8gcHJvZC4gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlXG4gICAgICAvLyB0eXBlIGlzIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcbiAgICAgIHZhciBjaGlsZHJlbiA9IGNvbmZpZy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gV2FybiBhYm91dCBrZXkgc3ByZWFkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdHlwZSBpcyB2YWxpZC5cblxuXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICByZXR1cm4gayAhPT0gJ2tleSc7XG4gICAgICB9KTtcbiAgICAgIHZhciBiZWZvcmVFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3trZXk6IHNvbWVLZXksICcgKyBrZXlzLmpvaW4oJzogLi4uLCAnKSArICc6IC4uLn0nIDogJ3trZXk6IHNvbWVLZXl9JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdKSB7XG4gICAgICAgIHZhciBhZnRlckV4YW1wbGUgPSBrZXlzLmxlbmd0aCA+IDAgPyAneycgKyBrZXlzLmpvaW4oJzogLi4uLCAnKSArICc6IC4uLn0nIDogJ3t9JztcblxuICAgICAgICBlcnJvcignQSBwcm9wcyBvYmplY3QgY29udGFpbmluZyBhIFwia2V5XCIgcHJvcCBpcyBiZWluZyBzcHJlYWQgaW50byBKU1g6XFxuJyArICcgIGxldCBwcm9wcyA9ICVzO1xcbicgKyAnICA8JXMgey4uLnByb3BzfSAvPlxcbicgKyAnUmVhY3Qga2V5cyBtdXN0IGJlIHBhc3NlZCBkaXJlY3RseSB0byBKU1ggd2l0aG91dCB1c2luZyBzcHJlYWQ6XFxuJyArICcgIGxldCBwcm9wcyA9ICVzO1xcbicgKyAnICA8JXMga2V5PXtzb21lS2V5fSB7Li4ucHJvcHN9IC8+JywgYmVmb3JlRXhhbXBsZSwgY29tcG9uZW50TmFtZSwgYWZ0ZXJFeGFtcGxlLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBrZXkgPSBudWxsO1xuICAgIHZhciByZWYgPSBudWxsOyAvLyBDdXJyZW50bHksIGtleSBjYW4gYmUgc3ByZWFkIGluIGFzIGEgcHJvcC4gVGhpcyBjYXVzZXMgYSBwb3RlbnRpYWxcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cbiAgICAvLyBvciA8ZGl2IGtleT1cIkhpXCIgey4uLnByb3BzfSAvPiApLiBXZSB3YW50IHRvIGRlcHJlY2F0ZSBrZXkgc3ByZWFkLFxuICAgIC8vIGJ1dCBhcyBhbiBpbnRlcm1lZGlhcnkgc3RlcCwgd2Ugd2lsbCB1c2UganN4REVWIGZvciBldmVyeXRoaW5nIGV4Y2VwdFxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXG4gICAgLy8ga2V5IGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgdW5kZWZpbmVkIG9yIG5vdC5cblxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWF5YmVLZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIG1heWJlS2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgfVxuXG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmIC8vIFNraXAgb3ZlciByZXNlcnZlZCBwcm9wIG5hbWVzXG4gICAgICBwcm9wTmFtZSAhPT0gJ2tleScgJiYgKHByb3BOYW1lICE9PSAncmVmJykpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xuXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHtcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8ICFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIDsgZWxzZSBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gICAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICAgIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAge1xuICAgIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgICBpZiAoIWluZm8pIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHBhcmVudFR5cGUpO1xuXG4gICAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZm87XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gcmVuZGVyIHBoYXNlIGluc3RlYWQgb2YgYXQgZWxlbWVudCBjcmVhdGlvbi5cbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIganN4REVWID0ganN4REVWJDEgO1xuXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuanN4REVWID0ganN4REVWO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js": -/*!******************************************************************!*\ - !*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***! - \******************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw4TEFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtZGV2LXJ1bnRpbWUuanM/YTM2OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n")); - -/***/ }) - -}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } -/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"); }); -/******/ var __webpack_exports__ = __webpack_require__.O(); -/******/ _N_E = __webpack_exports__; -/******/ } -]); \ No newline at end of file diff --git a/.next/static/chunks/app/layout.js b/.next/static/chunks/app/layout.js index c1f9689..398ee14 100644 --- a/.next/static/chunks/app/layout.js +++ b/.next/static/chunks/app/layout.js @@ -25,7 +25,7 @@ eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpa /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"5589102c78c1\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI1NTg5MTAyYzc4YzFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"38bffb97d808\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIzOGJmZmI5N2Q4MDhcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }) diff --git a/.next/static/chunks/webpack.js b/.next/static/chunks/webpack.js index e5971e2..b95e8e4 100644 --- a/.next/static/chunks/webpack.js +++ b/.next/static/chunks/webpack.js @@ -192,7 +192,7 @@ /******/ /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "b05ead14ffc790b9"; } +/******/ __webpack_require__.h = function() { return "5b1ab9cb930747d7"; } /******/ }(); /******/ /******/ /* webpack/runtime/global */ diff --git a/.next/static/css/app/layout.css b/.next/static/css/app/layout.css index 60fc478..32b8270 100644 --- a/.next/static/css/app/layout.css +++ b/.next/static/css/app/layout.css @@ -513,8 +513,11 @@ video { .relative { position: relative; } -.inset-0 { - inset: 0px; +.right-1 { + right: 0.25rem; +} +.top-1\/2 { + top: 50%; } .mx-1 { margin-left: 0.25rem; @@ -623,6 +626,10 @@ video { .flex-1 { flex: 1 1 0%; } +.-translate-y-1\/2 { + --tw-translate-y: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} .cursor-not-allowed { cursor: not-allowed; } @@ -724,6 +731,10 @@ video { .border-red-500\/30 { border-color: rgb(239 68 68 / 0.3); } +.border-zinc-600 { + --tw-border-opacity: 1; + border-color: rgb(82 82 91 / var(--tw-border-opacity)); +} .border-zinc-700 { --tw-border-opacity: 1; border-color: rgb(63 63 70 / var(--tw-border-opacity)); @@ -732,10 +743,6 @@ video { --tw-border-opacity: 1; border-color: rgb(39 39 42 / var(--tw-border-opacity)); } -.border-zinc-600 { - --tw-border-opacity: 1; - border-color: rgb(82 82 91 / var(--tw-border-opacity)); -} .bg-amber-400 { --tw-bg-opacity: 1; background-color: rgb(251 191 36 / var(--tw-bg-opacity)); @@ -779,6 +786,9 @@ video { .bg-zinc-900\/60 { background-color: rgb(24 24 27 / 0.6); } +.bg-zinc-900\/70 { + background-color: rgb(24 24 27 / 0.7); +} .bg-zinc-950 { --tw-bg-opacity: 1; background-color: rgb(9 9 11 / var(--tw-bg-opacity)); @@ -792,9 +802,6 @@ video { .bg-zinc-950\/80 { background-color: rgb(9 9 11 / 0.8); } -.bg-zinc-900\/70 { - background-color: rgb(24 24 27 / 0.7); -} .object-contain { -o-object-fit: contain; object-fit: contain; @@ -819,6 +826,10 @@ video { padding-left: 0.375rem; padding-right: 0.375rem; } +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; @@ -871,21 +882,20 @@ video { padding-top: 2rem; padding-bottom: 2rem; } -.px-2 { - padding-left: 0.5rem; - padding-right: 0.5rem; +.pb-2 { + padding-bottom: 0.5rem; } .pr-1 { padding-right: 0.25rem; } +.pr-2 { + padding-right: 0.5rem; +} .pt-3 { padding-top: 0.75rem; } -.pb-2 { - padding-bottom: 0.5rem; -} -.pr-2 { - padding-right: 0.5rem; +.pr-6 { + padding-right: 1.5rem; } .text-left { text-align: left; @@ -941,6 +951,9 @@ video { .uppercase { text-transform: uppercase; } +.leading-none { + line-height: 1; +} .tracking-\[0\.15em\] { letter-spacing: 0.15em; } @@ -976,6 +989,10 @@ video { --tw-text-opacity: 1; color: rgb(248 113 113 / var(--tw-text-opacity)); } +.text-zinc-100 { + --tw-text-opacity: 1; + color: rgb(244 244 245 / var(--tw-text-opacity)); +} .text-zinc-200 { --tw-text-opacity: 1; color: rgb(228 228 231 / var(--tw-text-opacity)); @@ -1000,25 +1017,23 @@ video { --tw-text-opacity: 1; color: rgb(82 82 91 / var(--tw-text-opacity)); } -.text-zinc-100 { - --tw-text-opacity: 1; - color: rgb(244 244 245 / var(--tw-text-opacity)); -} .underline { text-decoration-line: underline; } .line-through { text-decoration-line: line-through; } -.opacity-0 { - opacity: 0; -} .opacity-40 { opacity: 0.4; } .opacity-60 { opacity: 0.6; } +.shadow-\[0_0_0_1px_rgba\(251\2c 191\2c 36\2c 0\.25\)\] { + --tw-shadow: 0 0 0 1px rgba(251,191,36,0.25); + --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} .filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } @@ -1037,11 +1052,6 @@ video { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } -.transition-opacity { - transition-property: opacity; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} .duration-200 { transition-duration: 200ms; } @@ -1116,10 +1126,6 @@ body { --tw-ring-color: rgb(251 191 36 / var(--tw-ring-opacity)); } -.group:hover .group-hover\:opacity-100 { - opacity: 1; -} - @media (min-width: 640px) { .sm\:flex-row { diff --git a/.next/static/webpack/06cf6e708077e037.webpack.hot-update.json b/.next/static/webpack/06cf6e708077e037.webpack.hot-update.json deleted file mode 100644 index c52c0f6..0000000 --- a/.next/static/webpack/06cf6e708077e037.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/build/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/2f74deb0913397a7.webpack.hot-update.json b/.next/static/webpack/2f74deb0913397a7.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/2f74deb0913397a7.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/48663096e2813c6e.webpack.hot-update.json b/.next/static/webpack/48663096e2813c6e.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/48663096e2813c6e.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/505dd85efd94f5a1.webpack.hot-update.json b/.next/static/webpack/505dd85efd94f5a1.webpack.hot-update.json deleted file mode 100644 index 31f1cde..0000000 --- a/.next/static/webpack/505dd85efd94f5a1.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/5733fa94b307a5ba.webpack.hot-update.json b/.next/static/webpack/5733fa94b307a5ba.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/5733fa94b307a5ba.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/83e62d88b00e9127.webpack.hot-update.json b/.next/static/webpack/83e62d88b00e9127.webpack.hot-update.json deleted file mode 100644 index 31f1cde..0000000 --- a/.next/static/webpack/83e62d88b00e9127.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/96a4c04f3af3cc7f.webpack.hot-update.json b/.next/static/webpack/96a4c04f3af3cc7f.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/96a4c04f3af3cc7f.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/3e0083886b2f1753.webpack.hot-update.json b/.next/static/webpack/9771b72cd14e6ad2.webpack.hot-update.json similarity index 100% rename from .next/static/webpack/3e0083886b2f1753.webpack.hot-update.json rename to .next/static/webpack/9771b72cd14e6ad2.webpack.hot-update.json diff --git a/.next/static/webpack/a73da2d4cd917396.webpack.hot-update.json b/.next/static/webpack/a73da2d4cd917396.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/a73da2d4cd917396.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.32693299354f3264.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.32693299354f3264.hot-update.js deleted file mode 100644 index c4727c4..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.32693299354f3264.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // NEW: filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // NEW: available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // NEW: filtered + sorted parts\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 149,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 152,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 148,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 147,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 146,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 169,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 177,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 181,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 180,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 183,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 176,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 190,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 202,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 189,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 175,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 168,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 226,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 230,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 251,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 243,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 236,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 272,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 273,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 275,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 264,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 257,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 223,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 283,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 287,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 291,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 307,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 312,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 317,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 301,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 322,\n columnNumber: 19\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 297,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 335,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 336,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 337,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 338,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 334,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"block\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 353,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 357,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 349,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 348,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 363,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 370,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"rounded-md bg-amber-400 text-black px-3 py-1.5 text-xs font-semibold hover:bg-amber-300 transition-colors whitespace-nowrap\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 376,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 369,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 347,\n columnNumber: 21\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 343,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 341,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 220,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 166,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 165,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"TCzyDO/Rdq+dZXo2cWnlf+kd3uc=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2U7QUFDUTtJQWlCbERNO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBRTFDLE1BQU1JLHlCQUF1RDtJQUMzREMsT0FBTztRQUFDO0tBQWlCO0lBQ3pCQyxRQUFRO1FBQUM7S0FBUztJQUNsQkMsV0FBVztRQUFDO0tBQVk7SUFDeEJDLGdCQUFnQjtRQUFDO0tBQWtCO0lBQ25DQyxRQUFRO1FBQUM7S0FBYTtJQUN0QkMsWUFBWTtRQUFDO0tBQWtCO0lBQy9CQyxRQUFRO1FBQUM7S0FBUTtBQUNuQjtBQUtlLFNBQVNDOztJQUN0QixNQUFNQyxTQUFTZiwwREFBU0E7SUFDeEIsTUFBTWdCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTSxDQUFDQyxVQUFVQyxZQUFZLEdBQUdwQiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUNxQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUVsRCwyQkFBMkI7SUFDM0IsTUFBTSxDQUFDMkIsYUFBYUMsZUFBZSxHQUFHNUIsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDNkIsUUFBUUMsVUFBVSxHQUFHOUIsK0NBQVFBLENBQWE7SUFFakQsTUFBTStCLFdBQVdoQyw4Q0FBT0EsQ0FDdEIsSUFBTUksNkRBQVVBLENBQUM2QixJQUFJLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUMsRUFBRSxLQUFLaEIsYUFDdEM7UUFBQ0E7S0FBVztJQUdkcEIsZ0RBQVNBLENB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LE1BQU0sZUFBNkJpQixPQUFkckYsWUFBVyxLQUFXLE9BQVJxRixLQUFLckUsRUFBRTtnRUFDMUNpRCxXQUFVOzBFQUNYOzs7Ozs7MEVBR0QsOERBQUNsRixpREFBSUE7Z0VBQ0hxRixNQUFNLHNCQUFvQ2lCLE9BQWRyRixZQUFXLEtBQVcsT0FBUnFGLEtBQUtyRSxFQUFFO2dFQUNqRGlELFdBQVU7MEVBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0FuQ0FvQixLQUFLckUsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpRGhDO0dBbld3QmxCOztRQUNQZCxzREFBU0E7OztLQURGYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3g/OGI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlUGFyYW1zIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5cbnR5cGUgVmlld01vZGUgPSBcImNhcmRcIiB8IFwibGlzdFwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuY29uc3QgQ0FURUdPUllfVE9fUEFSVF9ST0xFUzogUmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZ1tdPiA9IHtcbiAgdXBwZXI6IFtcInVwcGVyLXJlY2VpdmVyXCJdLFxuICBiYXJyZWw6IFtcImJhcnJlbFwiXSxcbiAgaGFuZGd1YXJkOiBbXCJoYW5kZ3VhcmRcIl0sXG4gIGNoYXJnaW5nSGFuZGxlOiBbXCJjaGFyZ2luZy1oYW5kbGVcIl0sXG4gIGJ1ZmZlcjogW1wiYnVmZmVyLWtpdFwiXSxcbiAgbG93ZXJQYXJ0czogW1wibG93ZXItcGFydHMta2l0XCJdLFxuICBzaWdodHM6IFtcInNpZ2h0XCJdLFxufTtcblxuLy8gTkVXOiBzb3J0IG9wdGlvbnNcbnR5cGUgU29ydE9wdGlvbiA9IFwicmVsZXZhbmNlXCIgfCBcInByaWNlLWFzY1wiIHwgXCJwcmljZS1kZXNjXCIgfCBcImJyYW5kLWFzY1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYXRlZ29yeVBhZ2UoKSB7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCBjYXRlZ29yeUlkID0gcGFyYW1zLmNhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZDtcbiAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZTxWaWV3TW9kZT4oXCJsaXN0XCIpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBORVc6IGZpbHRlciArIHNvcnQgc3RhdGVcbiAgY29uc3QgW2JyYW5kRmlsdGVyLCBzZXRCcmFuZEZpbHRlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiYWxsXCIpO1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydE9wdGlvbj4oXCJyZWxldmFuY2VcIik7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSB1c2VNZW1vKFxuICAgICgpID0+IENBVEVHT1JJRVMuZmluZCgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgW2NhdGVnb3J5SWRdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXRlZ29yeVBhcnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm9sZXMgPSBDQVRFR09SWV9UT19QQVJUX1JPTEVTW2NhdGVnb3J5SWRdID8/IFtdO1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgc2VhcmNoLnNldChcInBsYXRmb3JtXCIsIFwiQVItMTVcIik7XG4gICAgICAgIHJvbGVzLmZvckVhY2goKHIpID0+IHNlYXJjaC5hcHBlbmQoXCJwYXJ0Um9sZXNcIiwgcikpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXIke1xuICAgICAgICAgIHJvbGVzLmxlbmd0aCA/IGA/JHtzZWFyY2gudG9TdHJpbmcoKX1gIDogXCJcIlxuICAgICAgICB9YDtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YS5tYXAoKHApID0+ICh7XG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoQ2F0ZWdvcnlQYXJ0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW2NhdGVnb3J5SWRdKTtcblxuICAvLyBORVc6IGF2YWlsYWJsZSBicmFuZHMgZm9yIGZpbHRlclxuICBjb25zdCBhdmFpbGFibGVCcmFuZHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBBcnJheS5mcm9tKG5ldyBTZXQocGFydHMubWFwKChwKSA9PiBwLmJyYW5kKSkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSksXG4gICAgW3BhcnRzXSxcbiAgKTtcblxuICAvLyBORVc6IGZpbHRlcmVkICsgc29ydGVkIHBhcnRzXG4gIGNvbnN0IGZpbHRlcmVkUGFydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gWy4uLnBhcnRzXTtcblxuICAgIGlmIChicmFuZEZpbHRlciAhPT0gXCJhbGxcIikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5icmFuZCA9PT0gYnJhbmRGaWx0ZXIpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc29ydEJ5KSB7XG4gICAgICBjYXNlIFwicHJpY2UtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInByaWNlLWRlc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnJhbmQtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmJyYW5kLmxvY2FsZUNvbXBhcmUoYi5icmFuZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWxldmFuY2VcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGxlYXZlIGluIGJhY2tlbmQgb3JkZXJcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW3BhcnRzLCBicmFuZEZpbHRlciwgc29ydEJ5XSk7XG5cbiAgaWYgKCFjYXRlZ29yeSkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgQ2F0ZWdvcnkgTm90IEZvdW5kXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmV0dXJuIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX0gPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5QYXJ0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgICBCcm93c2UgYWxsIGF2YWlsYWJsZSB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfSBvcHRpb25zIGZvclxuICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQsIHB1bGxlZCBsaXZlIGZyb20geW91ciBCYWxsaXN0aWMgYmFja2VuZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTIgYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMSBiZy16aW5jLTk1MC82MFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJjYXJkXCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImNhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2FyZCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYXJkXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImxpc3RcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJMaXN0IHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIExpc3RcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogUGFydHMgR3JpZC9MaXN0ICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHsvKiBORVc6IGZpbHRlciArIHNvcnQgdG9vbGJhciAqL31cbiAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00IGZsZXggZmxleC1jb2wgZ2FwLTMgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNob3dpbmd7XCIgXCJ9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTIwMCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgb2Z7XCIgXCJ9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTIwMCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAge3BhcnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgIHBhcnRzXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9XCJicmFuZC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBCcmFuZFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJicmFuZC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YnJhbmRGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0QnJhbmRGaWx0ZXIoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNzAgdGV4dC14cyB0ZXh0LXppbmMtMjAwIHB4LTIgcHktMSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctYW1iZXItNDAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPkFsbCBicmFuZHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAge2F2YWlsYWJsZUJyYW5kcy5tYXAoKGIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17Yn0gdmFsdWU9e2J9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2J9XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgU29ydFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NvcnRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnRCeShlLnRhcmdldC52YWx1ZSBhcyBTb3J0T3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVsZXZhbmNlXCI+UmVsZXZhbmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1hc2NcIj5QcmljZTogTG93IOKGkiBIaWdoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1kZXNjXCI+UHJpY2U6IEhpZ2gg4oaSIExvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJhbmQtYXNjXCI+QnJhbmQ6IEEg4oaSIFo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZmlsdGVyZWRQYXJ0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBObyBwYXJ0cyBhdmFpbGFibGUgZm9yIHRoaXMgY2F0ZWdvcnkgeWV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiB2aWV3TW9kZSA9PT0gXCJjYXJkXCIgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ3JvdXAgcmVsYXRpdmUgYm9yZGVyIGJvcmRlci16aW5jLTcwMCByb3VuZGVkLW1kIHAtMyBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZmxleCBmbGV4LWNvbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyP3NlbGVjdD0ke2NhdGVnb3J5SWR9OiR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTFcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbm9ybWFsXCI+4oCUIHtwYXJ0Lm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7LyogTkVXOiBoZWFkZXIgcm93IGZvciBsaXN0IHZpZXcgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmdyaWQgZ3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBnYXAtNCBweC0zIHBiLTIgdGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlBhcnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+QnJhbmQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodFwiPlByaWNlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHQgcHItMlwiPkFjdGlvbnM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17cGFydC5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ3JvdXAgcmVsYXRpdmUgYm9yZGVyIGJvcmRlci16aW5jLTcwMCByb3VuZGVkLW1kIHAtMyBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6Z3JpZCBtZDpncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIG1kOml0ZW1zLWNlbnRlciBtZDpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlcj9zZWxlY3Q9JHtjYXRlZ29yeUlkfToke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBtZDp0ZXh0LXNtIHRleHQtemluYy00MDAgbWQ6dGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCBtZDp0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyP3NlbGVjdD0ke2NhdGVnb3J5SWR9OiR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1zZW1pYm9sZCBob3ZlcjpiZy1hbWJlci0zMDAgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgdG8gQnVpbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkxpbmsiLCJ1c2VQYXJhbXMiLCJDQVRFR09SSUVTIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIkNBVEVHT1JZX1RPX1BBUlRfUk9MRVMiLCJ1cHBlciIsImJhcnJlbCIsImhhbmRndWFyZCIsImNoYXJnaW5nSGFuZGxlIiwiYnVmZmVyIiwibG93ZXJQYXJ0cyIsInNpZ2h0cyIsIkNhdGVnb3J5UGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJ2aWV3TW9kZSIsInNldFZpZXdNb2RlIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJyYW5kRmlsdGVyIiwic2V0QnJhbmRGaWx0ZXIiLCJzb3J0QnkiLCJzZXRTb3J0QnkiLCJjYXRlZ29yeSIsImZpbmQiLCJjIiwiaWQiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hDYXRlZ29yeVBhcnRzIiwicm9sZXMiLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJmb3JFYWNoIiwiciIsImFwcGVuZCIsInVybCIsImxlbmd0aCIsInRvU3RyaW5nIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJidXlVcmwiLCJub3RlcyIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsImF2YWlsYWJsZUJyYW5kcyIsIkFycmF5IiwiZnJvbSIsIlNldCIsImZpbHRlciIsIkJvb2xlYW4iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZmlsdGVyZWRQYXJ0cyIsInJlc3VsdCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoMSIsImhyZWYiLCJoZWFkZXIiLCJzcGFuIiwidG9Mb3dlckNhc2UiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImFyaWEtbGFiZWwiLCJzZWN0aW9uIiwibGFiZWwiLCJodG1sRm9yIiwic2VsZWN0IiwidmFsdWUiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJvcHRpb24iLCJwYXJ0IiwidG9GaXhlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.385ea9265ba687b2.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.385ea9265ba687b2.hot-update.js deleted file mode 100644 index 5523a9e..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.385ea9265ba687b2.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // NEW: filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n // NEW: build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // NEW: persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // NEW: handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // NEW: available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // NEW: filtered + sorted parts\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 200,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 196,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 195,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 194,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 225,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 229,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 228,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 231,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 250,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 223,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 278,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 272,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 285,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 297,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 291,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 284,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 317,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 318,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 319,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 320,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 283,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 271,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 328,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 332,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 353,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 356,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 350,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 361,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 349,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 372,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 365,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 345,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 392,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 393,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 394,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 395,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 391,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 409,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 413,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 408,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 418,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 421,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 425,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 431,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 424,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 407,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 398,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 268,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 214,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 213,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"pJYAu1Vs5wLdusWqq2Thip72pdg=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7QUFDbkI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCwyQkFBMkI7SUFDM0IsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFFakQsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQ2tDLE9BQU9DLFNBQVMsR0FBR25DLCtDQUFRQSxDQUFhO1FBQzdDLElBQUksS0FBNkIsRUFB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RUFDYiw4REFBQ3JHLGlEQUFJQTtnRUFDSHdHLE1BQU0sZUFBNkJpQixPQUFkdEcsWUFBVyxLQUFXLE9BQVJzRyxLQUFLN0UsRUFBRTtnRUFDMUN5RCxXQUFVOzBFQUNYOzs7Ozs7MEVBR0QsOERBQUNPO2dFQUNDQyxNQUFLO2dFQUNMQyxTQUFTLElBQ1A1QixpQkFBaUIvRCxZQUFZc0csS0FBSzdFLEVBQUU7Z0VBRXRDeUQsV0FBVyxvRkFJVixPQUhDakIsYUFDSSx1RUFDQTswRUFHTEEsYUFBYSxzQkFBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0F0Q3JDcUMsS0FBSzdFLEVBQUU7Ozs7O29DQTRDbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEI7R0E5WndCM0I7O1FBQ1BoQixzREFBU0E7UUFFVEMsc0RBQVNBOzs7S0FIRmUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvW2NhdGVnb3J5SWRdL3BhZ2UudHN4PzhiNWQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5cbnR5cGUgVmlld01vZGUgPSBcImNhcmRcIiB8IFwibGlzdFwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuY29uc3QgQ0FURUdPUllfVE9fUEFSVF9ST0xFUzogUmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZ1tdPiA9IHtcbiAgdXBwZXI6IFtcInVwcGVyLXJlY2VpdmVyXCJdLFxuICBiYXJyZWw6IFtcImJhcnJlbFwiXSxcbiAgaGFuZGd1YXJkOiBbXCJoYW5kZ3VhcmRcIl0sXG4gIGNoYXJnaW5nSGFuZGxlOiBbXCJjaGFyZ2luZy1oYW5kbGVcIl0sXG4gIGJ1ZmZlcjogW1wiYnVmZmVyLWtpdFwiXSxcbiAgbG93ZXJQYXJ0czogW1wibG93ZXItcGFydHMta2l0XCJdLFxuICBzaWdodHM6IFtcInNpZ2h0XCJdLFxufTtcblxuLy8gTkVXOiBzb3J0IG9wdGlvbnNcbnR5cGUgU29ydE9wdGlvbiA9IFwicmVsZXZhbmNlXCIgfCBcInByaWNlLWFzY1wiIHwgXCJwcmljZS1kZXNjXCIgfCBcImJyYW5kLWFzY1wiO1xuXG4vLyBORVc6IGJ1aWxkIHN0YXRlIHR5cGUgKyBzdG9yYWdlIGtleSAobWF0Y2hlcyAvZ3VuYnVpbGRlcilcbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+O1xuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2F0ZWdvcnlQYWdlKCkge1xuICBjb25zdCBwYXJhbXMgPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgY2F0ZWdvcnlJZCA9IHBhcmFtcy5jYXRlZ29yeUlkIGFzIENhdGVnb3J5SWQ7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuXG4gIGNvbnN0IFt2aWV3TW9kZSwgc2V0Vmlld01vZGVdID0gdXNlU3RhdGU8Vmlld01vZGU+KFwibGlzdFwiKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gTkVXOiBmaWx0ZXIgKyBzb3J0IHN0YXRlXG4gIGNvbnN0IFticmFuZEZpbHRlciwgc2V0QnJhbmRGaWx0ZXJdID0gdXNlU3RhdGU8c3RyaW5nPihcImFsbFwiKTtcbiAgY29uc3QgW3NvcnRCeSwgc2V0U29ydEJ5XSA9IHVzZVN0YXRlPFNvcnRPcHRpb24+KFwicmVsZXZhbmNlXCIpO1xuXG4gIC8vIE5FVzogYnVpbGQgc3RhdGUgZm9yIHRoaXMgcGFnZSwgc3luY2VkIHdpdGggbG9jYWxTdG9yYWdlXG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4ge307XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICByZXR1cm4gc3RvcmVkID8gKEpTT04ucGFyc2Uoc3RvcmVkKSBhcyBCdWlsZFN0YXRlKSA6IHt9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSB1c2VNZW1vKFxuICAgICgpID0+IENBVEVHT1JJRVMuZmluZCgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgW2NhdGVnb3J5SWRdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXRlZ29yeVBhcnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm9sZXMgPSBDQVRFR09SWV9UT19QQVJUX1JPTEVTW2NhdGVnb3J5SWRdID8/IFtdO1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgc2VhcmNoLnNldChcInBsYXRmb3JtXCIsIFwiQVItMTVcIik7XG4gICAgICAgIHJvbGVzLmZvckVhY2goKHIpID0+IHNlYXJjaC5hcHBlbmQoXCJwYXJ0Um9sZXNcIiwgcikpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXIke1xuICAgICAgICAgIHJvbGVzLmxlbmd0aCA/IGA/JHtzZWFyY2gudG9TdHJpbmcoKX1gIDogXCJcIlxuICAgICAgICB9YDtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YS5tYXAoKHApID0+ICh7XG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoQ2F0ZWdvcnlQYXJ0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW2NhdGVnb3J5SWRdKTtcblxuICAvLyBORVc6IHBlcnNpc3QgYnVpbGQgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIC8vIE5FVzogaGFuZGxlciB0byB0b2dnbGUgQWRkIC8gUmVtb3ZlIGZvciB0aGlzIGNhdGVnb3J5XG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnRJZDtcblxuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAvLyBSZW1vdmUgZnJvbSBidWlsZFxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZDogQnVpbGRTdGF0ZSA9IHsgLi4ucHJldiB9O1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtjYXRlZ29yeUlkXTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIHRvIGJ1aWxkIGFuZCBuYXZpZ2F0ZSBiYWNrIHRvIG1haW4gZ3VuYnVpbGRlciBwYWdlXG4gICAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICB9KSk7XG4gICAgICByb3V0ZXIucHVzaChcIi9ndW5idWlsZGVyXCIpO1xuICAgIH1cbiAgfTtcblxuICAvLyBORVc6IGF2YWlsYWJsZSBicmFuZHMgZm9yIGZpbHRlclxuICBjb25zdCBhdmFpbGFibGVCcmFuZHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBBcnJheS5mcm9tKG5ldyBTZXQocGFydHMubWFwKChwKSA9PiBwLmJyYW5kKSkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSksXG4gICAgW3BhcnRzXSxcbiAgKTtcblxuICAvLyBORVc6IGZpbHRlcmVkICsgc29ydGVkIHBhcnRzXG4gIGNvbnN0IGZpbHRlcmVkUGFydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gWy4uLnBhcnRzXTtcblxuICAgIGlmIChicmFuZEZpbHRlciAhPT0gXCJhbGxcIikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5icmFuZCA9PT0gYnJhbmRGaWx0ZXIpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc29ydEJ5KSB7XG4gICAgICBjYXNlIFwicHJpY2UtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInByaWNlLWRlc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnJhbmQtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmJyYW5kLmxvY2FsZUNvbXBhcmUoYi5icmFuZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWxldmFuY2VcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGxlYXZlIGluIGJhY2tlbmQgb3JkZXJcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW3BhcnRzLCBicmFuZEZpbHRlciwgc29ydEJ5XSk7XG5cbiAgaWYgKCFjYXRlZ29yeSkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgQ2F0ZWdvcnkgTm90IEZvdW5kXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmV0dXJuIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX0gPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5QYXJ0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgICBCcm93c2UgYWxsIGF2YWlsYWJsZSB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfSBvcHRpb25zIGZvclxuICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQsIHB1bGxlZCBsaXZlIGZyb20geW91ciBCYWxsaXN0aWMgYmFja2VuZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTIgYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMSBiZy16aW5jLTk1MC82MFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJjYXJkXCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImNhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2FyZCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYXJkXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImxpc3RcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJMaXN0IHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIExpc3RcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogUGFydHMgR3JpZC9MaXN0ICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHsvKiBGaWx0ZXIgKyBzb3J0IHRvb2xiYXIgKi99XG4gICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCBmbGV4IGZsZXgtY29sIGdhcC0zIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaG93aW5ne1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgIG9me1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtwYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBodG1sRm9yPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQnJhbmRcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2JyYW5kRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEJyYW5kRmlsdGVyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhbGxcIj5BbGwgYnJhbmRzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHthdmFpbGFibGVCcmFuZHMubWFwKChiKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2J9IHZhbHVlPXtifT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtifVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwic29ydC1ieVwiIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICBTb3J0XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cInNvcnQtYnlcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c29ydEJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U29ydEJ5KGUudGFyZ2V0LnZhbHVlIGFzIFNvcnRPcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWxldmFuY2VcIj5SZWxldmFuY2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWFzY1wiPlByaWNlOiBMb3cg4oaSIEhpZ2g8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWRlc2NcIj5QcmljZTogSGlnaCDihpIgTG93PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJicmFuZC1hc2NcIj5CcmFuZDogQSDihpIgWjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAgTG9hZGluZyB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfeKAplxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBmaWx0ZXJlZFBhcnRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIE5vIHBhcnRzIGF2YWlsYWJsZSBmb3IgdGhpcyBjYXRlZ29yeSB5ZXQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IHZpZXdNb2RlID09PSBcImNhcmRcIiA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnQuaWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdyb3VwIHJlbGF0aXZlIGJvcmRlciBib3JkZXItemluYy03MDAgcm91bmRlZC1tZCBwLTMgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGZsZXggZmxleC1jb2xcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbm9ybWFsXCI+4oCUIHtwYXJ0Lm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlVG9nZ2xlUGFydChjYXRlZ29yeUlkLCBwYXJ0LmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGZsZXgtMSByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtMTAwIGJvcmRlciBib3JkZXItemluYy02MDAgaG92ZXI6YmctemluYy03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBcIlJlbW92ZSBmcm9tIEJ1aWxkXCIgOiBcIkFkZCB0byBCdWlsZFwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHsvKiBIZWFkZXIgcm93IGZvciBsaXN0IHZpZXcgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmdyaWQgZ3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBnYXAtNCBweC0zIHBiLTIgdGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlBhcnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+QnJhbmQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodFwiPlByaWNlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHQgcHItMlwiPkFjdGlvbnM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnQuaWQ7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ3JvdXAgcmVsYXRpdmUgYm9yZGVyIGJvcmRlci16aW5jLTcwMCByb3VuZGVkLW1kIHAtMyBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmdyaWQgbWQ6Z3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBtZDppdGVtcy1jZW50ZXIgbWQ6Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIG1kOnRleHQtc20gdGV4dC16aW5jLTQwMCBtZDp0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIG1kOnRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlUGFydChjYXRlZ29yeUlkLCBwYXJ0LmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNjAwIGhvdmVyOmJnLXppbmMtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWxlY3RlZCA/IFwiUmVtb3ZlIGZyb20gQnVpbGRcIiA6IFwiQWRkIHRvIEJ1aWxkXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkxpbmsiLCJ1c2VQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIkNBVEVHT1JZX1RPX1BBUlRfUk9MRVMiLCJ1cHBlciIsImJhcnJlbCIsImhhbmRndWFyZCIsImNoYXJnaW5nSGFuZGxlIiwiYnVmZmVyIiwibG93ZXJQYXJ0cyIsInNpZ2h0cyIsIlNUT1JBR0VfS0VZIiwiQ2F0ZWdvcnlQYWdlIiwicGFyYW1zIiwiY2F0ZWdvcnlJZCIsInJvdXRlciIsInZpZXdNb2RlIiwic2V0Vmlld01vZGUiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnJhbmRGaWx0ZXIiLCJzZXRCcmFuZEZpbHRlciIsInNvcnRCeSIsInNldFNvcnRCeSIsImJ1aWxkIiwic2V0QnVpbGQiLCJzdG9yZWQiLCJ3aW5kb3ciLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwiY2F0ZWdvcnkiLCJmaW5kIiwiYyIsImlkIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoQ2F0ZWdvcnlQYXJ0cyIsInJvbGVzIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwic2V0IiwiZm9yRWFjaCIsInIiLCJhcHBlbmQiLCJ1cmwiLCJsZW5ndGgiLCJ0b1N0cmluZyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwiYnV5VXJsIiwibm90ZXMiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiaGFuZGxlVG9nZ2xlUGFydCIsInBhcnRJZCIsImlzU2VsZWN0ZWQiLCJwcmV2IiwidXBkYXRlZCIsInB1c2giLCJhdmFpbGFibGVCcmFuZHMiLCJBcnJheSIsImZyb20iLCJTZXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImZpbHRlcmVkUGFydHMiLCJyZXN1bHQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaDEiLCJocmVmIiwiaGVhZGVyIiwic3BhbiIsInRvTG93ZXJDYXNlIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwic2VjdGlvbiIsImxhYmVsIiwiaHRtbEZvciIsInNlbGVjdCIsInZhbHVlIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0Iiwib3B0aW9uIiwicGFydCIsInRvRml4ZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.4528b572b2c1fb3a.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.4528b572b2c1fb3a.hot-update.js deleted file mode 100644 index 7e31d37..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.4528b572b2c1fb3a.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // NEW: filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // NEW: available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // NEW: filtered + sorted parts\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 149,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 152,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 148,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 147,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 146,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 169,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 177,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 181,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 180,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 183,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 176,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 190,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 202,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 189,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 175,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 168,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 226,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 230,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 251,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 243,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 236,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 272,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 273,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 275,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 264,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 257,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 223,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 283,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 287,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 291,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 303,\n columnNumber: 23\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 308,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 302,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 313,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 301,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 318,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"flex-1 rounded-md bg-amber-400 text-black px-3 py-2 text-xs font-semibold hover:bg-amber-300 transition-colors text-center\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 324,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 317,\n columnNumber: 19\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 297,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 338,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 339,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 341,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 337,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"block\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 356,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 360,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 352,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 369,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 373,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"rounded-md bg-amber-400 text-black px-3 py-1.5 text-xs font-semibold hover:bg-amber-300 transition-colors whitespace-nowrap\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 379,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 372,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 350,\n columnNumber: 21\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 346,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 344,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 220,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 166,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 165,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"TCzyDO/Rdq+dZXo2cWnlf+kd3uc=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2U7QUFDUTtJQWlCbERNO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBRTFDLE1BQU1JLHlCQUF1RDtJQUMzREMsT0FBTztRQUFDO0tBQWlCO0lBQ3pCQyxRQUFRO1FBQUM7S0FBUztJQUNsQkMsV0FBVztRQUFDO0tBQVk7SUFDeEJDLGdCQUFnQjtRQUFDO0tBQWtCO0lBQ25DQyxRQUFRO1FBQUM7S0FBYTtJQUN0QkMsWUFBWTtRQUFDO0tBQWtCO0lBQy9CQyxRQUFRO1FBQUM7S0FBUTtBQUNuQjtBQUtlLFNBQVNDOztJQUN0QixNQUFNQyxTQUFTZiwwREFBU0E7SUFDeEIsTUFBTWdCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTSxDQUFDQyxVQUFVQyxZQUFZLEdBQUdwQiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUNxQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUVsRCwyQkFBMkI7SUFDM0IsTUFBTSxDQUFDMkIsYUFBYUMsZUFBZSxHQUFHNUIsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDNkIsUUFBUUMsVUFBVSxHQUFHOUIsK0NBQVFBLENBQWE7SUFFakQsTUFBTStCLFdBQVdoQyw4Q0FBT0EsQ0FDdEIsSUFBTUksNkRBQVVBLENBQUM2QixJQUFJLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUMsRUFBRSxLQUFLaEIsYUFDdEM7UUFBQ0E7S0FBVztJQUdkcEIsZ0RBQVNBLENB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QUFJRCxXQUFVOzswRUFDYiw4REFBQ2xGLGlEQUFJQTtnRUFDSHFGLE1BQU0sZUFBNkJpQixPQUFkckYsWUFBVyxLQUFXLE9BQVJxRixLQUFLckUsRUFBRTtnRUFDMUNpRCxXQUFVOzBFQUNYOzs7Ozs7MEVBR0QsOERBQUNsRixpREFBSUE7Z0VBQ0hxRixNQUFNLHNCQUFvQ2lCLE9BQWRyRixZQUFXLEtBQVcsT0FBUnFGLEtBQUtyRSxFQUFFO2dFQUNqRGlELFdBQVU7MEVBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0FuQ0FvQixLQUFLckUsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpRGhDO0dBdFd3QmxCOztRQUNQZCxzREFBU0E7OztLQURGYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3g/OGI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlUGFyYW1zIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5cbnR5cGUgVmlld01vZGUgPSBcImNhcmRcIiB8IFwibGlzdFwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuY29uc3QgQ0FURUdPUllfVE9fUEFSVF9ST0xFUzogUmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZ1tdPiA9IHtcbiAgdXBwZXI6IFtcInVwcGVyLXJlY2VpdmVyXCJdLFxuICBiYXJyZWw6IFtcImJhcnJlbFwiXSxcbiAgaGFuZGd1YXJkOiBbXCJoYW5kZ3VhcmRcIl0sXG4gIGNoYXJnaW5nSGFuZGxlOiBbXCJjaGFyZ2luZy1oYW5kbGVcIl0sXG4gIGJ1ZmZlcjogW1wiYnVmZmVyLWtpdFwiXSxcbiAgbG93ZXJQYXJ0czogW1wibG93ZXItcGFydHMta2l0XCJdLFxuICBzaWdodHM6IFtcInNpZ2h0XCJdLFxufTtcblxuLy8gTkVXOiBzb3J0IG9wdGlvbnNcbnR5cGUgU29ydE9wdGlvbiA9IFwicmVsZXZhbmNlXCIgfCBcInByaWNlLWFzY1wiIHwgXCJwcmljZS1kZXNjXCIgfCBcImJyYW5kLWFzY1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYXRlZ29yeVBhZ2UoKSB7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCBjYXRlZ29yeUlkID0gcGFyYW1zLmNhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZDtcbiAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZTxWaWV3TW9kZT4oXCJsaXN0XCIpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBORVc6IGZpbHRlciArIHNvcnQgc3RhdGVcbiAgY29uc3QgW2JyYW5kRmlsdGVyLCBzZXRCcmFuZEZpbHRlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiYWxsXCIpO1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydE9wdGlvbj4oXCJyZWxldmFuY2VcIik7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSB1c2VNZW1vKFxuICAgICgpID0+IENBVEVHT1JJRVMuZmluZCgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgW2NhdGVnb3J5SWRdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXRlZ29yeVBhcnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm9sZXMgPSBDQVRFR09SWV9UT19QQVJUX1JPTEVTW2NhdGVnb3J5SWRdID8/IFtdO1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgc2VhcmNoLnNldChcInBsYXRmb3JtXCIsIFwiQVItMTVcIik7XG4gICAgICAgIHJvbGVzLmZvckVhY2goKHIpID0+IHNlYXJjaC5hcHBlbmQoXCJwYXJ0Um9sZXNcIiwgcikpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXIke1xuICAgICAgICAgIHJvbGVzLmxlbmd0aCA/IGA/JHtzZWFyY2gudG9TdHJpbmcoKX1gIDogXCJcIlxuICAgICAgICB9YDtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YS5tYXAoKHApID0+ICh7XG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoQ2F0ZWdvcnlQYXJ0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW2NhdGVnb3J5SWRdKTtcblxuICAvLyBORVc6IGF2YWlsYWJsZSBicmFuZHMgZm9yIGZpbHRlclxuICBjb25zdCBhdmFpbGFibGVCcmFuZHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBBcnJheS5mcm9tKG5ldyBTZXQocGFydHMubWFwKChwKSA9PiBwLmJyYW5kKSkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSksXG4gICAgW3BhcnRzXSxcbiAgKTtcblxuICAvLyBORVc6IGZpbHRlcmVkICsgc29ydGVkIHBhcnRzXG4gIGNvbnN0IGZpbHRlcmVkUGFydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gWy4uLnBhcnRzXTtcblxuICAgIGlmIChicmFuZEZpbHRlciAhPT0gXCJhbGxcIikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5icmFuZCA9PT0gYnJhbmRGaWx0ZXIpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc29ydEJ5KSB7XG4gICAgICBjYXNlIFwicHJpY2UtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInByaWNlLWRlc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnJhbmQtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmJyYW5kLmxvY2FsZUNvbXBhcmUoYi5icmFuZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWxldmFuY2VcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGxlYXZlIGluIGJhY2tlbmQgb3JkZXJcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW3BhcnRzLCBicmFuZEZpbHRlciwgc29ydEJ5XSk7XG5cbiAgaWYgKCFjYXRlZ29yeSkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgQ2F0ZWdvcnkgTm90IEZvdW5kXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmV0dXJuIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX0gPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5QYXJ0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgICBCcm93c2UgYWxsIGF2YWlsYWJsZSB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfSBvcHRpb25zIGZvclxuICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQsIHB1bGxlZCBsaXZlIGZyb20geW91ciBCYWxsaXN0aWMgYmFja2VuZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTIgYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMSBiZy16aW5jLTk1MC82MFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJjYXJkXCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImNhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2FyZCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYXJkXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImxpc3RcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJMaXN0IHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIExpc3RcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogUGFydHMgR3JpZC9MaXN0ICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHsvKiBORVc6IGZpbHRlciArIHNvcnQgdG9vbGJhciAqL31cbiAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00IGZsZXggZmxleC1jb2wgZ2FwLTMgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNob3dpbmd7XCIgXCJ9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTIwMCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgb2Z7XCIgXCJ9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTIwMCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAge3BhcnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgIHBhcnRzXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9XCJicmFuZC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBCcmFuZFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJicmFuZC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YnJhbmRGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0QnJhbmRGaWx0ZXIoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNzAgdGV4dC14cyB0ZXh0LXppbmMtMjAwIHB4LTIgcHktMSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctYW1iZXItNDAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPkFsbCBicmFuZHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAge2F2YWlsYWJsZUJyYW5kcy5tYXAoKGIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17Yn0gdmFsdWU9e2J9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2J9XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgU29ydFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NvcnRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnRCeShlLnRhcmdldC52YWx1ZSBhcyBTb3J0T3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVsZXZhbmNlXCI+UmVsZXZhbmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1hc2NcIj5QcmljZTogTG93IOKGkiBIaWdoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1kZXNjXCI+UHJpY2U6IEhpZ2gg4oaSIExvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJhbmQtYXNjXCI+QnJhbmQ6IEEg4oaSIFo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZmlsdGVyZWRQYXJ0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBObyBwYXJ0cyBhdmFpbGFibGUgZm9yIHRoaXMgY2F0ZWdvcnkgeWV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiB2aWV3TW9kZSA9PT0gXCJjYXJkXCIgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ3JvdXAgcmVsYXRpdmUgYm9yZGVyIGJvcmRlci16aW5jLTcwMCByb3VuZGVkLW1kIHAtMyBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZmxleCBmbGV4LWNvbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ub3JtYWxcIj7igJQge3BhcnQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyP3NlbGVjdD0ke2NhdGVnb3J5SWR9OiR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLW1kIGJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgaG92ZXI6YmctYW1iZXItMzAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIEFkZCB0byBCdWlsZFxuICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgey8qIE5FVzogaGVhZGVyIHJvdyBmb3IgbGlzdCB2aWV3ICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpncmlkIGdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gZ2FwLTQgcHgtMyBwYi0yIHRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5QYXJ0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkJyYW5kPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHRcIj5QcmljZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0IHByLTJcIj5BY3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLm1hcCgocGFydCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdyb3VwIHJlbGF0aXZlIGJvcmRlciBib3JkZXItemluYy03MDAgcm91bmRlZC1tZCBwLTMgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yIG1kOmdyaWQgbWQ6Z3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBtZDppdGVtcy1jZW50ZXIgbWQ6Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXI/c2VsZWN0PSR7Y2F0ZWdvcnlJZH06JHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgbWQ6dGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1kOnRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgbWQ6dGV4dC1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlcj9zZWxlY3Q9JHtjYXRlZ29yeUlkfToke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBiZy1hbWJlci00MDAgdGV4dC1ibGFjayBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgaG92ZXI6YmctYW1iZXItMzAwIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIEJ1aWxkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJMaW5rIiwidXNlUGFyYW1zIiwiQ0FURUdPUklFUyIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJDQVRFR09SWV9UT19QQVJUX1JPTEVTIiwidXBwZXIiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJjaGFyZ2luZ0hhbmRsZSIsImJ1ZmZlciIsImxvd2VyUGFydHMiLCJzaWdodHMiLCJDYXRlZ29yeVBhZ2UiLCJwYXJhbXMiLCJjYXRlZ29yeUlkIiwidmlld01vZGUiLCJzZXRWaWV3TW9kZSIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJicmFuZEZpbHRlciIsInNldEJyYW5kRmlsdGVyIiwic29ydEJ5Iiwic2V0U29ydEJ5IiwiY2F0ZWdvcnkiLCJmaW5kIiwiYyIsImlkIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoQ2F0ZWdvcnlQYXJ0cyIsInJvbGVzIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwic2V0IiwiZm9yRWFjaCIsInIiLCJhcHBlbmQiLCJ1cmwiLCJsZW5ndGgiLCJ0b1N0cmluZyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwiYnV5VXJsIiwibm90ZXMiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJhdmFpbGFibGVCcmFuZHMiLCJBcnJheSIsImZyb20iLCJTZXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImZpbHRlcmVkUGFydHMiLCJyZXN1bHQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaDEiLCJocmVmIiwiaGVhZGVyIiwic3BhbiIsInRvTG93ZXJDYXNlIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwic2VjdGlvbiIsImxhYmVsIiwiaHRtbEZvciIsInNlbGVjdCIsInZhbHVlIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0Iiwib3B0aW9uIiwicGFydCIsInRvRml4ZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.48663096e2813c6e.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.48663096e2813c6e.hot-update.js deleted file mode 100644 index 7f07afe..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.48663096e2813c6e.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n/**\n * Map from category id -> Ballistic partRole(s)\n * Keep this in sync with whatever you’re using on the main /gunbuilder page.\n */ const CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.uuid,\n categoryId,\n name: p.name,\n brand: p.brandName,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n // these fields exist in the Part type even if you’re not using them yet\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 111,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 114,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 110,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 109,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 108,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 131,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 139,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 143,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 142,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 145,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 138,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 152,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 164,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 151,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 137,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 130,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 184,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 188,\n columnNumber: 13\n }, this) : parts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 192,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: parts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 210,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 208,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 213,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 207,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 206,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 202,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 223,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 rounded-md bg-amber-400/10 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-200 tracking-wide\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 231,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 230,\n columnNumber: 19\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 198,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 196,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: parts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"block\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 253,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 251,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 256,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 247,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 263,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 266,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 262,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 rounded-md bg-amber-400/10 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-200 tracking-wide\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 276,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 275,\n columnNumber: 19\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 241,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 182,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 128,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 127,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"G//oj+kZqKJFzeectyiyn6hCoEw=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2U7QUFDUTtJQWlCbERNO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBRTFDOzs7Q0FHQyxHQUNELE1BQU1JLHlCQUF1RDtJQUMzREMsT0FBTztRQUFDO0tBQWlCO0lBQ3pCQyxRQUFRO1FBQUM7S0FBUztJQUNsQkMsV0FBVztRQUFDO0tBQVk7SUFDeEJDLGdCQUFnQjtRQUFDO0tBQWtCO0lBQ25DQyxRQUFRO1FBQUM7S0FBYTtJQUN0QkMsWUFBWTtRQUFDO0tBQWtCO0lBQy9CQyxRQUFRO1FBQUM7S0FBUTtBQUNuQjtBQUVlLFNBQVNDOztJQUN0QixNQUFNQyxTQUFTZiwwREFBU0E7SUFDeEIsTUFBTWdCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTSxDQUFDQyxVQUFVQyxZQUFZLEdBQUdwQiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUNxQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUVsRCxNQUFNMkIsV0FBVzVCLDhDQUFPQSxDQUN0QixJQUFNSSw2REFBVUEsQ0FBQ3lCLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxFQUFFLEtBQUtaLGFBQ3RDO1FBQUNBO0tBQVc7SUFHZHBCLGdEQUFTQSxDQUFDO1FBQ1IsSUFBSSxDQUFDb0IsWUFBWTtRQUVqQixNQUFNYSxhQUFhLElBQUlDO1FBRXZCLGVBQWVDO1lBQ2IsSUFBSTtnQkFDRlQsV0FBVztnQkFDWEUsU0FBUztvQkFF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Ozs7OztrREFNTCw4REFBQ0M7d0NBQUlELFdBQVU7a0RBQ2IsNEVBQUNDOzRDQUFJRCxXQUFVO3NEQUFxRDs7Ozs7Ozs7Ozs7OytCQWxDakVZLEtBQUtuRCxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThDOUI7R0F6UHdCZDs7UUFDUGQsc0RBQVNBOzs7S0FERmMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvW2NhdGVnb3J5SWRdL3BhZ2UudHN4PzhiNWQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVBhcmFtcyB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG50eXBlIFZpZXdNb2RlID0gXCJjYXJkXCIgfCBcImxpc3RcIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbi8qKlxuICogTWFwIGZyb20gY2F0ZWdvcnkgaWQgLT4gQmFsbGlzdGljIHBhcnRSb2xlKHMpXG4gKiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHdoYXRldmVyIHlvdeKAmXJlIHVzaW5nIG9uIHRoZSBtYWluIC9ndW5idWlsZGVyIHBhZ2UuXG4gKi9cbmNvbnN0IENBVEVHT1JZX1RPX1BBUlRfUk9MRVM6IFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmdbXT4gPSB7XG4gIHVwcGVyOiBbXCJ1cHBlci1yZWNlaXZlclwiXSxcbiAgYmFycmVsOiBbXCJiYXJyZWxcIl0sXG4gIGhhbmRndWFyZDogW1wiaGFuZGd1YXJkXCJdLFxuICBjaGFyZ2luZ0hhbmRsZTogW1wiY2hhcmdpbmctaGFuZGxlXCJdLFxuICBidWZmZXI6IFtcImJ1ZmZlci1raXRcIl0sXG4gIGxvd2VyUGFydHM6IFtcImxvd2VyLXBhcnRzLWtpdFwiXSxcbiAgc2lnaHRzOiBbXCJzaWdodFwiXSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhdGVnb3J5UGFnZSgpIHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGNhdGVnb3J5SWQgPSBwYXJhbXMuY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkO1xuICBjb25zdCBbdmlld01vZGUsIHNldFZpZXdNb2RlXSA9IHVzZVN0YXRlPFZpZXdNb2RlPihcImxpc3RcIik7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGNhdGVnb3J5ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBDQVRFR09SSUVTLmZpbmQoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpLFxuICAgIFtjYXRlZ29yeUlkXSxcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2F0ZWdvcnlJZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoQ2F0ZWdvcnlQYXJ0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJvbGVzID0gQ0FURUdPUllfVE9fUEFSVF9ST0xFU1tjYXRlZ29yeUlkXSA/PyBbXTtcblxuICAgICAgICBjb25zdCBzZWFyY2ggPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgIHNlYXJjaC5zZXQoXCJwbGF0Zm9ybVwiLCBcIkFSLTE1XCIpO1xuICAgICAgICByb2xlcy5mb3JFYWNoKChyKSA9PiBzZWFyY2guYXBwZW5kKFwicGFydFJvbGVzXCIsIHIpKTtcblxuICAgICAgICBjb25zdCB1cmwgPSBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyJHtcbiAgICAgICAgICByb2xlcy5sZW5ndGggPyBgPyR7c2VhcmNoLnRvU3RyaW5nKCl9YCA6IFwiXCJcbiAgICAgICAgfWA7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGEubWFwKChwKSA9PiAoe1xuICAgICAgICAgIGlkOiBwLnV1aWQsXG4gICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgYnJhbmQ6IHAuYnJhbmROYW1lLFxuICAgICAgICAgIHByaWNlOiBwLnByaWNlID8/IDAsXG4gICAgICAgICAgLy8gdGhlc2UgZmllbGRzIGV4aXN0IGluIHRoZSBQYXJ0IHR5cGUgZXZlbiBpZiB5b3XigJlyZSBub3QgdXNpbmcgdGhlbSB5ZXRcbiAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoQ2F0ZWdvcnlQYXJ0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW2NhdGVnb3J5SWRdKTtcblxuICBpZiAoIWNhdGVnb3J5KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTAgbWItNFwiPlxuICAgICAgICAgICAgICBDYXRlZ29yeSBOb3QgRm91bmRcbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMCBob3Zlcjp0ZXh0LWFtYmVyLTIwMCB1bmRlcmxpbmVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBSZXR1cm4gdG8gR3VuYnVpbGRlclxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWFpbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwIG1iLTQgaW5saW5lLWJsb2NrXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICDihpAgQmFjayB0byBHdW5idWlsZGVyXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICAgIHtjYXRlZ29yeS5uYW1lfSA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlBhcnRzPC9zcGFuPlxuICAgICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICAgIEJyb3dzZSBhbGwgYXZhaWxhYmxlIHtjYXRlZ29yeS5uYW1lLnRvTG93ZXJDYXNlKCl9IG9wdGlvbnMgZm9yXG4gICAgICAgICAgICAgICAgeW91ciBidWlsZCwgcHVsbGVkIGxpdmUgZnJvbSB5b3VyIEJhbGxpc3RpYyBiYWNrZW5kLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMiBib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0xIGJnLXppbmMtOTUwLzYwXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImNhcmRcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwiY2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDYXJkIHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIENhcmRcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwibGlzdFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJsaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkxpc3Qgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgTGlzdFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBQYXJ0cyBHcmlkL0xpc3QgKi99XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBMb2FkaW5nIHtjYXRlZ29yeS5uYW1lLnRvTG93ZXJDYXNlKCl94oCmXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IGVycm9yID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICB7ZXJyb3J9IOKAlCBjaGVjayB0aGF0IHRoZSBCYWxsaXN0aWMgQVBJIGlzIHJ1bm5pbmcuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IHBhcnRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIE5vIHBhcnRzIGF2YWlsYWJsZSBmb3IgdGhpcyBjYXRlZ29yeSB5ZXQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IHZpZXdNb2RlID09PSBcImNhcmRcIiA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICB7cGFydHMubWFwKChwYXJ0KSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ3JvdXAgcmVsYXRpdmUgYm9yZGVyIGJvcmRlci16aW5jLTcwMCByb3VuZGVkLW1kIHAtMyBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZmxleCBmbGV4LWNvbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyP3NlbGVjdD0ke2NhdGVnb3J5SWR9OiR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTFcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbm9ybWFsXCI+4oCUIHtwYXJ0Lm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgey8qIEhvdmVyIE92ZXJsYXkgKi99XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgcm91bmRlZC1tZCBiZy1hbWJlci00MDAvMTAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTIwMCB0cmFja2luZy13aWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIEJ1aWxkXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIHtwYXJ0cy5tYXAoKHBhcnQpID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJncm91cCByZWxhdGl2ZSBib3JkZXIgYm9yZGVyLXppbmMtNzAwIHJvdW5kZWQtbWQgcC0zIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXI/c2VsZWN0PSR7Y2F0ZWdvcnlJZH06JHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ub3JtYWxcIj7igJQge3BhcnQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgey8qIEhvdmVyIE92ZXJsYXkgKi99XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgcm91bmRlZC1tZCBiZy1hbWJlci00MDAvMTAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTIwMCB0cmFja2luZy13aWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIEJ1aWxkXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJMaW5rIiwidXNlUGFyYW1zIiwiQ0FURUdPUklFUyIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJDQVRFR09SWV9UT19QQVJUX1JPTEVTIiwidXBwZXIiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJjaGFyZ2luZ0hhbmRsZSIsImJ1ZmZlciIsImxvd2VyUGFydHMiLCJzaWdodHMiLCJDYXRlZ29yeVBhZ2UiLCJwYXJhbXMiLCJjYXRlZ29yeUlkIiwidmlld01vZGUiLCJzZXRWaWV3TW9kZSIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJjYXRlZ29yeSIsImZpbmQiLCJjIiwiaWQiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hDYXRlZ29yeVBhcnRzIiwicm9sZXMiLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJmb3JFYWNoIiwiciIsImFwcGVuZCIsInVybCIsImxlbmd0aCIsInRvU3RyaW5nIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsInV1aWQiLCJuYW1lIiwiYnJhbmQiLCJicmFuZE5hbWUiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwiYnV5VXJsIiwibm90ZXMiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaDEiLCJocmVmIiwiaGVhZGVyIiwic3BhbiIsInRvTG93ZXJDYXNlIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwic2VjdGlvbiIsInBhcnQiLCJ0b0ZpeGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.5733fa94b307a5ba.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.5733fa94b307a5ba.hot-update.js deleted file mode 100644 index 3853586..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.5733fa94b307a5ba.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n/**\n * Map from category id -> Ballistic partRole(s)\n * Keep this in sync with whatever you’re using on the main /gunbuilder page.\n */ const CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n // 🔑 Normalize into your Part type using *id* and *brand*\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 111,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 114,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 110,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 109,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 108,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 131,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 139,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 143,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 142,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 145,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 138,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 152,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 164,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 151,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 137,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 130,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 184,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 188,\n columnNumber: 13\n }, this) : parts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 192,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: parts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 210,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 208,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 213,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 207,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 206,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 202,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 223,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 rounded-md bg-amber-400/10 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-200 tracking-wide\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 231,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 230,\n columnNumber: 19\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 198,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 196,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: parts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"block\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 253,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 251,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 256,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 247,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 263,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 266,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 262,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 rounded-md bg-amber-400/10 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-200 tracking-wide\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 276,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 275,\n columnNumber: 19\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 241,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 182,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 128,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 127,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"G//oj+kZqKJFzeectyiyn6hCoEw=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2U7QUFDUTtJQWlCbERNO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBRTFDOzs7Q0FHQyxHQUNELE1BQU1JLHlCQUF1RDtJQUMzREMsT0FBTztRQUFDO0tBQWlCO0lBQ3pCQyxRQUFRO1FBQUM7S0FBUztJQUNsQkMsV0FBVztRQUFDO0tBQVk7SUFDeEJDLGdCQUFnQjtRQUFDO0tBQWtCO0lBQ25DQyxRQUFRO1FBQUM7S0FBYTtJQUN0QkMsWUFBWTtRQUFDO0tBQWtCO0lBQy9CQyxRQUFRO1FBQUM7S0FBUTtBQUNuQjtBQUVlLFNBQVNDOztJQUN0QixNQUFNQyxTQUFTZiwwREFBU0E7SUFDeEIsTUFBTWdCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTSxDQUFDQyxVQUFVQyxZQUFZLEdBQUdwQiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUNxQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUVsRCxNQUFNMkIsV0FBVzVCLDhDQUFPQSxDQUN0QixJQUFNSSw2REFBVUEsQ0FBQ3lCLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxFQUFFLEtBQUtaLGFBQ3RDO1FBQUNBO0tBQVc7SUFHZHBCLGdEQUFTQSxDQUFDO1FBQ1IsSUFBSSxDQUFDb0IsWUFBWTtRQUVqQixNQUFNYSxhQUFhLElBQUlDO1FBRXZCLGVBQWVDO1lBQ2IsSUFBSTtnQkFDRlQsV0FBVztnQkFDWEUsU0FBUztvQkFF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Ozs7a0RBTUwsOERBQUNDO3dDQUFJRCxXQUFVO2tEQUNiLDRFQUFDQzs0Q0FBSUQsV0FBVTtzREFBcUQ7Ozs7Ozs7Ozs7OzsrQkFsQ2pFWSxLQUFLakQsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QzlCO0dBelB3QmQ7O1FBQ1BkLHNEQUFTQTs7O0tBREZjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeD84YjVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VQYXJhbXMgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxudHlwZSBWaWV3TW9kZSA9IFwiY2FyZFwiIHwgXCJsaXN0XCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogc3RyaW5nOyAgICAgICAgICAgICAgICAgLy8gYmFja2VuZCBVVUlEIGFzIHN0cmluZ1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7ICAgICAgICAgICAgICAvLyBiYWNrZW5kIGJyYW5kIGZpZWxkXG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG4vKipcbiAqIE1hcCBmcm9tIGNhdGVnb3J5IGlkIC0+IEJhbGxpc3RpYyBwYXJ0Um9sZShzKVxuICogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB3aGF0ZXZlciB5b3XigJlyZSB1c2luZyBvbiB0aGUgbWFpbiAvZ3VuYnVpbGRlciBwYWdlLlxuICovXG5jb25zdCBDQVRFR09SWV9UT19QQVJUX1JPTEVTOiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nW10+ID0ge1xuICB1cHBlcjogW1widXBwZXItcmVjZWl2ZXJcIl0sXG4gIGJhcnJlbDogW1wiYmFycmVsXCJdLFxuICBoYW5kZ3VhcmQ6IFtcImhhbmRndWFyZFwiXSxcbiAgY2hhcmdpbmdIYW5kbGU6IFtcImNoYXJnaW5nLWhhbmRsZVwiXSxcbiAgYnVmZmVyOiBbXCJidWZmZXIta2l0XCJdLFxuICBsb3dlclBhcnRzOiBbXCJsb3dlci1wYXJ0cy1raXRcIl0sXG4gIHNpZ2h0czogW1wic2lnaHRcIl0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYXRlZ29yeVBhZ2UoKSB7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCBjYXRlZ29yeUlkID0gcGFyYW1zLmNhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZDtcbiAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZTxWaWV3TW9kZT4oXCJsaXN0XCIpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNhdGVnb3J5SWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaENhdGVnb3J5UGFydHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByb2xlcyA9IENBVEVHT1JZX1RPX1BBUlRfUk9MRVNbY2F0ZWdvcnlJZF0gPz8gW107XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBzZWFyY2guc2V0KFwicGxhdGZvcm1cIiwgXCJBUi0xNVwiKTtcbiAgICAgICAgcm9sZXMuZm9yRWFjaCgocikgPT4gc2VhcmNoLmFwcGVuZChcInBhcnRSb2xlc1wiLCByKSk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlciR7XG4gICAgICAgICAgcm9sZXMubGVuZ3RoID8gYD8ke3NlYXJjaC50b1N0cmluZygpfWAgOiBcIlwiXG4gICAgICAgIH1gO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICAvLyDwn5SRIE5vcm1hbGl6ZSBpbnRvIHlvdXIgUGFydCB0eXBlIHVzaW5nICppZCogYW5kICpicmFuZCpcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YS5tYXAoKHApID0+ICh7XG4gICAgICAgICAgaWQ6IHAuaWQsICAgICAgICAgICAgICAgICAgICAgIC8vIOKchSBiYWNrZW5kIGlkIChVVUlEIHN0cmluZylcbiAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBicmFuZDogcC5icmFuZCwgICAgICAgICAgICAgICAgLy8g4pyFIGJhY2tlbmQgYnJhbmRcbiAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hDYXRlZ29yeVBhcnRzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbY2F0ZWdvcnlJZF0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtemluYy01MCBtYi00XCI+XG4gICAgICAgICAgICAgIENhdGVnb3J5IE5vdCBGb3VuZFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJldHVybiB0byBHdW5idWlsZGVyXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYWluPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDAgbWItNCBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKGkCBCYWNrIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UGFydHM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgICAgQnJvd3NlIGFsbCBhdmFpbGFibGUge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX0gb3B0aW9ucyBmb3JcbiAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkLCBwdWxsZWQgbGl2ZSBmcm9tIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIGJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTEgYmctemluYy05NTAvNjBcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwiY2FyZFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNhcmQgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FyZFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJsaXN0XCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGlzdCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBMaXN0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFBhcnRzIEdyaWQvTGlzdCAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogcGFydHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAgTm8gcGFydHMgYXZhaWxhYmxlIGZvciB0aGlzIGNhdGVnb3J5IHlldC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogdmlld01vZGUgPT09IFwiY2FyZFwiID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgIHtwYXJ0cy5tYXAoKHBhcnQpID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJncm91cCByZWxhdGl2ZSBib3JkZXIgYm9yZGVyLXppbmMtNzAwIHJvdW5kZWQtbWQgcC0zIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBmbGV4IGZsZXgtY29sXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXI/c2VsZWN0PSR7Y2F0ZWdvcnlJZH06JHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ub3JtYWxcIj7igJQge3BhcnQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICB7LyogSG92ZXIgT3ZlcmxheSAqL31cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCByb3VuZGVkLW1kIGJnLWFtYmVyLTQwMC8xMCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCBwb2ludGVyLWV2ZW50cy1ub25lIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMjAwIHRyYWNraW5nLXdpZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICBBZGQgdG8gQnVpbGRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAge3BhcnRzLm1hcCgocGFydCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17cGFydC5pZH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdyb3VwIHJlbGF0aXZlIGJvcmRlciBib3JkZXItemluYy03MDAgcm91bmRlZC1tZCBwLTMgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlcj9zZWxlY3Q9JHtjYXRlZ29yeUlkfToke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW5vcm1hbFwiPuKAlCB7cGFydC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB7LyogSG92ZXIgT3ZlcmxheSAqL31cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCByb3VuZGVkLW1kIGJnLWFtYmVyLTQwMC8xMCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCBwb2ludGVyLWV2ZW50cy1ub25lIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMjAwIHRyYWNraW5nLXdpZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICBBZGQgdG8gQnVpbGRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkxpbmsiLCJ1c2VQYXJhbXMiLCJDQVRFR09SSUVTIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIkNBVEVHT1JZX1RPX1BBUlRfUk9MRVMiLCJ1cHBlciIsImJhcnJlbCIsImhhbmRndWFyZCIsImNoYXJnaW5nSGFuZGxlIiwiYnVmZmVyIiwibG93ZXJQYXJ0cyIsInNpZ2h0cyIsIkNhdGVnb3J5UGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJ2aWV3TW9kZSIsInNldFZpZXdNb2RlIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImNhdGVnb3J5IiwiZmluZCIsImMiLCJpZCIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaENhdGVnb3J5UGFydHMiLCJyb2xlcyIsInNlYXJjaCIsIlVSTFNlYXJjaFBhcmFtcyIsInNldCIsImZvckVhY2giLCJyIiwiYXBwZW5kIiwidXJsIiwibGVuZ3RoIiwidG9TdHJpbmciLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsImJ1eVVybCIsIm5vdGVzIiwiZXJyIiwibWVzc2FnZSIsImFib3J0IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJ0b0xvd2VyQ2FzZSIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwiYXJpYS1sYWJlbCIsInNlY3Rpb24iLCJwYXJ0IiwidG9GaXhlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.96a4c04f3af3cc7f.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.96a4c04f3af3cc7f.hot-update.js deleted file mode 100644 index 3d9b719..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.96a4c04f3af3cc7f.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // NEW: filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n // NEW: build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // NEW: persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // NEW: handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n setBuild((prev)=>{\n const current = prev[categoryId];\n const updated = {\n ...prev\n };\n if (current === partId) {\n // remove from build\n delete updated[categoryId];\n } else {\n // set / replace part for this category\n updated[categoryId] = partId;\n }\n return updated;\n });\n };\n // NEW: available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // NEW: filtered + sorted parts\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 192,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 195,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 191,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 190,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 189,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 212,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 220,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 223,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 226,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 219,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 233,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 232,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 211,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 269,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 273,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 267,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 280,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 294,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 286,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 279,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 301,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 312,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 313,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 314,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 315,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 304,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 300,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 278,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 266,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 323,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 327,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 331,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 348,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 346,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 345,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 356,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 344,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 361,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 367,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 360,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 335,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 387,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 388,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 389,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 390,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 386,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 404,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 408,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 413,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 416,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 420,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 426,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 419,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 402,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 398,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 393,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 263,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 209,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 208,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"EOPplz1dj3EmEofJvq2mRkmFMNM=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2U7QUFDUTtJQWlCbERNO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBRTFDLE1BQU1JLHlCQUF1RDtJQUMzREMsT0FBTztRQUFDO0tBQWlCO0lBQ3pCQyxRQUFRO1FBQUM7S0FBUztJQUNsQkMsV0FBVztRQUFDO0tBQVk7SUFDeEJDLGdCQUFnQjtRQUFDO0tBQWtCO0lBQ25DQyxRQUFRO1FBQUM7S0FBYTtJQUN0QkMsWUFBWTtRQUFDO0tBQWtCO0lBQy9CQyxRQUFRO1FBQUM7S0FBUTtBQUNuQjtBQU9BLE1BQU1DLGNBQWM7QUFFTCxTQUFTQzs7SUFDdEIsTUFBTUMsU0FBU2hCLDBEQUFTQTtJQUN4QixNQUFNaUIsYUFBYUQsT0FBT0MsVUFBVTtJQUVwQyxNQUFNLENBQUNDLFVBQVVDLFlBQVksR0FBR3JCLCtDQUFRQSxDQUFXO0lBQ25ELE1BQU0sQ0FBQ3NCLE9BQU9DLFNBQVMsR0FBR3ZCLCtDQUFRQSxDQUFTLEVBQUU7SUFDN0MsTUFBTSxDQUFDd0IsU0FBU0MsV0FBVyxHQUFHekIsK0NBQVFBLENBQUM7SUFDdkMsTUFBTSxDQUFDMEIsT0FBT0MsU0FBUyxHQUFHM0IsK0NBQVFBLENBQWdCO0lBRWxELDJCQUEyQjtJQUMzQixNQUFNLENBQUM0QixhQUFhQyxlQUFlLEdBQUc3QiwrQ0FBUUEsQ0FBUztJQUN2RCxNQUFNLENBQUM4QixRQUFRQyxVQUFVLEdBQUcvQiwrQ0FBUUEsQ0FBYTtJQUVqRCwyREFBMkQ7SUFDM0QsTUFBTSxDQUFDZ0MsT0FBT0MsU0FBUyxHQUFHakMsK0NBQVFBLENBQWE7UUFDN0MsSUFBSSxLQUE2QixFQUFFLEVBQVU7UUFDN0MsSUFBSTtZQUNGLE1BQU1r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Ozs7OzswRUFHRCw4REFBQ087Z0VBQ0NDLE1BQUs7Z0VBQ0xDLFNBQVMsSUFDUDNCLGlCQUFpQjlELFlBQVlvRyxLQUFLNUUsRUFBRTtnRUFFdEN3RCxXQUFXLG9GQUlWLE9BSENxQixhQUNJLHVFQUNBOzBFQUdMQSxhQUFhLHNCQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQXRDckNELEtBQUs1RSxFQUFFOzs7OztvQ0E0Q2xCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWhCO0dBelp3QjFCOztRQUNQZixzREFBU0E7OztLQURGZSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3g/OGI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlUGFyYW1zIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5cbnR5cGUgVmlld01vZGUgPSBcImNhcmRcIiB8IFwibGlzdFwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuY29uc3QgQ0FURUdPUllfVE9fUEFSVF9ST0xFUzogUmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZ1tdPiA9IHtcbiAgdXBwZXI6IFtcInVwcGVyLXJlY2VpdmVyXCJdLFxuICBiYXJyZWw6IFtcImJhcnJlbFwiXSxcbiAgaGFuZGd1YXJkOiBbXCJoYW5kZ3VhcmRcIl0sXG4gIGNoYXJnaW5nSGFuZGxlOiBbXCJjaGFyZ2luZy1oYW5kbGVcIl0sXG4gIGJ1ZmZlcjogW1wiYnVmZmVyLWtpdFwiXSxcbiAgbG93ZXJQYXJ0czogW1wibG93ZXItcGFydHMta2l0XCJdLFxuICBzaWdodHM6IFtcInNpZ2h0XCJdLFxufTtcblxuLy8gTkVXOiBzb3J0IG9wdGlvbnNcbnR5cGUgU29ydE9wdGlvbiA9IFwicmVsZXZhbmNlXCIgfCBcInByaWNlLWFzY1wiIHwgXCJwcmljZS1kZXNjXCIgfCBcImJyYW5kLWFzY1wiO1xuXG4vLyBORVc6IGJ1aWxkIHN0YXRlIHR5cGUgKyBzdG9yYWdlIGtleSAobWF0Y2hlcyAvZ3VuYnVpbGRlcilcbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+O1xuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2F0ZWdvcnlQYWdlKCkge1xuICBjb25zdCBwYXJhbXMgPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgY2F0ZWdvcnlJZCA9IHBhcmFtcy5jYXRlZ29yeUlkIGFzIENhdGVnb3J5SWQ7XG5cbiAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZTxWaWV3TW9kZT4oXCJsaXN0XCIpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBORVc6IGZpbHRlciArIHNvcnQgc3RhdGVcbiAgY29uc3QgW2JyYW5kRmlsdGVyLCBzZXRCcmFuZEZpbHRlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiYWxsXCIpO1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydE9wdGlvbj4oXCJyZWxldmFuY2VcIik7XG5cbiAgLy8gTkVXOiBidWlsZCBzdGF0ZSBmb3IgdGhpcyBwYWdlLCBzeW5jZWQgd2l0aCBsb2NhbFN0b3JhZ2VcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB7fTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIHJldHVybiBzdG9yZWQgPyAoSlNPTi5wYXJzZShzdG9yZWQpIGFzIEJ1aWxkU3RhdGUpIDoge307XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNhdGVnb3J5SWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaENhdGVnb3J5UGFydHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByb2xlcyA9IENBVEVHT1JZX1RPX1BBUlRfUk9MRVNbY2F0ZWdvcnlJZF0gPz8gW107XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBzZWFyY2guc2V0KFwicGxhdGZvcm1cIiwgXCJBUi0xNVwiKTtcbiAgICAgICAgcm9sZXMuZm9yRWFjaCgocikgPT4gc2VhcmNoLmFwcGVuZChcInBhcnRSb2xlc1wiLCByKSk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlciR7XG4gICAgICAgICAgcm9sZXMubGVuZ3RoID8gYD8ke3NlYXJjaC50b1N0cmluZygpfWAgOiBcIlwiXG4gICAgICAgIH1gO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hDYXRlZ29yeVBhcnRzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbY2F0ZWdvcnlJZF0pO1xuXG4gIC8vIE5FVzogcGVyc2lzdCBidWlsZCB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgLy8gTkVXOiBoYW5kbGVyIHRvIHRvZ2dsZSBBZGQgLyBSZW1vdmUgZm9yIHRoaXMgY2F0ZWdvcnlcbiAgY29uc3QgaGFuZGxlVG9nZ2xlUGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gcHJldltjYXRlZ29yeUlkXTtcbiAgICAgIGNvbnN0IHVwZGF0ZWQ6IEJ1aWxkU3RhdGUgPSB7IC4uLnByZXYgfTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IHBhcnRJZCkge1xuICAgICAgICAvLyByZW1vdmUgZnJvbSBidWlsZFxuICAgICAgICBkZWxldGUgdXBkYXRlZFtjYXRlZ29yeUlkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNldCAvIHJlcGxhY2UgcGFydCBmb3IgdGhpcyBjYXRlZ29yeVxuICAgICAgICB1cGRhdGVkW2NhdGVnb3J5SWRdID0gcGFydElkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gTkVXOiBhdmFpbGFibGUgYnJhbmRzIGZvciBmaWx0ZXJcbiAgY29uc3QgYXZhaWxhYmxlQnJhbmRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgQXJyYXkuZnJvbShuZXcgU2V0KHBhcnRzLm1hcCgocCkgPT4gcC5icmFuZCkpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpLFxuICAgIFtwYXJ0c10sXG4gICk7XG5cbiAgLy8gTkVXOiBmaWx0ZXJlZCArIHNvcnRlZCBwYXJ0c1xuICBjb25zdCBmaWx0ZXJlZFBhcnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9IFsuLi5wYXJ0c107XG5cbiAgICBpZiAoYnJhbmRGaWx0ZXIgIT09IFwiYWxsXCIpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHAuYnJhbmQgPT09IGJyYW5kRmlsdGVyKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNvcnRCeSkge1xuICAgICAgY2FzZSBcInByaWNlLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5wcmljZSAtIGIucHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwcmljZS1kZXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJyYW5kLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5icmFuZC5sb2NhbGVDb21wYXJlKGIuYnJhbmQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmVsZXZhbmNlXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBsZWF2ZSBpbiBiYWNrZW5kIG9yZGVyXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtwYXJ0cywgYnJhbmRGaWx0ZXIsIHNvcnRCeV0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtemluYy01MCBtYi00XCI+XG4gICAgICAgICAgICAgIENhdGVnb3J5IE5vdCBGb3VuZFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJldHVybiB0byBHdW5idWlsZGVyXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYWluPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDAgbWItNCBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKGkCBCYWNrIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UGFydHM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgICAgQnJvd3NlIGFsbCBhdmFpbGFibGUge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX0gb3B0aW9ucyBmb3JcbiAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkLCBwdWxsZWQgbGl2ZSBmcm9tIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIGJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTEgYmctemluYy05NTAvNjBcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwiY2FyZFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNhcmQgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FyZFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJsaXN0XCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGlzdCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBMaXN0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFBhcnRzIEdyaWQvTGlzdCAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7LyogRmlsdGVyICsgc29ydCB0b29sYmFyICovfVxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgZmxleCBmbGV4LWNvbCBnYXAtMyBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hvd2luZ3tcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBvZntcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7cGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgcGFydHNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJyYW5kXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXticmFuZEZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRCcmFuZEZpbHRlcihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsIGJyYW5kczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7YXZhaWxhYmxlQnJhbmRzLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtifSB2YWx1ZT17Yn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yn1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInNvcnQtYnlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgU29ydFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NvcnRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnRCeShlLnRhcmdldC52YWx1ZSBhcyBTb3J0T3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVsZXZhbmNlXCI+UmVsZXZhbmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1hc2NcIj5QcmljZTogTG93IOKGkiBIaWdoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1kZXNjXCI+UHJpY2U6IEhpZ2gg4oaSIExvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJhbmQtYXNjXCI+QnJhbmQ6IEEg4oaSIFo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZmlsdGVyZWRQYXJ0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBObyBwYXJ0cyBhdmFpbGFibGUgZm9yIHRoaXMgY2F0ZWdvcnkgeWV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiB2aWV3TW9kZSA9PT0gXCJjYXJkXCIgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJncm91cCByZWxhdGl2ZSBib3JkZXIgYm9yZGVyLXppbmMtNzAwIHJvdW5kZWQtbWQgcC0zIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBmbGV4IGZsZXgtY29sXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW5vcm1hbFwiPuKAlCB7cGFydC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0yIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BmbGV4LTEgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNjAwIGhvdmVyOmJnLXppbmMtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7LyogSGVhZGVyIHJvdyBmb3IgbGlzdCB2aWV3ICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpncmlkIGdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gZ2FwLTQgcHgtMyBwYi0yIHRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5QYXJ0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkJyYW5kPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHRcIj5QcmljZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0IHByLTJcIj5BY3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdyb3VwIHJlbGF0aXZlIGJvcmRlciBib3JkZXItemluYy03MDAgcm91bmRlZC1tZCBwLTMgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpncmlkIG1kOmdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gbWQ6aXRlbXMtY2VudGVyIG1kOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBtZDp0ZXh0LXNtIHRleHQtemluYy00MDAgbWQ6dGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCBtZDp0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBcIlJlbW92ZSBmcm9tIEJ1aWxkXCIgOiBcIkFkZCB0byBCdWlsZFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJMaW5rIiwidXNlUGFyYW1zIiwiQ0FURUdPUklFUyIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJDQVRFR09SWV9UT19QQVJUX1JPTEVTIiwidXBwZXIiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJjaGFyZ2luZ0hhbmRsZSIsImJ1ZmZlciIsImxvd2VyUGFydHMiLCJzaWdodHMiLCJTVE9SQUdFX0tFWSIsIkNhdGVnb3J5UGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJ2aWV3TW9kZSIsInNldFZpZXdNb2RlIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJyYW5kRmlsdGVyIiwic2V0QnJhbmRGaWx0ZXIiLCJzb3J0QnkiLCJzZXRTb3J0QnkiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwid2luZG93IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNhdGVnb3J5IiwiZmluZCIsImMiLCJpZCIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaENhdGVnb3J5UGFydHMiLCJyb2xlcyIsInNlYXJjaCIsIlVSTFNlYXJjaFBhcmFtcyIsInNldCIsImZvckVhY2giLCJyIiwiYXBwZW5kIiwidXJsIiwibGVuZ3RoIiwidG9TdHJpbmciLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsImJ1eVVybCIsIm5vdGVzIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImhhbmRsZVRvZ2dsZVBhcnQiLCJwYXJ0SWQiLCJwcmV2IiwiY3VycmVudCIsInVwZGF0ZWQiLCJhdmFpbGFibGVCcmFuZHMiLCJBcnJheSIsImZyb20iLCJTZXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImZpbHRlcmVkUGFydHMiLCJyZXN1bHQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaDEiLCJocmVmIiwiaGVhZGVyIiwic3BhbiIsInRvTG93ZXJDYXNlIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwic2VjdGlvbiIsImxhYmVsIiwiaHRtbEZvciIsInNlbGVjdCIsInZhbHVlIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0Iiwib3B0aW9uIiwicGFydCIsImlzU2VsZWN0ZWQiLCJ0b0ZpeGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.a73da2d4cd917396.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.a73da2d4cd917396.hot-update.js deleted file mode 100644 index 3419aac..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.a73da2d4cd917396.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // NEW: filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // NEW: available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // NEW: filtered + sorted parts\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 149,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 152,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 148,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 147,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 146,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 169,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 177,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 181,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 180,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 183,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 176,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 190,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 202,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 189,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 175,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 168,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 226,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 230,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 251,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 243,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 236,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 272,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 273,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 275,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 264,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 257,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 223,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 283,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 287,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 291,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 307,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 312,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 317,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 301,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 322,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 rounded-md bg-amber-400/10 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-200 tracking-wide\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 329,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 328,\n columnNumber: 19\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 297,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 341,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 342,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"View\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 343,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 339,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"block\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 358,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 362,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 354,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 353,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 368,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 371,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 375,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 374,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 352,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 rounded-md bg-amber-400/10 opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-200 tracking-wide\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 384,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 383,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 348,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 346,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 220,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 166,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 165,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"TCzyDO/Rdq+dZXo2cWnlf+kd3uc=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2U7QUFDUTtJQWlCbERNO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBRTFDLE1BQU1JLHlCQUF1RDtJQUMzREMsT0FBTztRQUFDO0tBQWlCO0lBQ3pCQyxRQUFRO1FBQUM7S0FBUztJQUNsQkMsV0FBVztRQUFDO0tBQVk7SUFDeEJDLGdCQUFnQjtRQUFDO0tBQWtCO0lBQ25DQyxRQUFRO1FBQUM7S0FBYTtJQUN0QkMsWUFBWTtRQUFDO0tBQWtCO0lBQy9CQyxRQUFRO1FBQUM7S0FBUTtBQUNuQjtBQUtlLFNBQVNDOztJQUN0QixNQUFNQyxTQUFTZiwwREFBU0E7SUFDeEIsTUFBTWdCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTSxDQUFDQyxVQUFVQyxZQUFZLEdBQUdwQiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUNxQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUVsRCwyQkFBMkI7SUFDM0IsTUFBTSxDQUFDMkIsYUFBYUMsZUFBZSxHQUFHNUIsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDNkIsUUFBUUMsVUFBVSxHQUFHOUIsK0NBQVFBLENBQWE7SUFFakQsTUFBTStCLFdBQVdoQyw4Q0FBT0EsQ0FDdEIsSUFBTUksNkRBQVVBLENBQUM2QixJQUFJLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUMsRUFBRSxLQUFLaEIsYUFDdEM7UUFBQ0E7S0FBVztJQUdkcEIsZ0RBQVNBLENB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TyxDQUFDOzs7Ozs7O3NFQUV2Qiw4REFBQ3BCOzREQUFJRCxXQUFVO3NFQUNiLDRFQUFDbEYsaURBQUlBO2dFQUNIcUYsTUFBTSxlQUE2QmlCLE9BQWRyRixZQUFXLEtBQVcsT0FBUnFGLEtBQUtyRSxFQUFFO2dFQUMxQ2lELFdBQVU7MEVBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7OzhEQUtMLDhEQUFDQztvREFBSUQsV0FBVTs4REFDYiw0RUFBQ0M7d0RBQUlELFdBQVU7a0VBQXFEOzs7Ozs7Ozs7Ozs7MkNBbkNqRW9CLEtBQUtyRSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdEaEM7R0F2V3dCbEI7O1FBQ1BkLHNEQUFTQTs7O0tBREZjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeD84YjVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VQYXJhbXMgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxudHlwZSBWaWV3TW9kZSA9IFwiY2FyZFwiIHwgXCJsaXN0XCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5jb25zdCBDQVRFR09SWV9UT19QQVJUX1JPTEVTOiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nW10+ID0ge1xuICB1cHBlcjogW1widXBwZXItcmVjZWl2ZXJcIl0sXG4gIGJhcnJlbDogW1wiYmFycmVsXCJdLFxuICBoYW5kZ3VhcmQ6IFtcImhhbmRndWFyZFwiXSxcbiAgY2hhcmdpbmdIYW5kbGU6IFtcImNoYXJnaW5nLWhhbmRsZVwiXSxcbiAgYnVmZmVyOiBbXCJidWZmZXIta2l0XCJdLFxuICBsb3dlclBhcnRzOiBbXCJsb3dlci1wYXJ0cy1raXRcIl0sXG4gIHNpZ2h0czogW1wic2lnaHRcIl0sXG59O1xuXG4vLyBORVc6IHNvcnQgb3B0aW9uc1xudHlwZSBTb3J0T3B0aW9uID0gXCJyZWxldmFuY2VcIiB8IFwicHJpY2UtYXNjXCIgfCBcInByaWNlLWRlc2NcIiB8IFwiYnJhbmQtYXNjXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhdGVnb3J5UGFnZSgpIHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGNhdGVnb3J5SWQgPSBwYXJhbXMuY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkO1xuICBjb25zdCBbdmlld01vZGUsIHNldFZpZXdNb2RlXSA9IHVzZVN0YXRlPFZpZXdNb2RlPihcImxpc3RcIik7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIE5FVzogZmlsdGVyICsgc29ydCBzdGF0ZVxuICBjb25zdCBbYnJhbmRGaWx0ZXIsIHNldEJyYW5kRmlsdGVyXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJhbGxcIik7XG4gIGNvbnN0IFtzb3J0QnksIHNldFNvcnRCeV0gPSB1c2VTdGF0ZTxTb3J0T3B0aW9uPihcInJlbGV2YW5jZVwiKTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNhdGVnb3J5SWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaENhdGVnb3J5UGFydHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByb2xlcyA9IENBVEVHT1JZX1RPX1BBUlRfUk9MRVNbY2F0ZWdvcnlJZF0gPz8gW107XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBzZWFyY2guc2V0KFwicGxhdGZvcm1cIiwgXCJBUi0xNVwiKTtcbiAgICAgICAgcm9sZXMuZm9yRWFjaCgocikgPT4gc2VhcmNoLmFwcGVuZChcInBhcnRSb2xlc1wiLCByKSk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlciR7XG4gICAgICAgICAgcm9sZXMubGVuZ3RoID8gYD8ke3NlYXJjaC50b1N0cmluZygpfWAgOiBcIlwiXG4gICAgICAgIH1gO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hDYXRlZ29yeVBhcnRzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbY2F0ZWdvcnlJZF0pO1xuXG4gIC8vIE5FVzogYXZhaWxhYmxlIGJyYW5kcyBmb3IgZmlsdGVyXG4gIGNvbnN0IGF2YWlsYWJsZUJyYW5kcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIEFycmF5LmZyb20obmV3IFNldChwYXJ0cy5tYXAoKHApID0+IHAuYnJhbmQpKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKSxcbiAgICBbcGFydHNdLFxuICApO1xuXG4gIC8vIE5FVzogZmlsdGVyZWQgKyBzb3J0ZWQgcGFydHNcbiAgY29uc3QgZmlsdGVyZWRQYXJ0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBbLi4ucGFydHNdO1xuXG4gICAgaWYgKGJyYW5kRmlsdGVyICE9PSBcImFsbFwiKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmJyYW5kID09PSBicmFuZEZpbHRlcik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChzb3J0QnkpIHtcbiAgICAgIGNhc2UgXCJwcmljZS1hc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGEucHJpY2UgLSBiLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicHJpY2UtZGVzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYi5wcmljZSAtIGEucHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJicmFuZC1hc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGEuYnJhbmQubG9jYWxlQ29tcGFyZShiLmJyYW5kKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInJlbGV2YW5jZVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gbGVhdmUgaW4gYmFja2VuZCBvcmRlclxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBbcGFydHMsIGJyYW5kRmlsdGVyLCBzb3J0QnldKTtcblxuICBpZiAoIWNhdGVnb3J5KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTAgbWItNFwiPlxuICAgICAgICAgICAgICBDYXRlZ29yeSBOb3QgRm91bmRcbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMCBob3Zlcjp0ZXh0LWFtYmVyLTIwMCB1bmRlcmxpbmVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBSZXR1cm4gdG8gR3VuYnVpbGRlclxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWFpbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwIG1iLTQgaW5saW5lLWJsb2NrXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICDihpAgQmFjayB0byBHdW5idWlsZGVyXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICAgIHtjYXRlZ29yeS5uYW1lfSA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlBhcnRzPC9zcGFuPlxuICAgICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICAgIEJyb3dzZSBhbGwgYXZhaWxhYmxlIHtjYXRlZ29yeS5uYW1lLnRvTG93ZXJDYXNlKCl9IG9wdGlvbnMgZm9yXG4gICAgICAgICAgICAgICAgeW91ciBidWlsZCwgcHVsbGVkIGxpdmUgZnJvbSB5b3VyIEJhbGxpc3RpYyBiYWNrZW5kLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMiBib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0xIGJnLXppbmMtOTUwLzYwXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImNhcmRcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwiY2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDYXJkIHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIENhcmRcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwibGlzdFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJsaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkxpc3Qgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgTGlzdFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBQYXJ0cyBHcmlkL0xpc3QgKi99XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgey8qIE5FVzogZmlsdGVyICsgc29ydCB0b29sYmFyICovfVxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgZmxleCBmbGV4LWNvbCBnYXAtMyBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hvd2luZ3tcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBvZntcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7cGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgcGFydHNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJyYW5kXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXticmFuZEZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRCcmFuZEZpbHRlcihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsIGJyYW5kczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7YXZhaWxhYmxlQnJhbmRzLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtifSB2YWx1ZT17Yn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yn1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj1cInNvcnQtYnlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBTb3J0XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cInNvcnQtYnlcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c29ydEJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U29ydEJ5KGUudGFyZ2V0LnZhbHVlIGFzIFNvcnRPcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWxldmFuY2VcIj5SZWxldmFuY2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWFzY1wiPlByaWNlOiBMb3cg4oaSIEhpZ2g8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWRlc2NcIj5QcmljZTogSGlnaCDihpIgTG93PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJicmFuZC1hc2NcIj5CcmFuZDogQSDihpIgWjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAgTG9hZGluZyB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfeKAplxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBmaWx0ZXJlZFBhcnRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIE5vIHBhcnRzIGF2YWlsYWJsZSBmb3IgdGhpcyBjYXRlZ29yeSB5ZXQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IHZpZXdNb2RlID09PSBcImNhcmRcIiA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJncm91cCByZWxhdGl2ZSBib3JkZXIgYm9yZGVyLXppbmMtNzAwIHJvdW5kZWQtbWQgcC0zIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBmbGV4IGZsZXgtY29sXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXI/c2VsZWN0PSR7Y2F0ZWdvcnlJZH06JHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ub3JtYWxcIj7igJQge3BhcnQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5SWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgcm91bmRlZC1tZCBiZy1hbWJlci00MDAvMTAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTIwMCB0cmFja2luZy13aWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIEJ1aWxkXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHsvKiBORVc6IGhlYWRlciByb3cgZm9yIGxpc3QgdmlldyAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6Z3JpZCBncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIGdhcC00IHB4LTMgcGItMiB0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+UGFydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5CcmFuZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCI+UHJpY2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodCBwci0yXCI+Vmlldzwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJncm91cCByZWxhdGl2ZSBib3JkZXIgYm9yZGVyLXppbmMtNzAwIHJvdW5kZWQtbWQgcC0zIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpncmlkIG1kOmdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gbWQ6aXRlbXMtY2VudGVyIG1kOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyP3NlbGVjdD0ke2NhdGVnb3J5SWR9OiR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIG1kOnRleHQtc20gdGV4dC16aW5jLTQwMCBtZDp0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIG1kOnRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgcm91bmRlZC1tZCBiZy1hbWJlci00MDAvMTAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMjAwIHRyYWNraW5nLXdpZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0byBCdWlsZFxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTGluayIsInVzZVBhcmFtcyIsIkNBVEVHT1JJRVMiLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiQ0FURUdPUllfVE9fUEFSVF9ST0xFUyIsInVwcGVyIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwiY2hhcmdpbmdIYW5kbGUiLCJidWZmZXIiLCJsb3dlclBhcnRzIiwic2lnaHRzIiwiQ2F0ZWdvcnlQYWdlIiwicGFyYW1zIiwiY2F0ZWdvcnlJZCIsInZpZXdNb2RlIiwic2V0Vmlld01vZGUiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnJhbmRGaWx0ZXIiLCJzZXRCcmFuZEZpbHRlciIsInNvcnRCeSIsInNldFNvcnRCeSIsImNhdGVnb3J5IiwiZmluZCIsImMiLCJpZCIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaENhdGVnb3J5UGFydHMiLCJyb2xlcyIsInNlYXJjaCIsIlVSTFNlYXJjaFBhcmFtcyIsInNldCIsImZvckVhY2giLCJyIiwiYXBwZW5kIiwidXJsIiwibGVuZ3RoIiwidG9TdHJpbmciLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsImJ1eVVybCIsIm5vdGVzIiwiZXJyIiwibWVzc2FnZSIsImFib3J0IiwiYXZhaWxhYmxlQnJhbmRzIiwiQXJyYXkiLCJmcm9tIiwiU2V0IiwiZmlsdGVyIiwiQm9vbGVhbiIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJmaWx0ZXJlZFBhcnRzIiwicmVzdWx0IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJ0b0xvd2VyQ2FzZSIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwiYXJpYS1sYWJlbCIsInNlY3Rpb24iLCJsYWJlbCIsImh0bWxGb3IiLCJzZWxlY3QiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsIm9wdGlvbiIsInBhcnQiLCJ0b0ZpeGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.b7fbe4ccfef3faff.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.b7fbe4ccfef3faff.hot-update.js new file mode 100644 index 0000000..7a7988d --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/[categoryId]/page.b7fbe4ccfef3faff.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": +/*!**********************************************!*\ + !*** ./app/gunbuilder/[categoryId]/page.tsx ***! + \**********************************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n const normalizedQuery = searchQuery.trim().toLowerCase();\n if (normalizedQuery) {\n result = result.filter((p)=>{\n const name = p.name.toLowerCase();\n const brand = p.brand.toLowerCase();\n return name.includes(normalizedQuery) || brand.includes(normalizedQuery);\n });\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId,\n searchQuery\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 215,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 250,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 259,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 271,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 244,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"part-search\",\n className: \"text-xs text-zinc-500\",\n children: \"Search\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"part-search\",\n type: \"text\",\n value: searchQuery,\n onChange: (e)=>setSearchQuery(e.target.value),\n placeholder: \"Search \".concat(category.name.toLowerCase(), \"...\"),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 pr-6 focus:outline-none focus:ring-1 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 310,\n columnNumber: 19\n }, this),\n searchQuery && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setSearchQuery(\"\"),\n className: \"absolute right-1 top-1/2 -translate-y-1/2 text-zinc-500 hover:text-zinc-300 text-xs leading-none\",\n \"aria-label\": \"Clear search\",\n children: \"\\xd7\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 319,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 331,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 343,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 345,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 337,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 330,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 352,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 363,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 364,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 365,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 355,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 304,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 374,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 378,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 382,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 flex flex-col border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 401,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 406,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 400,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 411,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 399,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 416,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 422,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 415,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 391,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 386,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 442,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 443,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 444,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 445,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 441,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 463,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 467,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 462,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 472,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 475,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 479,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 485,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 478,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 461,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 453,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 448,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 289,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 234,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"hQW9WjwScoo4vSowKyqHqdjUZSA=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7QUFDbkI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCxzQkFBc0I7SUFDdEIsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFDakQsTUFBTSxDQUFDa0MsYUFBYUMsZUFBZSxHQUFHbkMsK0NBQVFBLENBQVM7SUFFdkQsdURBQXVEO0lBQ3ZELE1BQU0sQ0FBQ29DLE9B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OERBQUN1Qzt3REFBSUQsV0FBVTs7NERBQXFEOzREQUNoRXFCLEtBQUsxRCxLQUFLLENBQUMyRCxPQUFPLENBQUM7Ozs7Ozs7a0VBRXZCLDhEQUFDckI7d0RBQUlELFdBQVU7OzBFQUNiLDhEQUFDOUcsaURBQUlBO2dFQUNIaUgsTUFBTSxlQUE2QmtCLE9BQWRoSCxZQUFXLEtBQVcsT0FBUmdILEtBQUtyRixFQUFFO2dFQUMxQ2dFLFdBQVU7MEVBQ1g7Ozs7OzswRUFHRCw4REFBQ007Z0VBQ0NDLE1BQUs7Z0VBQ0xDLFNBQVMsSUFDUGxDLGlCQUFpQmpFLFlBQVlnSCxLQUFLckYsRUFBRTtnRUFFdENnRSxXQUFXLG9GQUlWLE9BSEN4QixhQUNJLHVFQUNBOzBFQUdMQSxhQUFhLHNCQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQTFDckM2QyxLQUFLckYsRUFBRTs7Ozs7b0NBZ0RsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFoQjtHQXBkd0I3Qjs7UUFDUGhCLHNEQUFTQTtRQUVUQyxzREFBU0E7OztLQUhGZSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3g/OGI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxudHlwZSBWaWV3TW9kZSA9IFwiY2FyZFwiIHwgXCJsaXN0XCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5jb25zdCBDQVRFR09SWV9UT19QQVJUX1JPTEVTOiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nW10+ID0ge1xuICB1cHBlcjogW1widXBwZXItcmVjZWl2ZXJcIl0sXG4gIGJhcnJlbDogW1wiYmFycmVsXCJdLFxuICBoYW5kZ3VhcmQ6IFtcImhhbmRndWFyZFwiXSxcbiAgY2hhcmdpbmdIYW5kbGU6IFtcImNoYXJnaW5nLWhhbmRsZVwiXSxcbiAgYnVmZmVyOiBbXCJidWZmZXIta2l0XCJdLFxuICBsb3dlclBhcnRzOiBbXCJsb3dlci1wYXJ0cy1raXRcIl0sXG4gIHNpZ2h0czogW1wic2lnaHRcIl0sXG59O1xuXG4vLyBzb3J0IG9wdGlvbnNcbnR5cGUgU29ydE9wdGlvbiA9IFwicmVsZXZhbmNlXCIgfCBcInByaWNlLWFzY1wiIHwgXCJwcmljZS1kZXNjXCIgfCBcImJyYW5kLWFzY1wiO1xuXG4vLyBidWlsZCBzdGF0ZSB0eXBlICsgc3RvcmFnZSBrZXkgKG1hdGNoZXMgL2d1bmJ1aWxkZXIpXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjtcbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhdGVnb3J5UGFnZSgpIHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGNhdGVnb3J5SWQgPSBwYXJhbXMuY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcblxuICBjb25zdCBbdmlld01vZGUsIHNldFZpZXdNb2RlXSA9IHVzZVN0YXRlPFZpZXdNb2RlPihcImxpc3RcIik7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIGZpbHRlciArIHNvcnQgc3RhdGVcbiAgY29uc3QgW2JyYW5kRmlsdGVyLCBzZXRCcmFuZEZpbHRlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiYWxsXCIpO1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydE9wdGlvbj4oXCJyZWxldmFuY2VcIik7XG4gIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcblxuICAvLyAgYnVpbGQgc3RhdGUgZm9yIHRoaXMgcGFnZSwgc3luY2VkIHdpdGggbG9jYWxTdG9yYWdlXG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4ge307XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICByZXR1cm4gc3RvcmVkID8gKEpTT04ucGFyc2Uoc3RvcmVkKSBhcyBCdWlsZFN0YXRlKSA6IHt9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSB1c2VNZW1vKFxuICAgICgpID0+IENBVEVHT1JJRVMuZmluZCgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgW2NhdGVnb3J5SWRdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXRlZ29yeVBhcnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm9sZXMgPSBDQVRFR09SWV9UT19QQVJUX1JPTEVTW2NhdGVnb3J5SWRdID8/IFtdO1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgc2VhcmNoLnNldChcInBsYXRmb3JtXCIsIFwiQVItMTVcIik7XG4gICAgICAgIHJvbGVzLmZvckVhY2goKHIpID0+IHNlYXJjaC5hcHBlbmQoXCJwYXJ0Um9sZXNcIiwgcikpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXIke1xuICAgICAgICAgIHJvbGVzLmxlbmd0aCA/IGA/JHtzZWFyY2gudG9TdHJpbmcoKX1gIDogXCJcIlxuICAgICAgICB9YDtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YS5tYXAoKHApID0+ICh7XG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoQ2F0ZWdvcnlQYXJ0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW2NhdGVnb3J5SWRdKTtcblxuICAvLyAgcGVyc2lzdCBidWlsZCB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgLy8gIGhhbmRsZXIgdG8gdG9nZ2xlIEFkZCAvIFJlbW92ZSBmb3IgdGhpcyBjYXRlZ29yeVxuICBjb25zdCBoYW5kbGVUb2dnbGVQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0SWQ7XG5cbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgLy8gUmVtb3ZlIGZyb20gYnVpbGRcbiAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQ6IEJ1aWxkU3RhdGUgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRbY2F0ZWdvcnlJZF07XG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCB0byBidWlsZCBhbmQgbmF2aWdhdGUgYmFjayB0byBtYWluIGd1bmJ1aWxkZXIgcGFnZVxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtjYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgfSkpO1xuICAgICAgcm91dGVyLnB1c2goXCIvZ3VuYnVpbGRlclwiKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gYXZhaWxhYmxlIGJyYW5kcyBmb3IgZmlsdGVyXG4gIGNvbnN0IGF2YWlsYWJsZUJyYW5kcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIEFycmF5LmZyb20obmV3IFNldChwYXJ0cy5tYXAoKHApID0+IHAuYnJhbmQpKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKSxcbiAgICBbcGFydHNdLFxuICApO1xuXG4gIC8vIGZpbHRlcmVkICsgc29ydGVkIHBhcnRzIHdpdGggc2VsZWN0ZWQgcGFydCBwaW5uZWQgdG8gdG9wXG4gIGNvbnN0IGZpbHRlcmVkUGFydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gWy4uLnBhcnRzXTtcblxuICAgIGlmIChicmFuZEZpbHRlciAhPT0gXCJhbGxcIikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5icmFuZCA9PT0gYnJhbmRGaWx0ZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHNlYXJjaFF1ZXJ5LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChub3JtYWxpemVkUXVlcnkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHAubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBicmFuZCA9IHAuYnJhbmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBuYW1lLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkgfHxcbiAgICAgICAgICBicmFuZC5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNvcnRCeSkge1xuICAgICAgY2FzZSBcInByaWNlLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5wcmljZSAtIGIucHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwcmljZS1kZXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBiLnByaWNlIC0gYS5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImJyYW5kLWFzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5icmFuZC5sb2NhbGVDb21wYXJlKGIuYnJhbmQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmVsZXZhbmNlXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBsZWF2ZSBpbiBiYWNrZW5kIG9yZGVyXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFBpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBhcnQgKGZvciB0aGlzIGNhdGVnb3J5KSB0byB0aGUgdG9wLCBpZiBhbnlcbiAgICBjb25zdCBzZWxlY3RlZElkID0gYnVpbGRbY2F0ZWdvcnlJZF07XG4gICAgaWYgKHNlbGVjdGVkSWQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRJZCk7XG4gICAgICBjb25zdCBvdGhlcnMgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmlkICE9PSBzZWxlY3RlZElkKTtcbiAgICAgIHJlc3VsdCA9IFsuLi5zZWxlY3RlZCwgLi4ub3RoZXJzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBbcGFydHMsIGJyYW5kRmlsdGVyLCBzb3J0QnksIGJ1aWxkLCBjYXRlZ29yeUlkLCBzZWFyY2hRdWVyeV0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtemluYy01MCBtYi00XCI+XG4gICAgICAgICAgICAgIENhdGVnb3J5IE5vdCBGb3VuZFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJldHVybiB0byBHdW5idWlsZGVyXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYWluPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDAgbWItNCBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKGkCBCYWNrIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UGFydHM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgICAgQnJvd3NlIGFsbCBhdmFpbGFibGUge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX0gb3B0aW9ucyBmb3JcbiAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkLCBwdWxsZWQgbGl2ZSBmcm9tIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIGJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTEgYmctemluYy05NTAvNjBcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwiY2FyZFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNhcmQgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FyZFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJsaXN0XCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGlzdCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBMaXN0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFBhcnRzIEdyaWQvTGlzdCAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7LyogRmlsdGVyICsgc29ydCB0b29sYmFyICovfVxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgZmxleCBmbGV4LWNvbCBnYXAtMyBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hvd2luZ3tcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBvZntcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7cGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgcGFydHNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwicGFydC1zZWFyY2hcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlYXJjaFxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwicGFydC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2hRdWVyeShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfS4uLmB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIHByLTYgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge3NlYXJjaFF1ZXJ5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlYXJjaFF1ZXJ5KFwiXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTEgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtemluYy01MDAgaG92ZXI6dGV4dC16aW5jLTMwMCB0ZXh0LXhzIGxlYWRpbmctbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICDDl1xuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBodG1sRm9yPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQnJhbmRcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYnJhbmQtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2JyYW5kRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEJyYW5kRmlsdGVyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhbGxcIj5BbGwgYnJhbmRzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHthdmFpbGFibGVCcmFuZHMubWFwKChiKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2J9IHZhbHVlPXtifT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtifVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwic29ydC1ieVwiIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICBTb3J0XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cInNvcnQtYnlcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c29ydEJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U29ydEJ5KGUudGFyZ2V0LnZhbHVlIGFzIFNvcnRPcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHRleHQteHMgdGV4dC16aW5jLTIwMCBweC0yIHB5LTEgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWxldmFuY2VcIj5SZWxldmFuY2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWFzY1wiPlByaWNlOiBMb3cg4oaSIEhpZ2g8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByaWNlLWRlc2NcIj5QcmljZTogSGlnaCDihpIgTG93PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJicmFuZC1hc2NcIj5CcmFuZDogQSDihpIgWjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAgTG9hZGluZyB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfeKAplxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwIHRleHQtY2VudGVyIHB5LThcIj5cbiAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBmaWx0ZXJlZFBhcnRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIE5vIHBhcnRzIGF2YWlsYWJsZSBmb3IgdGhpcyBjYXRlZ29yeSB5ZXQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IHZpZXdNb2RlID09PSBcImNhcmRcIiA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnQuaWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e3BhcnQuaWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGdyb3VwIHJlbGF0aXZlIHJvdW5kZWQtbWQgcC0zIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBmbGV4IGZsZXgtY29sIGJvcmRlciAke1xuICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItYW1iZXItNDAwLzcwIGJnLWFtYmVyLTQwMC8xMCBzaGFkb3ctWzBfMF8wXzFweF9yZ2JhKDI1MSwxOTEsMzYsMC4yNSldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgaG92ZXI6Ym9yZGVyLWFtYmVyLTQwMC82MCBob3ZlcjpiZy1hbWJlci00MDAvMTBcIlxuICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW5vcm1hbFwiPuKAlCB7cGFydC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTQwMCBsaW5lLWNsYW1wLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0yIHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BmbGV4LTEgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNjAwIGhvdmVyOmJnLXppbmMtNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7LyogSGVhZGVyIHJvdyBmb3IgbGlzdCB2aWV3ICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpncmlkIGdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gZ2FwLTQgcHgtMyBwYi0yIHRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5QYXJ0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkJyYW5kPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHRcIj5QcmljZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0IHByLTJcIj5BY3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGdyb3VwIHJlbGF0aXZlIHJvdW5kZWQtbWQgcC0zIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBib3JkZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJvcmRlci1hbWJlci00MDAvNzAgYmctYW1iZXItNDAwLzEwIHNoYWRvdy1bMF8wXzBfMXB4X3JnYmEoMjUxLDE5MSwzNiwwLjI1KV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwXCJcbiAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpncmlkIG1kOmdyaWQtY29scy1bbWlubWF4KDAsM2ZyKV9taW5tYXgoMCwxZnIpX21pbm1heCgwLDFmcilfYXV0b10gbWQ6aXRlbXMtY2VudGVyIG1kOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3Rlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBtZDp0ZXh0LXNtIHRleHQtemluYy00MDAgbWQ6dGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCBtZDp0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy04MDAvNTAgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZVBhcnQoY2F0ZWdvcnlJZCwgcGFydC5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1hbWJlci00MDAgdGV4dC1ibGFjayBob3ZlcjpiZy1hbWJlci0zMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsZWN0ZWQgPyBcIlJlbW92ZSBmcm9tIEJ1aWxkXCIgOiBcIkFkZCB0byBCdWlsZFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJMaW5rIiwidXNlUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJDQVRFR09SWV9UT19QQVJUX1JPTEVTIiwidXBwZXIiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJjaGFyZ2luZ0hhbmRsZSIsImJ1ZmZlciIsImxvd2VyUGFydHMiLCJzaWdodHMiLCJTVE9SQUdFX0tFWSIsIkNhdGVnb3J5UGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJyb3V0ZXIiLCJ2aWV3TW9kZSIsInNldFZpZXdNb2RlIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJyYW5kRmlsdGVyIiwic2V0QnJhbmRGaWx0ZXIiLCJzb3J0QnkiLCJzZXRTb3J0QnkiLCJzZWFyY2hRdWVyeSIsInNldFNlYXJjaFF1ZXJ5IiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsIndpbmRvdyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjYXRlZ29yeSIsImZpbmQiLCJjIiwiaWQiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hDYXRlZ29yeVBhcnRzIiwicm9sZXMiLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJmb3JFYWNoIiwiciIsImFwcGVuZCIsInVybCIsImxlbmd0aCIsInRvU3RyaW5nIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJidXlVcmwiLCJub3RlcyIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJoYW5kbGVUb2dnbGVQYXJ0IiwicGFydElkIiwiaXNTZWxlY3RlZCIsInByZXYiLCJ1cGRhdGVkIiwicHVzaCIsImF2YWlsYWJsZUJyYW5kcyIsIkFycmF5IiwiZnJvbSIsIlNldCIsImZpbHRlciIsIkJvb2xlYW4iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZmlsdGVyZWRQYXJ0cyIsInJlc3VsdCIsIm5vcm1hbGl6ZWRRdWVyeSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwic2VsZWN0ZWRJZCIsInNlbGVjdGVkIiwib3RoZXJzIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImFyaWEtbGFiZWwiLCJzZWN0aW9uIiwibGFiZWwiLCJodG1sRm9yIiwiaW5wdXQiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwic2VsZWN0Iiwib3B0aW9uIiwicGFydCIsInRvRml4ZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.cd76be92af930a77.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.cd76be92af930a77.hot-update.js deleted file mode 100644 index 1c26b3e..0000000 --- a/.next/static/webpack/app/gunbuilder/[categoryId]/page.cd76be92af930a77.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": -/*!**********************************************!*\ - !*** ./app/gunbuilder/[categoryId]/page.tsx ***! - \**********************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // NEW: filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // NEW: available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // NEW: filtered + sorted parts\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 149,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 152,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 148,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 147,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 146,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 169,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 177,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 181,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 180,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 183,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 176,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 190,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 202,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 189,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 175,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 168,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 226,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 230,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 251,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 243,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 236,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 272,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 273,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 274,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 275,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 264,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 257,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 223,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 283,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 287,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 291,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 307,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 312,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 317,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 301,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 322,\n columnNumber: 19\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 297,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 335,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 336,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 337,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 338,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 334,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative border border-zinc-700 rounded-md p-3 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10 transition-all duration-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"block\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 353,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 357,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 349,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 348,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 363,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder?select=\".concat(categoryId, \":\").concat(part.id),\n className: \"rounded-md bg-amber-400 text-black px-3 py-1.5 text-xs font-semibold hover:bg-amber-300 transition-colors whitespace-nowrap\",\n children: \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 370,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 376,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 369,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 347,\n columnNumber: 21\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 343,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 341,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 220,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 166,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 165,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"TCzyDO/Rdq+dZXo2cWnlf+kd3uc=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2U7QUFDUTtJQWlCbERNO0FBREYsTUFBTUMsZUFDSkQsQ0FBQUEsd0NBQUFBLE9BQU9BLENBQUNFLEdBQUcsQ0FBQ0Msd0JBQXdCLGNBQXBDSCxtREFBQUEsd0NBQXdDO0FBRTFDLE1BQU1JLHlCQUF1RDtJQUMzREMsT0FBTztRQUFDO0tBQWlCO0lBQ3pCQyxRQUFRO1FBQUM7S0FBUztJQUNsQkMsV0FBVztRQUFDO0tBQVk7SUFDeEJDLGdCQUFnQjtRQUFDO0tBQWtCO0lBQ25DQyxRQUFRO1FBQUM7S0FBYTtJQUN0QkMsWUFBWTtRQUFDO0tBQWtCO0lBQy9CQyxRQUFRO1FBQUM7S0FBUTtBQUNuQjtBQUtlLFNBQVNDOztJQUN0QixNQUFNQyxTQUFTZiwwREFBU0E7SUFDeEIsTUFBTWdCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTSxDQUFDQyxVQUFVQyxZQUFZLEdBQUdwQiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUNxQixPQUFPQyxTQUFTLEdBQUd0QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3VCLFNBQVNDLFdBQVcsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3lCLE9BQU9DLFNBQVMsR0FBRzFCLCtDQUFRQSxDQUFnQjtJQUVsRCwyQkFBMkI7SUFDM0IsTUFBTSxDQUFDMkIsYUFBYUMsZUFBZSxHQUFHNUIsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDNkIsUUFBUUMsVUFBVSxHQUFHOUIsK0NBQVFBLENBQWE7SUFFakQsTUFBTStCLFdBQVdoQyw4Q0FBT0EsQ0FDdEIsSUFBTUksNkRBQVVBLENBQUM2QixJQUFJLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUMsRUFBRSxLQUFLaEIsYUFDdEM7UUFBQ0E7S0FBVztJQUdkcEIsZ0RBQVNBLENB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LE1BQU0sc0JBQW9DaUIsT0FBZHJGLFlBQVcsS0FBVyxPQUFScUYsS0FBS3JFLEVBQUU7Z0VBQ2pEaUQsV0FBVTswRUFDWDs7Ozs7OzBFQUdELDhEQUFDbEYsaURBQUlBO2dFQUNIcUYsTUFBTSxlQUE2QmlCLE9BQWRyRixZQUFXLEtBQVcsT0FBUnFGLEtBQUtyRSxFQUFFO2dFQUMxQ2lELFdBQVU7MEVBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0FuQ0FvQixLQUFLckUsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpRGhDO0dBbld3QmxCOztRQUNQZCxzREFBU0E7OztLQURGYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3g/OGI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlUGFyYW1zIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5cbnR5cGUgVmlld01vZGUgPSBcImNhcmRcIiB8IFwibGlzdFwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuY29uc3QgQ0FURUdPUllfVE9fUEFSVF9ST0xFUzogUmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZ1tdPiA9IHtcbiAgdXBwZXI6IFtcInVwcGVyLXJlY2VpdmVyXCJdLFxuICBiYXJyZWw6IFtcImJhcnJlbFwiXSxcbiAgaGFuZGd1YXJkOiBbXCJoYW5kZ3VhcmRcIl0sXG4gIGNoYXJnaW5nSGFuZGxlOiBbXCJjaGFyZ2luZy1oYW5kbGVcIl0sXG4gIGJ1ZmZlcjogW1wiYnVmZmVyLWtpdFwiXSxcbiAgbG93ZXJQYXJ0czogW1wibG93ZXItcGFydHMta2l0XCJdLFxuICBzaWdodHM6IFtcInNpZ2h0XCJdLFxufTtcblxuLy8gTkVXOiBzb3J0IG9wdGlvbnNcbnR5cGUgU29ydE9wdGlvbiA9IFwicmVsZXZhbmNlXCIgfCBcInByaWNlLWFzY1wiIHwgXCJwcmljZS1kZXNjXCIgfCBcImJyYW5kLWFzY1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYXRlZ29yeVBhZ2UoKSB7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCBjYXRlZ29yeUlkID0gcGFyYW1zLmNhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZDtcbiAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZTxWaWV3TW9kZT4oXCJsaXN0XCIpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBORVc6IGZpbHRlciArIHNvcnQgc3RhdGVcbiAgY29uc3QgW2JyYW5kRmlsdGVyLCBzZXRCcmFuZEZpbHRlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiYWxsXCIpO1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydE9wdGlvbj4oXCJyZWxldmFuY2VcIik7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSB1c2VNZW1vKFxuICAgICgpID0+IENBVEVHT1JJRVMuZmluZCgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgW2NhdGVnb3J5SWRdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDYXRlZ29yeVBhcnRzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm9sZXMgPSBDQVRFR09SWV9UT19QQVJUX1JPTEVTW2NhdGVnb3J5SWRdID8/IFtdO1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgc2VhcmNoLnNldChcInBsYXRmb3JtXCIsIFwiQVItMTVcIik7XG4gICAgICAgIHJvbGVzLmZvckVhY2goKHIpID0+IHNlYXJjaC5hcHBlbmQoXCJwYXJ0Um9sZXNcIiwgcikpO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXIke1xuICAgICAgICAgIHJvbGVzLmxlbmd0aCA/IGA/JHtzZWFyY2gudG9TdHJpbmcoKX1gIDogXCJcIlxuICAgICAgICB9YDtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YS5tYXAoKHApID0+ICh7XG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoQ2F0ZWdvcnlQYXJ0cygpO1xuXG4gICAgcmV0dXJuICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgW2NhdGVnb3J5SWRdKTtcblxuICAvLyBORVc6IGF2YWlsYWJsZSBicmFuZHMgZm9yIGZpbHRlclxuICBjb25zdCBhdmFpbGFibGVCcmFuZHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBBcnJheS5mcm9tKG5ldyBTZXQocGFydHMubWFwKChwKSA9PiBwLmJyYW5kKSkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSksXG4gICAgW3BhcnRzXSxcbiAgKTtcblxuICAvLyBORVc6IGZpbHRlcmVkICsgc29ydGVkIHBhcnRzXG4gIGNvbnN0IGZpbHRlcmVkUGFydHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gWy4uLnBhcnRzXTtcblxuICAgIGlmIChicmFuZEZpbHRlciAhPT0gXCJhbGxcIikge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5icmFuZCA9PT0gYnJhbmRGaWx0ZXIpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc29ydEJ5KSB7XG4gICAgICBjYXNlIFwicHJpY2UtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInByaWNlLWRlc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnJhbmQtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmJyYW5kLmxvY2FsZUNvbXBhcmUoYi5icmFuZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWxldmFuY2VcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGxlYXZlIGluIGJhY2tlbmQgb3JkZXJcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW3BhcnRzLCBicmFuZEZpbHRlciwgc29ydEJ5XSk7XG5cbiAgaWYgKCFjYXRlZ29yeSkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgQ2F0ZWdvcnkgTm90IEZvdW5kXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmV0dXJuIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX0gPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5QYXJ0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgICBCcm93c2UgYWxsIGF2YWlsYWJsZSB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfSBvcHRpb25zIGZvclxuICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQsIHB1bGxlZCBsaXZlIGZyb20geW91ciBCYWxsaXN0aWMgYmFja2VuZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTIgYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMSBiZy16aW5jLTk1MC82MFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJjYXJkXCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImNhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2FyZCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYXJkXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImxpc3RcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJMaXN0IHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIExpc3RcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogUGFydHMgR3JpZC9MaXN0ICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHsvKiBORVc6IGZpbHRlciArIHNvcnQgdG9vbGJhciAqL31cbiAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00IGZsZXggZmxleC1jb2wgZ2FwLTMgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNob3dpbmd7XCIgXCJ9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTIwMCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgb2Z7XCIgXCJ9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTIwMCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAge3BhcnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgIHBhcnRzXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9XCJicmFuZC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBCcmFuZFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJicmFuZC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YnJhbmRGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0QnJhbmRGaWx0ZXIoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNzAgdGV4dC14cyB0ZXh0LXppbmMtMjAwIHB4LTIgcHktMSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctYW1iZXItNDAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPkFsbCBicmFuZHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAge2F2YWlsYWJsZUJyYW5kcy5tYXAoKGIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17Yn0gdmFsdWU9e2J9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2J9XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgU29ydFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NvcnRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnRCeShlLnRhcmdldC52YWx1ZSBhcyBTb3J0T3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVsZXZhbmNlXCI+UmVsZXZhbmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1hc2NcIj5QcmljZTogTG93IOKGkiBIaWdoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1kZXNjXCI+UHJpY2U6IEhpZ2gg4oaSIExvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJhbmQtYXNjXCI+QnJhbmQ6IEEg4oaSIFo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZmlsdGVyZWRQYXJ0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBObyBwYXJ0cyBhdmFpbGFibGUgZm9yIHRoaXMgY2F0ZWdvcnkgeWV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiB2aWV3TW9kZSA9PT0gXCJjYXJkXCIgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ3JvdXAgcmVsYXRpdmUgYm9yZGVyIGJvcmRlci16aW5jLTcwMCByb3VuZGVkLW1kIHAtMyBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZmxleCBmbGV4LWNvbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyP3NlbGVjdD0ke2NhdGVnb3J5SWR9OiR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTFcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMiBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH17XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbm9ybWFsXCI+4oCUIHtwYXJ0Lm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5ub3RlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTgwMC81MCBweC0zIHB5LTIgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtNzAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFZpZXcgRGV0YWlsc1xuICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7LyogTkVXOiBoZWFkZXIgcm93IGZvciBsaXN0IHZpZXcgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmdyaWQgZ3JpZC1jb2xzLVttaW5tYXgoMCwzZnIpX21pbm1heCgwLDFmcilfbWlubWF4KDAsMWZyKV9hdXRvXSBnYXAtNCBweC0zIHBiLTIgdGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlBhcnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+QnJhbmQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodFwiPlByaWNlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmlnaHQgcHItMlwiPkFjdGlvbnM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17cGFydC5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ3JvdXAgcmVsYXRpdmUgYm9yZGVyIGJvcmRlci16aW5jLTcwMCByb3VuZGVkLW1kIHAtMyBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6Z3JpZCBtZDpncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIG1kOml0ZW1zLWNlbnRlciBtZDpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlcj9zZWxlY3Q9JHtjYXRlZ29yeUlkfToke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBtZDp0ZXh0LXNtIHRleHQtemluYy00MDAgbWQ6dGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMCBtZDp0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlcj9zZWxlY3Q9JHtjYXRlZ29yeUlkfToke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBiZy1hbWJlci00MDAgdGV4dC1ibGFjayBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgaG92ZXI6YmctYW1iZXItMzAwIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIEJ1aWxkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeUlkfS8ke3BhcnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkxpbmsiLCJ1c2VQYXJhbXMiLCJDQVRFR09SSUVTIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIkNBVEVHT1JZX1RPX1BBUlRfUk9MRVMiLCJ1cHBlciIsImJhcnJlbCIsImhhbmRndWFyZCIsImNoYXJnaW5nSGFuZGxlIiwiYnVmZmVyIiwibG93ZXJQYXJ0cyIsInNpZ2h0cyIsIkNhdGVnb3J5UGFnZSIsInBhcmFtcyIsImNhdGVnb3J5SWQiLCJ2aWV3TW9kZSIsInNldFZpZXdNb2RlIiwicGFydHMiLCJzZXRQYXJ0cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImJyYW5kRmlsdGVyIiwic2V0QnJhbmRGaWx0ZXIiLCJzb3J0QnkiLCJzZXRTb3J0QnkiLCJjYXRlZ29yeSIsImZpbmQiLCJjIiwiaWQiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hDYXRlZ29yeVBhcnRzIiwicm9sZXMiLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJmb3JFYWNoIiwiciIsImFwcGVuZCIsInVybCIsImxlbmd0aCIsInRvU3RyaW5nIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJidXlVcmwiLCJub3RlcyIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsImF2YWlsYWJsZUJyYW5kcyIsIkFycmF5IiwiZnJvbSIsIlNldCIsImZpbHRlciIsIkJvb2xlYW4iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZmlsdGVyZWRQYXJ0cyIsInJlc3VsdCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoMSIsImhyZWYiLCJoZWFkZXIiLCJzcGFuIiwidG9Mb3dlckNhc2UiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImFyaWEtbGFiZWwiLCJzZWN0aW9uIiwibGFiZWwiLCJodG1sRm9yIiwic2VsZWN0IiwidmFsdWUiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJvcHRpb24iLCJwYXJ0IiwidG9GaXhlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.d652b55a3b2a7c68.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.d652b55a3b2a7c68.hot-update.js new file mode 100644 index 0000000..141e1c8 --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/[categoryId]/page.d652b55a3b2a7c68.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": +/*!**********************************************!*\ + !*** ./app/gunbuilder/[categoryId]/page.tsx ***! + \**********************************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n const normalizedQuery = searchQuery.trim().toLowerCase();\n if (normalizedQuery) {\n result = result.filter((p)=>{\n const name = p.name.toLowerCase();\n const brand = p.brand.toLowerCase();\n return name.includes(normalizedQuery) || brand.includes(normalizedQuery);\n });\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId,\n searchQuery\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 218,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 217,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 216,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 215,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 250,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 249,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 259,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 271,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 244,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 295,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"part-search\",\n className: \"text-xs text-zinc-500\",\n children: \"Search\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 306,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"part-search\",\n type: \"text\",\n value: searchQuery,\n onChange: (e)=>setSearchQuery(e.target.value),\n placeholder: \"Search \".concat(category.name.toLowerCase(), \"...\"),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 309,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 319,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 331,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 333,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 325,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 318,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 351,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 352,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 353,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 354,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 343,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 339,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 304,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 362,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 366,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 370,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 flex flex-col border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 391,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 389,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 394,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 388,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 399,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 387,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 404,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 410,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 379,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 374,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 430,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 431,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 432,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 433,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 429,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 451,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 455,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 450,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 460,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 463,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 467,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 473,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 466,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 449,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 441,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 436,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 289,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 235,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 234,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"hQW9WjwScoo4vSowKyqHqdjUZSA=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7QUFDbkI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCxzQkFBc0I7SUFDdEIsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFDakQsTUFBTSxDQUFDa0MsYUFBYUMsZUFBZSxHQUFHbkMsK0NBQVFBLENBQVM7SUFFdkQsdURBQXVEO0lBQ3ZELE1BQU0sQ0FBQ29DLE9B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SCxNQUFNLGVBQTZCa0IsT0FBZGhILFlBQVcsS0FBVyxPQUFSZ0gsS0FBS3JGLEVBQUU7Z0VBQzFDZ0UsV0FBVTswRUFDWDs7Ozs7OzBFQUdELDhEQUFDTTtnRUFDQ0MsTUFBSztnRUFDTEMsU0FBUyxJQUNQbEMsaUJBQWlCakUsWUFBWWdILEtBQUtyRixFQUFFO2dFQUV0Q2dFLFdBQVcsb0ZBSVYsT0FIQ3hCLGFBQ0ksdUVBQ0E7MEVBR0xBLGFBQWEsc0JBQXNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MkNBMUNyQzZDLEtBQUtyRixFQUFFOzs7OztvQ0FnRGxCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWhCO0dBeGN3QjdCOztRQUNQaEIsc0RBQVNBO1FBRVRDLHNEQUFTQTs7O0tBSEZlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeD84YjVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG50eXBlIFZpZXdNb2RlID0gXCJjYXJkXCIgfCBcImxpc3RcIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYnJhbmQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgcGFydFJvbGU6IHN0cmluZztcbiAgcHJpY2U6IG51bWJlciB8IG51bGw7XG4gIG1haW5JbWFnZVVybDogc3RyaW5nIHwgbnVsbDtcbiAgYnV5VXJsOiBzdHJpbmcgfCBudWxsO1xufTtcblxuY29uc3QgQVBJX0JBU0VfVVJMID1cbiAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCI7XG5cbmNvbnN0IENBVEVHT1JZX1RPX1BBUlRfUk9MRVM6IFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmdbXT4gPSB7XG4gIHVwcGVyOiBbXCJ1cHBlci1yZWNlaXZlclwiXSxcbiAgYmFycmVsOiBbXCJiYXJyZWxcIl0sXG4gIGhhbmRndWFyZDogW1wiaGFuZGd1YXJkXCJdLFxuICBjaGFyZ2luZ0hhbmRsZTogW1wiY2hhcmdpbmctaGFuZGxlXCJdLFxuICBidWZmZXI6IFtcImJ1ZmZlci1raXRcIl0sXG4gIGxvd2VyUGFydHM6IFtcImxvd2VyLXBhcnRzLWtpdFwiXSxcbiAgc2lnaHRzOiBbXCJzaWdodFwiXSxcbn07XG5cbi8vIHNvcnQgb3B0aW9uc1xudHlwZSBTb3J0T3B0aW9uID0gXCJyZWxldmFuY2VcIiB8IFwicHJpY2UtYXNjXCIgfCBcInByaWNlLWRlc2NcIiB8IFwiYnJhbmQtYXNjXCI7XG5cbi8vIGJ1aWxkIHN0YXRlIHR5cGUgKyBzdG9yYWdlIGtleSAobWF0Y2hlcyAvZ3VuYnVpbGRlcilcbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+O1xuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2F0ZWdvcnlQYWdlKCkge1xuICBjb25zdCBwYXJhbXMgPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgY2F0ZWdvcnlJZCA9IHBhcmFtcy5jYXRlZ29yeUlkIGFzIENhdGVnb3J5SWQ7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuXG4gIGNvbnN0IFt2aWV3TW9kZSwgc2V0Vmlld01vZGVdID0gdXNlU3RhdGU8Vmlld01vZGU+KFwibGlzdFwiKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gZmlsdGVyICsgc29ydCBzdGF0ZVxuICBjb25zdCBbYnJhbmRGaWx0ZXIsIHNldEJyYW5kRmlsdGVyXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJhbGxcIik7XG4gIGNvbnN0IFtzb3J0QnksIHNldFNvcnRCeV0gPSB1c2VTdGF0ZTxTb3J0T3B0aW9uPihcInJlbGV2YW5jZVwiKTtcbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuXG4gIC8vICBidWlsZCBzdGF0ZSBmb3IgdGhpcyBwYWdlLCBzeW5jZWQgd2l0aCBsb2NhbFN0b3JhZ2VcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB7fTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIHJldHVybiBzdG9yZWQgPyAoSlNPTi5wYXJzZShzdG9yZWQpIGFzIEJ1aWxkU3RhdGUpIDoge307XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNhdGVnb3J5SWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaENhdGVnb3J5UGFydHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByb2xlcyA9IENBVEVHT1JZX1RPX1BBUlRfUk9MRVNbY2F0ZWdvcnlJZF0gPz8gW107XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBzZWFyY2guc2V0KFwicGxhdGZvcm1cIiwgXCJBUi0xNVwiKTtcbiAgICAgICAgcm9sZXMuZm9yRWFjaCgocikgPT4gc2VhcmNoLmFwcGVuZChcInBhcnRSb2xlc1wiLCByKSk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlciR7XG4gICAgICAgICAgcm9sZXMubGVuZ3RoID8gYD8ke3NlYXJjaC50b1N0cmluZygpfWAgOiBcIlwiXG4gICAgICAgIH1gO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hDYXRlZ29yeVBhcnRzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbY2F0ZWdvcnlJZF0pO1xuXG4gIC8vICBwZXJzaXN0IGJ1aWxkIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICAvLyAgaGFuZGxlciB0byB0b2dnbGUgQWRkIC8gUmVtb3ZlIGZvciB0aGlzIGNhdGVnb3J5XG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gYnVpbGRbY2F0ZWdvcnlJZF0gPT09IHBhcnRJZDtcblxuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAvLyBSZW1vdmUgZnJvbSBidWlsZFxuICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZDogQnVpbGRTdGF0ZSA9IHsgLi4ucHJldiB9O1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtjYXRlZ29yeUlkXTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQWRkIHRvIGJ1aWxkIGFuZCBuYXZpZ2F0ZSBiYWNrIHRvIG1haW4gZ3VuYnVpbGRlciBwYWdlXG4gICAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICB9KSk7XG4gICAgICByb3V0ZXIucHVzaChcIi9ndW5idWlsZGVyXCIpO1xuICAgIH1cbiAgfTtcblxuICAvLyBhdmFpbGFibGUgYnJhbmRzIGZvciBmaWx0ZXJcbiAgY29uc3QgYXZhaWxhYmxlQnJhbmRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgQXJyYXkuZnJvbShuZXcgU2V0KHBhcnRzLm1hcCgocCkgPT4gcC5icmFuZCkpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpLFxuICAgIFtwYXJ0c10sXG4gICk7XG5cbiAgLy8gZmlsdGVyZWQgKyBzb3J0ZWQgcGFydHMgd2l0aCBzZWxlY3RlZCBwYXJ0IHBpbm5lZCB0byB0b3BcbiAgY29uc3QgZmlsdGVyZWRQYXJ0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBbLi4ucGFydHNdO1xuXG4gICAgaWYgKGJyYW5kRmlsdGVyICE9PSBcImFsbFwiKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmJyYW5kID09PSBicmFuZEZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gc2VhcmNoUXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vcm1hbGl6ZWRRdWVyeSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcigocCkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gcC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGJyYW5kID0gcC5icmFuZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG5hbWUuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KSB8fFxuICAgICAgICAgIGJyYW5kLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc29ydEJ5KSB7XG4gICAgICBjYXNlIFwicHJpY2UtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLnByaWNlIC0gYi5wcmljZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInByaWNlLWRlc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGIucHJpY2UgLSBhLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiYnJhbmQtYXNjXCI6XG4gICAgICAgIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmJyYW5kLmxvY2FsZUNvbXBhcmUoYi5icmFuZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJyZWxldmFuY2VcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIGxlYXZlIGluIGJhY2tlbmQgb3JkZXJcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGFydCAoZm9yIHRoaXMgY2F0ZWdvcnkpIHRvIHRoZSB0b3AsIGlmIGFueVxuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSBidWlsZFtjYXRlZ29yeUlkXTtcbiAgICBpZiAoc2VsZWN0ZWRJZCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmlkID09PSBzZWxlY3RlZElkKTtcbiAgICAgIGNvbnN0IG90aGVycyA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHAuaWQgIT09IHNlbGVjdGVkSWQpO1xuICAgICAgcmVzdWx0ID0gWy4uLnNlbGVjdGVkLCAuLi5vdGhlcnNdO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtwYXJ0cywgYnJhbmRGaWx0ZXIsIHNvcnRCeSwgYnVpbGQsIGNhdGVnb3J5SWQsIHNlYXJjaFF1ZXJ5XSk7XG5cbiAgaWYgKCFjYXRlZ29yeSkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgQ2F0ZWdvcnkgTm90IEZvdW5kXG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDAgaG92ZXI6dGV4dC1hbWJlci0yMDAgdW5kZXJsaW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUmV0dXJuIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX0gPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5QYXJ0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtemluYy00MDAgbWF4LXcteGxcIj5cbiAgICAgICAgICAgICAgICBCcm93c2UgYWxsIGF2YWlsYWJsZSB7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfSBvcHRpb25zIGZvclxuICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQsIHB1bGxlZCBsaXZlIGZyb20geW91ciBCYWxsaXN0aWMgYmFja2VuZC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIHBhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTIgYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMSBiZy16aW5jLTk1MC82MFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJjYXJkXCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImNhcmRcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2FyZCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYXJkXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9kZShcImxpc3RcIil9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPT09IFwibGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMFwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJMaXN0IHZpZXdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIExpc3RcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICB7LyogUGFydHMgR3JpZC9MaXN0ICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIHsvKiBGaWx0ZXIgKyBzb3J0IHRvb2xiYXIgKi99XG4gICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCBmbGV4IGZsZXgtY29sIGdhcC0zIG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlciBtZDpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaG93aW5ne1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFBhcnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgIG9me1wiIFwifVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy0yMDAgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIHtwYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwicGFydC1zZWFyY2hcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VhcmNoXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwicGFydC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2hRdWVyeShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7Y2F0ZWdvcnkubmFtZS50b0xvd2VyQ2FzZSgpfS4uLmB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJyYW5kXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXticmFuZEZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRCcmFuZEZpbHRlcihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsIGJyYW5kczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7YXZhaWxhYmxlQnJhbmRzLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtifSB2YWx1ZT17Yn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yn1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInNvcnQtYnlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgU29ydFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NvcnRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnRCeShlLnRhcmdldC52YWx1ZSBhcyBTb3J0T3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVsZXZhbmNlXCI+UmVsZXZhbmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1hc2NcIj5QcmljZTogTG93IOKGkiBIaWdoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1kZXNjXCI+UHJpY2U6IEhpZ2gg4oaSIExvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJhbmQtYXNjXCI+QnJhbmQ6IEEg4oaSIFo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZmlsdGVyZWRQYXJ0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBObyBwYXJ0cyBhdmFpbGFibGUgZm9yIHRoaXMgY2F0ZWdvcnkgeWV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiB2aWV3TW9kZSA9PT0gXCJjYXJkXCIgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bncm91cCByZWxhdGl2ZSByb3VuZGVkLW1kIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZmxleCBmbGV4LWNvbCBib3JkZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiYm9yZGVyLWFtYmVyLTQwMC83MCBiZy1hbWJlci00MDAvMTAgc2hhZG93LVswXzBfMF8xcHhfcmdiYSgyNTEsMTkxLDM2LDAuMjUpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwXCJcbiAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ub3JtYWxcIj7igJQge3BhcnQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVQYXJ0KGNhdGVnb3J5SWQsIHBhcnQuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleC0xIHJvdW5kZWQtbWQgcHgtMyBweS0yIHRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlciAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWxlY3RlZCA/IFwiUmVtb3ZlIGZyb20gQnVpbGRcIiA6IFwiQWRkIHRvIEJ1aWxkXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgey8qIEhlYWRlciByb3cgZm9yIGxpc3QgdmlldyAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6Z3JpZCBncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIGdhcC00IHB4LTMgcGItMiB0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+UGFydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5CcmFuZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCI+UHJpY2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodCBwci0yXCI+QWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBidWlsZFtjYXRlZ29yeUlkXSA9PT0gcGFydC5pZDtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGtleT17cGFydC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bncm91cCByZWxhdGl2ZSByb3VuZGVkLW1kIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgYm9yZGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItYW1iZXItNDAwLzcwIGJnLWFtYmVyLTQwMC8xMCBzaGFkb3ctWzBfMF8wXzFweF9yZ2JhKDI1MSwxOTEsMzYsMC4yNSldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMFwiXG4gICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6Z3JpZCBtZDpncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIG1kOml0ZW1zLWNlbnRlciBtZDpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgbWQ6dGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1kOnRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgbWQ6dGV4dC1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVQYXJ0KGNhdGVnb3J5SWQsIHBhcnQuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtMTAwIGJvcmRlciBib3JkZXItemluYy02MDAgaG92ZXI6YmctemluYy03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTGluayIsInVzZVBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiQ0FURUdPUllfVE9fUEFSVF9ST0xFUyIsInVwcGVyIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwiY2hhcmdpbmdIYW5kbGUiLCJidWZmZXIiLCJsb3dlclBhcnRzIiwic2lnaHRzIiwiU1RPUkFHRV9LRVkiLCJDYXRlZ29yeVBhZ2UiLCJwYXJhbXMiLCJjYXRlZ29yeUlkIiwicm91dGVyIiwidmlld01vZGUiLCJzZXRWaWV3TW9kZSIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJicmFuZEZpbHRlciIsInNldEJyYW5kRmlsdGVyIiwic29ydEJ5Iiwic2V0U29ydEJ5Iiwic2VhcmNoUXVlcnkiLCJzZXRTZWFyY2hRdWVyeSIsImJ1aWxkIiwic2V0QnVpbGQiLCJzdG9yZWQiLCJ3aW5kb3ciLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwiY2F0ZWdvcnkiLCJmaW5kIiwiYyIsImlkIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoQ2F0ZWdvcnlQYXJ0cyIsInJvbGVzIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwic2V0IiwiZm9yRWFjaCIsInIiLCJhcHBlbmQiLCJ1cmwiLCJsZW5ndGgiLCJ0b1N0cmluZyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwiYnV5VXJsIiwibm90ZXMiLCJlcnIiLCJtZXNzYWdlIiwiYWJvcnQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiaGFuZGxlVG9nZ2xlUGFydCIsInBhcnRJZCIsImlzU2VsZWN0ZWQiLCJwcmV2IiwidXBkYXRlZCIsInB1c2giLCJhdmFpbGFibGVCcmFuZHMiLCJBcnJheSIsImZyb20iLCJTZXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImZpbHRlcmVkUGFydHMiLCJyZXN1bHQiLCJub3JtYWxpemVkUXVlcnkiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsInNlbGVjdGVkSWQiLCJzZWxlY3RlZCIsIm90aGVycyIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoMSIsImhyZWYiLCJoZWFkZXIiLCJzcGFuIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwic2VjdGlvbiIsImxhYmVsIiwiaHRtbEZvciIsImlucHV0IiwidmFsdWUiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJwbGFjZWhvbGRlciIsInNlbGVjdCIsIm9wdGlvbiIsInBhcnQiLCJ0b0ZpeGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/[categoryId]/page.e3d46f4ba3a2dd37.hot-update.js b/.next/static/webpack/app/gunbuilder/[categoryId]/page.e3d46f4ba3a2dd37.hot-update.js new file mode 100644 index 0000000..a572da2 --- /dev/null +++ b/.next/static/webpack/app/gunbuilder/[categoryId]/page.e3d46f4ba3a2dd37.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/gunbuilder/[categoryId]/page",{ + +/***/ "(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx": +/*!**********************************************!*\ + !*** ./app/gunbuilder/[categoryId]/page.tsx ***! + \**********************************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CategoryPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\nconst CATEGORY_TO_PART_ROLES = {\n upper: [\n \"upper-receiver\"\n ],\n barrel: [\n \"barrel\"\n ],\n handguard: [\n \"handguard\"\n ],\n chargingHandle: [\n \"charging-handle\"\n ],\n buffer: [\n \"buffer-kit\"\n ],\n lowerParts: [\n \"lower-parts-kit\"\n ],\n sights: [\n \"sight\"\n ]\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction CategoryPage() {\n _s();\n const params = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams)();\n const categoryId = params.categoryId;\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [viewMode, setViewMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"list\");\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // NEW: filter + sort state\n const [brandFilter, setBrandFilter] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"all\");\n const [sortBy, setSortBy] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"relevance\");\n // NEW: build state for this page, synced with localStorage\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (false) {}\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n });\n const category = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId), [\n categoryId\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (!categoryId) return;\n const controller = new AbortController();\n async function fetchCategoryParts() {\n try {\n setLoading(true);\n setError(null);\n var _CATEGORY_TO_PART_ROLES_categoryId;\n const roles = (_CATEGORY_TO_PART_ROLES_categoryId = CATEGORY_TO_PART_ROLES[categoryId]) !== null && _CATEGORY_TO_PART_ROLES_categoryId !== void 0 ? _CATEGORY_TO_PART_ROLES_categoryId : [];\n const search = new URLSearchParams();\n search.set(\"platform\", \"AR-15\");\n roles.forEach((r)=>search.append(\"partRoles\", r));\n const url = \"\".concat(API_BASE_URL, \"/api/products/gunbuilder\").concat(roles.length ? \"?\".concat(search.toString()) : \"\");\n const res = await fetch(url, {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n });\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchCategoryParts();\n return ()=>controller.abort();\n }, [\n categoryId\n ]);\n // NEW: persist build to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (false) {}\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n } catch (e) {\n // ignore\n }\n }, [\n build\n ]);\n // NEW: handler to toggle Add / Remove for this category\n const handleTogglePart = (categoryId, partId)=>{\n const isSelected = build[categoryId] === partId;\n if (isSelected) {\n // Remove from build\n setBuild((prev)=>{\n const updated = {\n ...prev\n };\n delete updated[categoryId];\n return updated;\n });\n } else {\n // Add to build and navigate back to main gunbuilder page\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n router.push(\"/gunbuilder\");\n }\n };\n // NEW: available brands for filter\n const availableBrands = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>Array.from(new Set(parts.map((p)=>p.brand))).filter(Boolean).sort((a, b)=>a.localeCompare(b)), [\n parts\n ]);\n // NEW: filtered + sorted parts with selected part pinned to top\n const filteredParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n let result = [\n ...parts\n ];\n if (brandFilter !== \"all\") {\n result = result.filter((p)=>p.brand === brandFilter);\n }\n switch(sortBy){\n case \"price-asc\":\n result.sort((a, b)=>a.price - b.price);\n break;\n case \"price-desc\":\n result.sort((a, b)=>b.price - a.price);\n break;\n case \"brand-asc\":\n result.sort((a, b)=>a.brand.localeCompare(b.brand));\n break;\n case \"relevance\":\n default:\n break;\n }\n // Pin the currently selected part (for this category) to the top, if any\n const selectedId = build[categoryId];\n if (selectedId) {\n const selected = result.filter((p)=>p.id === selectedId);\n const others = result.filter((p)=>p.id !== selectedId);\n result = [\n ...selected,\n ...others\n ];\n }\n return result;\n }, [\n parts,\n brandFilter,\n sortBy,\n build,\n categoryId\n ]);\n if (!category) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"Category Not Found\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 205,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-amber-300 hover:text-amber-200 underline\",\n children: \"Return to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 208,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 204,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 203,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 202,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 225,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 233,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n category.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 237,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 236,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: [\n \"Browse all available \",\n category.name.toLowerCase(),\n \" options for your build, pulled live from your Ballistic backend.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 239,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 232,\n columnNumber: 13\n }, this),\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 border border-zinc-800 rounded-md p-1 bg-zinc-950/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"card\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"card\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"Card view\",\n children: \"Card\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 246,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setViewMode(\"list\"),\n className: \"px-3 py-1.5 text-xs font-medium rounded transition-colors \".concat(viewMode === \"list\" ? \"bg-zinc-800 text-zinc-50\" : \"text-zinc-400 hover:text-zinc-300\"),\n \"aria-label\": \"List view\",\n children: \"List\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 245,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 231,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 224,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n !loading && !error && parts.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4 flex flex-col gap-3 md:flex-row md:items-center md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n \"Showing\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: filteredParts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 282,\n columnNumber: 17\n }, this),\n \" \",\n \"of\",\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-200 font-medium\",\n children: parts.length\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 286,\n columnNumber: 17\n }, this),\n \" \",\n \"parts\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 280,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"brand-filter\",\n className: \"text-xs text-zinc-500\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 293,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"brand-filter\",\n value: brandFilter,\n onChange: (e)=>setBrandFilter(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"all\",\n children: \"All brands\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 305,\n columnNumber: 21\n }, this),\n availableBrands.map((b)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: b,\n children: b\n }, b, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 307,\n columnNumber: 23\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 299,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 292,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"sort-by\",\n className: \"text-xs text-zinc-500\",\n children: \"Sort\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 314,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"sort-by\",\n value: sortBy,\n onChange: (e)=>setSortBy(e.target.value),\n className: \"rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 focus:outline-none focus:ring-1 focus:ring-amber-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"relevance\",\n children: \"Relevance\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 325,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-asc\",\n children: \"Price: Low → High\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 326,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"price-desc\",\n children: \"Price: High → Low\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 327,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"brand-asc\",\n children: \"Brand: A → Z\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 328,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 317,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 313,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 291,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 279,\n columnNumber: 13\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: [\n \"Loading \",\n category.name.toLowerCase(),\n \"…\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 336,\n columnNumber: 13\n }, this) : error ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 text-center py-8\",\n children: [\n error,\n \" — check that the Ballistic API is running.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 340,\n columnNumber: 13\n }, this) : filteredParts.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 text-center py-8\",\n children: \"No parts available for this category yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 344,\n columnNumber: 13\n }, this) : viewMode === \"card\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-3 md:grid-cols-2 lg:grid-cols-3\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 flex flex-col border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center gap-2 mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: [\n part.brand,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-normal\",\n children: [\n \"— \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 365,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 363,\n columnNumber: 25\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-2\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 368,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 362,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 373,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 361,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors text-center\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 378,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"flex-1 rounded-md px-3 py-2 text-xs font-semibold transition-colors text-center \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 384,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 377,\n columnNumber: 21\n }, this)\n ]\n }, part.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 353,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 348,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:grid grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] gap-4 px-3 pb-2 text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 404,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 405,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 406,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-right pr-2\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 407,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 403,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: filteredParts.map((part)=>{\n const isSelected = build[categoryId] === part.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"group relative rounded-md p-3 transition-all duration-200 border \".concat(isSelected ? \"border-amber-400/70 bg-amber-400/10 shadow-[0_0_0_1px_rgba(251,191,36,0.25)]\" : \"border-zinc-700 bg-zinc-900/50 hover:border-amber-400/60 hover:bg-amber-400/10\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2 md:grid md:grid-cols-[minmax(0,3fr)_minmax(0,1fr)_minmax(0,1fr)_auto] md:items-center md:gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-zinc-50\",\n children: part.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 425,\n columnNumber: 27\n }, this),\n part.notes && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-zinc-400 line-clamp-1\",\n children: part.notes\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 429,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 424,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs md:text-sm text-zinc-400 md:text-left\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 434,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-amber-300 md:text-right\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 437,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(categoryId, \"/\").concat(part.id),\n className: \"rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 hover:bg-zinc-700 hover:border-zinc-600 transition-colors whitespace-nowrap\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 441,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleTogglePart(categoryId, part.id),\n className: \"rounded-md px-3 py-1.5 text-xs font-semibold transition-colors whitespace-nowrap \".concat(isSelected ? \"bg-zinc-800 text-zinc-100 border border-zinc-600 hover:bg-zinc-700\" : \"bg-amber-400 text-black hover:bg-amber-300\"),\n children: isSelected ? \"Remove from Build\" : \"Add to Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 447,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 440,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 423,\n columnNumber: 23\n }, this)\n }, part.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 415,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 410,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 276,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 222,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx\",\n lineNumber: 221,\n columnNumber: 5\n }, this);\n}\n_s(CategoryPage, \"pJYAu1Vs5wLdusWqq2Thip72pdg=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = CategoryPage;\nvar _c;\n$RefreshReg$(_c, \"CategoryPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL1tjYXRlZ29yeUlkXS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQzBCO0FBQ0g7SUFpQmxETztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQUUxQyxNQUFNSSx5QkFBdUQ7SUFDM0RDLE9BQU87UUFBQztLQUFpQjtJQUN6QkMsUUFBUTtRQUFDO0tBQVM7SUFDbEJDLFdBQVc7UUFBQztLQUFZO0lBQ3hCQyxnQkFBZ0I7UUFBQztLQUFrQjtJQUNuQ0MsUUFBUTtRQUFDO0tBQWE7SUFDdEJDLFlBQVk7UUFBQztLQUFrQjtJQUMvQkMsUUFBUTtRQUFDO0tBQVE7QUFDbkI7QUFPQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLFNBQVNqQiwwREFBU0E7SUFDeEIsTUFBTWtCLGFBQWFELE9BQU9DLFVBQVU7SUFDcEMsTUFBTUMsU0FBU2xCLDBEQUFTQTtJQUV4QixNQUFNLENBQUNtQixVQUFVQyxZQUFZLEdBQUd2QiwrQ0FBUUEsQ0FBVztJQUNuRCxNQUFNLENBQUN3QixPQUFPQyxTQUFTLEdBQUd6QiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQzBCLFNBQVNDLFdBQVcsR0FBRzNCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQzRCLE9BQU9DLFNBQVMsR0FBRzdCLCtDQUFRQSxDQUFnQjtJQUVsRCwyQkFBMkI7SUFDM0IsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQVM7SUFDdkQsTUFBTSxDQUFDZ0MsUUFBUUMsVUFBVSxHQUFHakMsK0NBQVFBLENBQWE7SUFFakQsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQ2tDLE9BQU9DLFNBQVMsR0FBR25DLCtDQUFRQSxDQUFhO1FBQzdDLElBQUksS0FBNkIsRUFB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QUlELFdBQVU7OzBFQUNiLDhEQUFDQztnRUFBSUQsV0FBVTswRUFDWm9CLEtBQUt2RCxJQUFJOzs7Ozs7NERBRVh1RCxLQUFLaEQsS0FBSyxrQkFDVCw4REFBQ1I7Z0VBQUVvQyxXQUFVOzBFQUNWb0IsS0FBS2hELEtBQUs7Ozs7Ozs7Ozs7OztrRUFJakIsOERBQUM2Qjt3REFBSUQsV0FBVTtrRUFDWm9CLEtBQUt0RCxLQUFLOzs7Ozs7a0VBRWIsOERBQUNtQzt3REFBSUQsV0FBVTs7NERBQXFEOzREQUNoRW9CLEtBQUtyRCxLQUFLLENBQUNzRCxPQUFPLENBQUM7Ozs7Ozs7a0VBRXZCLDhEQUFDcEI7d0RBQUlELFdBQVU7OzBFQUNiLDhEQUFDeEcsaURBQUlBO2dFQUNIMkcsTUFBTSxlQUE2QmlCLE9BQWR6RyxZQUFXLEtBQVcsT0FBUnlHLEtBQUtoRixFQUFFO2dFQUMxQzRELFdBQVU7MEVBQ1g7Ozs7OzswRUFHRCw4REFBQ087Z0VBQ0NDLE1BQUs7Z0VBQ0xDLFNBQVMsSUFDUC9CLGlCQUFpQi9ELFlBQVl5RyxLQUFLaEYsRUFBRTtnRUFFdEM0RCxXQUFXLG9GQUlWLE9BSENwQixhQUNJLHVFQUNBOzBFQUdMQSxhQUFhLHNCQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQTFDckN3QyxLQUFLaEYsRUFBRTs7Ozs7b0NBZ0RsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFoQjtHQTlhd0IzQjs7UUFDUGhCLHNEQUFTQTtRQUVUQyxzREFBU0E7OztLQUhGZSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9bY2F0ZWdvcnlJZF0vcGFnZS50c3g/OGI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxudHlwZSBWaWV3TW9kZSA9IFwiY2FyZFwiIHwgXCJsaXN0XCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG5jb25zdCBDQVRFR09SWV9UT19QQVJUX1JPTEVTOiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nW10+ID0ge1xuICB1cHBlcjogW1widXBwZXItcmVjZWl2ZXJcIl0sXG4gIGJhcnJlbDogW1wiYmFycmVsXCJdLFxuICBoYW5kZ3VhcmQ6IFtcImhhbmRndWFyZFwiXSxcbiAgY2hhcmdpbmdIYW5kbGU6IFtcImNoYXJnaW5nLWhhbmRsZVwiXSxcbiAgYnVmZmVyOiBbXCJidWZmZXIta2l0XCJdLFxuICBsb3dlclBhcnRzOiBbXCJsb3dlci1wYXJ0cy1raXRcIl0sXG4gIHNpZ2h0czogW1wic2lnaHRcIl0sXG59O1xuXG4vLyBORVc6IHNvcnQgb3B0aW9uc1xudHlwZSBTb3J0T3B0aW9uID0gXCJyZWxldmFuY2VcIiB8IFwicHJpY2UtYXNjXCIgfCBcInByaWNlLWRlc2NcIiB8IFwiYnJhbmQtYXNjXCI7XG5cbi8vIE5FVzogYnVpbGQgc3RhdGUgdHlwZSArIHN0b3JhZ2Uga2V5IChtYXRjaGVzIC9ndW5idWlsZGVyKVxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47XG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYXRlZ29yeVBhZ2UoKSB7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCBjYXRlZ29yeUlkID0gcGFyYW1zLmNhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZDtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG5cbiAgY29uc3QgW3ZpZXdNb2RlLCBzZXRWaWV3TW9kZV0gPSB1c2VTdGF0ZTxWaWV3TW9kZT4oXCJsaXN0XCIpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBORVc6IGZpbHRlciArIHNvcnQgc3RhdGVcbiAgY29uc3QgW2JyYW5kRmlsdGVyLCBzZXRCcmFuZEZpbHRlcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiYWxsXCIpO1xuICBjb25zdCBbc29ydEJ5LCBzZXRTb3J0QnldID0gdXNlU3RhdGU8U29ydE9wdGlvbj4oXCJyZWxldmFuY2VcIik7XG5cbiAgLy8gTkVXOiBidWlsZCBzdGF0ZSBmb3IgdGhpcyBwYWdlLCBzeW5jZWQgd2l0aCBsb2NhbFN0b3JhZ2VcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB7fTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIHJldHVybiBzdG9yZWQgPyAoSlNPTi5wYXJzZShzdG9yZWQpIGFzIEJ1aWxkU3RhdGUpIDoge307XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjYXRlZ29yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQ0FURUdPUklFUy5maW5kKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSxcbiAgICBbY2F0ZWdvcnlJZF0sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNhdGVnb3J5SWQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaENhdGVnb3J5UGFydHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByb2xlcyA9IENBVEVHT1JZX1RPX1BBUlRfUk9MRVNbY2F0ZWdvcnlJZF0gPz8gW107XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBzZWFyY2guc2V0KFwicGxhdGZvcm1cIiwgXCJBUi0xNVwiKTtcbiAgICAgICAgcm9sZXMuZm9yRWFjaCgocikgPT4gc2VhcmNoLmFwcGVuZChcInBhcnRSb2xlc1wiLCByKSk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlciR7XG4gICAgICAgICAgcm9sZXMubGVuZ3RoID8gYD8ke3NlYXJjaC50b1N0cmluZygpfWAgOiBcIlwiXG4gICAgICAgIH1gO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmV0Y2hDYXRlZ29yeVBhcnRzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbY2F0ZWdvcnlJZF0pO1xuXG4gIC8vIE5FVzogcGVyc2lzdCBidWlsZCB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoYnVpbGQpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgLy8gTkVXOiBoYW5kbGVyIHRvIHRvZ2dsZSBBZGQgLyBSZW1vdmUgZm9yIHRoaXMgY2F0ZWdvcnlcbiAgY29uc3QgaGFuZGxlVG9nZ2xlUGFydCA9IChjYXRlZ29yeUlkOiBDYXRlZ29yeUlkLCBwYXJ0SWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBidWlsZFtjYXRlZ29yeUlkXSA9PT0gcGFydElkO1xuXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIC8vIFJlbW92ZSBmcm9tIGJ1aWxkXG4gICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkOiBCdWlsZFN0YXRlID0geyAuLi5wcmV2IH07XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW2NhdGVnb3J5SWRdO1xuICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGQgdG8gYnVpbGQgYW5kIG5hdmlnYXRlIGJhY2sgdG8gbWFpbiBndW5idWlsZGVyIHBhZ2VcbiAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICAgIH0pKTtcbiAgICAgIHJvdXRlci5wdXNoKFwiL2d1bmJ1aWxkZXJcIik7XG4gICAgfVxuICB9O1xuXG4gIC8vIE5FVzogYXZhaWxhYmxlIGJyYW5kcyBmb3IgZmlsdGVyXG4gIGNvbnN0IGF2YWlsYWJsZUJyYW5kcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIEFycmF5LmZyb20obmV3IFNldChwYXJ0cy5tYXAoKHApID0+IHAuYnJhbmQpKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKSxcbiAgICBbcGFydHNdLFxuICApO1xuXG4gIC8vIE5FVzogZmlsdGVyZWQgKyBzb3J0ZWQgcGFydHMgd2l0aCBzZWxlY3RlZCBwYXJ0IHBpbm5lZCB0byB0b3BcbiAgY29uc3QgZmlsdGVyZWRQYXJ0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBbLi4ucGFydHNdO1xuXG4gICAgaWYgKGJyYW5kRmlsdGVyICE9PSBcImFsbFwiKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKChwKSA9PiBwLmJyYW5kID09PSBicmFuZEZpbHRlcik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChzb3J0QnkpIHtcbiAgICAgIGNhc2UgXCJwcmljZS1hc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGEucHJpY2UgLSBiLnByaWNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicHJpY2UtZGVzY1wiOlxuICAgICAgICByZXN1bHQuc29ydCgoYSwgYikgPT4gYi5wcmljZSAtIGEucHJpY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJicmFuZC1hc2NcIjpcbiAgICAgICAgcmVzdWx0LnNvcnQoKGEsIGIpID0+IGEuYnJhbmQubG9jYWxlQ29tcGFyZShiLmJyYW5kKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInJlbGV2YW5jZVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gbGVhdmUgaW4gYmFja2VuZCBvcmRlclxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBQaW4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXJ0IChmb3IgdGhpcyBjYXRlZ29yeSkgdG8gdGhlIHRvcCwgaWYgYW55XG4gICAgY29uc3Qgc2VsZWN0ZWRJZCA9IGJ1aWxkW2NhdGVnb3J5SWRdO1xuICAgIGlmIChzZWxlY3RlZElkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHJlc3VsdC5maWx0ZXIoKHApID0+IHAuaWQgPT09IHNlbGVjdGVkSWQpO1xuICAgICAgY29uc3Qgb3RoZXJzID0gcmVzdWx0LmZpbHRlcigocCkgPT4gcC5pZCAhPT0gc2VsZWN0ZWRJZCk7XG4gICAgICByZXN1bHQgPSBbLi4uc2VsZWN0ZWQsIC4uLm90aGVyc107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW3BhcnRzLCBicmFuZEZpbHRlciwgc29ydEJ5LCBidWlsZCwgY2F0ZWdvcnlJZF0pO1xuXG4gIGlmICghY2F0ZWdvcnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtemluYy01MCBtYi00XCI+XG4gICAgICAgICAgICAgIENhdGVnb3J5IE5vdCBGb3VuZFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwIGhvdmVyOnRleHQtYW1iZXItMjAwIHVuZGVybGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJldHVybiB0byBHdW5idWlsZGVyXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYWluPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy02eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDAgbWItNCBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKGkCBCYWNrIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UGFydHM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgICAgQnJvd3NlIGFsbCBhdmFpbGFibGUge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX0gb3B0aW9ucyBmb3JcbiAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkLCBwdWxsZWQgbGl2ZSBmcm9tIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBwYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIGJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTEgYmctemluYy05NTAvNjBcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpZXdNb2RlKFwiY2FyZFwiKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZSA9PT0gXCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy04MDAgdGV4dC16aW5jLTUwXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwXCJcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNhcmQgdmlld1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FyZFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Vmlld01vZGUoXCJsaXN0XCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LW1lZGl1bSByb3VuZGVkIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSBcImxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJ0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0zMDBcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTGlzdCB2aWV3XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBMaXN0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFBhcnRzIEdyaWQvTGlzdCAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICB7LyogRmlsdGVyICsgc29ydCB0b29sYmFyICovfVxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgcGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTQgZmxleCBmbGV4LWNvbCBnYXAtMyBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgU2hvd2luZ3tcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgPC9zcGFuPntcIiBcIn1cbiAgICAgICAgICAgICAgICBvZntcIiBcIn1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXppbmMtMjAwIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICB7cGFydHMubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgcGFydHNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEJyYW5kXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cImJyYW5kLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXticmFuZEZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRCcmFuZEZpbHRlcihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsIGJyYW5kczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7YXZhaWxhYmxlQnJhbmRzLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtifSB2YWx1ZT17Yn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yn1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInNvcnQtYnlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgU29ydFxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0LWJ5XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NvcnRCeX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnRCeShlLnRhcmdldC52YWx1ZSBhcyBTb3J0T3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC83MCB0ZXh0LXhzIHRleHQtemluYy0yMDAgcHgtMiBweS0xIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1hbWJlci00MDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmVsZXZhbmNlXCI+UmVsZXZhbmNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1hc2NcIj5QcmljZTogTG93IOKGkiBIaWdoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcmljZS1kZXNjXCI+UHJpY2U6IEhpZ2gg4oaSIExvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJhbmQtYXNjXCI+QnJhbmQ6IEEg4oaSIFo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIExvYWRpbmcge2NhdGVnb3J5Lm5hbWUudG9Mb3dlckNhc2UoKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMCB0ZXh0LWNlbnRlciBweS04XCI+XG4gICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogZmlsdGVyZWRQYXJ0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDAgdGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICBObyBwYXJ0cyBhdmFpbGFibGUgZm9yIHRoaXMgY2F0ZWdvcnkgeWV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiB2aWV3TW9kZSA9PT0gXCJjYXJkXCIgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAge2ZpbHRlcmVkUGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1aWxkW2NhdGVnb3J5SWRdID09PSBwYXJ0LmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtwYXJ0LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bncm91cCByZWxhdGl2ZSByb3VuZGVkLW1kIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgZmxleCBmbGV4LWNvbCBib3JkZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiYm9yZGVyLWFtYmVyLTQwMC83MCBiZy1hbWJlci00MDAvMTAgc2hhZG93LVswXzBfMF8xcHhfcmdiYSgyNTEsMTkxLDM2LDAuMjUpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIGhvdmVyOmJvcmRlci1hbWJlci00MDAvNjAgaG92ZXI6YmctYW1iZXItNDAwLzEwXCJcbiAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGdhcC0yIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ub3JtYWxcIj7igJQge3BhcnQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5vdGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy00MDAgbGluZS1jbGFtcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7cGFydC5wcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMiB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy03MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVUb2dnbGVQYXJ0KGNhdGVnb3J5SWQsIHBhcnQuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleC0xIHJvdW5kZWQtbWQgcHgtMyBweS0yIHRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlciAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLXppbmMtODAwIHRleHQtemluYy0xMDAgYm9yZGVyIGJvcmRlci16aW5jLTYwMCBob3ZlcjpiZy16aW5jLTcwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLWFtYmVyLTQwMCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWxlY3RlZCA/IFwiUmVtb3ZlIGZyb20gQnVpbGRcIiA6IFwiQWRkIHRvIEJ1aWxkXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgey8qIEhlYWRlciByb3cgZm9yIGxpc3QgdmlldyAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6Z3JpZCBncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIGdhcC00IHB4LTMgcGItMiB0ZXh0LVswLjdyZW1dIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+UGFydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5CcmFuZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCI+UHJpY2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yaWdodCBwci0yXCI+QWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7ZmlsdGVyZWRQYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBidWlsZFtjYXRlZ29yeUlkXSA9PT0gcGFydC5pZDtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGtleT17cGFydC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bncm91cCByZWxhdGl2ZSByb3VuZGVkLW1kIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgYm9yZGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItYW1iZXItNDAwLzcwIGJnLWFtYmVyLTQwMC8xMCBzaGFkb3ctWzBfMF8wXzFweF9yZ2JhKDI1MSwxOTEsMzYsMC4yNSldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBob3Zlcjpib3JkZXItYW1iZXItNDAwLzYwIGhvdmVyOmJnLWFtYmVyLTQwMC8xMFwiXG4gICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6Z3JpZCBtZDpncmlkLWNvbHMtW21pbm1heCgwLDNmcilfbWlubWF4KDAsMWZyKV9taW5tYXgoMCwxZnIpX2F1dG9dIG1kOml0ZW1zLWNlbnRlciBtZDpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LXppbmMtNDAwIGxpbmUtY2xhbXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubm90ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgbWQ6dGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1kOnRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5icmFuZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgbWQ6dGV4dC1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnlJZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtODAwLzUwIHB4LTMgcHktMS41IHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTcwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVQYXJ0KGNhdGVnb3J5SWQsIHBhcnQuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyBmb250LXNlbWlib2xkIHRyYW5zaXRpb24tY29sb3JzIHdoaXRlc3BhY2Utbm93cmFwICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy16aW5jLTgwMCB0ZXh0LXppbmMtMTAwIGJvcmRlciBib3JkZXItemluYy02MDAgaG92ZXI6YmctemluYy03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctYW1iZXItNDAwIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJSZW1vdmUgZnJvbSBCdWlsZFwiIDogXCJBZGQgdG8gQnVpbGRcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTGluayIsInVzZVBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiQ0FURUdPUllfVE9fUEFSVF9ST0xFUyIsInVwcGVyIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwiY2hhcmdpbmdIYW5kbGUiLCJidWZmZXIiLCJsb3dlclBhcnRzIiwic2lnaHRzIiwiU1RPUkFHRV9LRVkiLCJDYXRlZ29yeVBhZ2UiLCJwYXJhbXMiLCJjYXRlZ29yeUlkIiwicm91dGVyIiwidmlld01vZGUiLCJzZXRWaWV3TW9kZSIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJicmFuZEZpbHRlciIsInNldEJyYW5kRmlsdGVyIiwic29ydEJ5Iiwic2V0U29ydEJ5IiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsIndpbmRvdyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjYXRlZ29yeSIsImZpbmQiLCJjIiwiaWQiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hDYXRlZ29yeVBhcnRzIiwicm9sZXMiLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJmb3JFYWNoIiwiciIsImFwcGVuZCIsInVybCIsImxlbmd0aCIsInRvU3RyaW5nIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJidXlVcmwiLCJub3RlcyIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJoYW5kbGVUb2dnbGVQYXJ0IiwicGFydElkIiwiaXNTZWxlY3RlZCIsInByZXYiLCJ1cGRhdGVkIiwicHVzaCIsImF2YWlsYWJsZUJyYW5kcyIsIkFycmF5IiwiZnJvbSIsIlNldCIsImZpbHRlciIsIkJvb2xlYW4iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiZmlsdGVyZWRQYXJ0cyIsInJlc3VsdCIsInNlbGVjdGVkSWQiLCJzZWxlY3RlZCIsIm90aGVycyIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoMSIsImhyZWYiLCJoZWFkZXIiLCJzcGFuIiwidG9Mb3dlckNhc2UiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImFyaWEtbGFiZWwiLCJzZWN0aW9uIiwibGFiZWwiLCJodG1sRm9yIiwic2VsZWN0IiwidmFsdWUiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJvcHRpb24iLCJwYXJ0IiwidG9GaXhlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/[categoryId]/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/build/page.06cf6e708077e037.hot-update.js b/.next/static/webpack/app/gunbuilder/build/page.06cf6e708077e037.hot-update.js deleted file mode 100644 index b7d3b71..0000000 --- a/.next/static/webpack/app/gunbuilder/build/page.06cf6e708077e037.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/build/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/build/page.tsx": -/*!***************************************!*\ - !*** ./app/gunbuilder/build/page.tsx ***! - \***************************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ BuildDetailsPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole -> CategoryId (same as /gunbuilder page)\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\"\n};\n// Encode build state to URL-friendly string\nfunction encodeBuildState(build) {\n const entries = Object.entries(build).filter((param)=>{\n let [_, partId] = param;\n return partId;\n }).map((param)=>{\n let [categoryId, partId] = param;\n return \"\".concat(categoryId, \":\").concat(partId);\n }).join(\",\");\n return btoa(entries);\n}\n// Decode URL string to build state\nfunction decodeBuildState(encoded) {\n try {\n const decoded = atob(encoded);\n const build = {};\n decoded.split(\",\").forEach((entry)=>{\n const [categoryId, partId] = entry.split(\":\");\n if (categoryId && partId) {\n build[categoryId] = partId;\n }\n });\n return build;\n } catch (e) {\n return {};\n }\n}\nfunction BuildDetailsPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const [shareUrl, setShareUrl] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [copied, setCopied] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loadingParts, setLoadingParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [partsError, setPartsError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Load build from URL params or localStorage\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const buildParam = searchParams.get(\"build\");\n if (buildParam) {\n const decoded = decodeBuildState(buildParam);\n setBuild(decoded);\n // Also save to localStorage\n localStorage.setItem(STORAGE_KEY, JSON.stringify(decoded));\n } else if (true) {\n // Load from localStorage\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n const parsed = JSON.parse(stored);\n setBuild(parsed);\n } catch (e) {\n // Invalid stored data\n }\n }\n }\n }, [\n searchParams\n ]);\n // Fetch live parts from backend (same source as /gunbuilder)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoadingParts(true);\n setPartsError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) return null;\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter(Boolean);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setPartsError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoadingParts(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Generate shareable URL\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if ( true && Object.keys(build).length > 0) {\n const encoded = encodeBuildState(build);\n const url = \"\".concat(window.location.origin, \"/gunbuilder/build?build=\").concat(encoded);\n setShareUrl(url);\n }\n }, [\n build\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n if (parts.length === 0) return [];\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleCopyLink = async ()=>{\n if (shareUrl) {\n try {\n await navigator.clipboard.writeText(shareUrl);\n setCopied(true);\n setTimeout(()=>setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy:\", err);\n }\n }\n };\n const handleShare = async ()=>{\n if (navigator.share && shareUrl) {\n try {\n await navigator.share({\n title: \"My AR-15 Build\",\n text: \"Check out my AR-15 build: $\".concat(totalPrice.toFixed(2)),\n url: shareUrl\n });\n } catch (e) {\n handleCopyLink();\n }\n } else {\n handleCopyLink();\n }\n };\n if (!loadingParts && selectedParts.length === 0) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-4xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"No Build Selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 208,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-400 mb-6\",\n children: \"You need to select at least one part to view your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 211,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"inline-block rounded-md border border-amber-400/60 bg-amber-400/10 px-4 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 transition-colors\",\n children: \"Go to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 214,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 207,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 206,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 205,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 231,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-4 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 239,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Build \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 243,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 242,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Review your build, purchase parts from our affiliate partners, or share your build with others.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 245,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 238,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Total Build Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-3xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 253,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" parts selected\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 256,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 251,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 237,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 230,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mb-6 rounded-lg border border-zinc-800 bg-zinc-950/60 p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-2\",\n children: \"Share Your Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 267,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-400\",\n children: \"Share this link to let others view your build or bookmark it to come back later.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 270,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 266,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleShare,\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-4 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"Share\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 276,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleCopyLink,\n className: \"rounded-md border px-4 py-2 text-sm font-medium transition-colors \".concat(copied ? \"border-green-500 bg-green-500/10 text-green-400\" : \"border-zinc-700 bg-zinc-900/50 text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600\"),\n children: copied ? \"Copied!\" : \"Copy Link\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 283,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 275,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 265,\n columnNumber: 11\n }, this),\n shareUrl && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 rounded-md bg-zinc-900/50 border border-zinc-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500 mb-1\",\n children: \"Shareable URL:\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 298,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-400 break-all font-mono\",\n children: shareUrl\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 299,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 297,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 264,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-4 md:p-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-4\",\n children: \"Selected Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 308,\n columnNumber: 11\n }, this),\n loadingParts && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 mb-4\",\n children: \"Loading parts…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 313,\n columnNumber: 13\n }, this),\n partsError && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 mb-4\",\n children: [\n partsError,\n \" — check the Ballistic API.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 316,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>{\n const selectedPartId = build[category.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === category.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-4 bg-zinc-900/30\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500 mb-2\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 337,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg font-semibold text-zinc-50 mb-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 343,\n columnNumber: 29\n }, this),\n \" \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 342,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 flex gap-2 flex-wrap\",\n children: [\n part.url && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: part.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"inline-flex items-center gap-2 rounded-md border border-amber-400/60 bg-amber-400/10 px-4 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 transition-colors\",\n children: [\n \"Purchase from Retailer\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 361,\n columnNumber: 35\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 355,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 348,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(category.id, \"/\").concat(part.id),\n className: \"inline-flex items-center rounded-md border border-zinc-700 bg-zinc-900/50 px-4 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 370,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 346,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 379,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 336,\n columnNumber: 21\n }, this),\n part && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-right\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 386,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 385,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 335,\n columnNumber: 19\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 331,\n columnNumber: 17\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 321,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 307,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 flex flex-col gap-3 sm:flex-row sm:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-6 py-3 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center\",\n children: \"Edit Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 400,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n localStorage.removeItem(STORAGE_KEY);\n router.push(\"/gunbuilder\");\n },\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-6 py-3 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 407,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 406,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 399,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 228,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 227,\n columnNumber: 5\n }, this);\n}\n_s(BuildDetailsPage, \"yI2VUmiaBW67/yRb849/GHK2EJo=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = BuildDetailsPage;\nvar _c;\n$RefreshReg$(_c, \"BuildDetailsPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2J1aWxkL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFFcUQ7QUFDeEI7QUFDZ0M7QUFDVDtBQUlwRCxNQUFNTyxjQUFjO0lBR2xCQztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQWExQyxnRUFBZ0U7QUFDaEUsTUFBTUksd0JBQW9EO0lBQ3hELGtCQUFrQjtJQUNsQkMsUUFBUTtJQUNSQyxXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkJDLE9BQU87QUFDVDtBQUVBLDRDQUE0QztBQUM1QyxTQUFTQyxpQkFBaUJDLEtBQWlCO0lBQ3pDLE1BQU1DLFVBQVVDLE9BQU9ELE9BQU8sQ0FBQ0QsT0FDNUJHLE1BQU0sQ0FBQztZQUFDLENBQUNDLEdBQUdDLE9BQU87ZUFBS0E7T0FDeEJDLEdBQUcsQ0FBQztZQUFDLENBQUNDLFlBQVlGLE9BQU87ZUFBSyxHQUFpQkEsT0FBZEUsWUFBVyxLQUFVLE9BQVBGO09BQy9DRyxJQUFJLENBQUM7SUFDUixPQUFPQyxLQUFLUjtBQUNkO0FBRUEsbUNBQW1DO0FBQ25DLFNBQVNTLGlCQUFpQkMsT0FBZTtJQUN2QyxJQUFJO1FBQ0YsTUFBTUMsVUFBVUMsS0FBS0Y7UUFDckIsTUFBTVgsUUFBb0IsQ0FBQztRQUMzQlksUUFBUUUsS0FBSyxDQUFDLEtBQUtDLE9BQU8sQ0FBQyxDQUFDQztZQUMxQixNQUFNLENBQUNULFlBQVlGLE9BQU8sR0FBR1csTUFBTUYsS0FBSyxDQUFDO1lBQ3pDLElBQUlQLGNBQWNGLFFBQVE7Z0JBQ3hCTCxLQUFLLENBQUNPLFdBQXlCLEdBQUdGO1lBQ3BDO1FBQ0Y7UUFDQSxPQUFPTDtJQUNULEVBQUUsVUFBTTtRQUNOLE9BQU8sQ0FBQztJQUNWO0FBQ0Y7QUFFZSxTQUFTaUI7O0lBQ3RC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dEI7Ozs7Ozs7Ozs7Ozs4QkFLSiw4REFBQ3NDO29CQUFJRCxXQUFVOztzQ0FDYiw4REFBQzFHLGlEQUFJQTs0QkFDSDZHLE1BQUs7NEJBQ0xILFdBQVU7c0NBQ1g7Ozs7OztzQ0FHRCw4REFBQ0M7NEJBQUlELFdBQVU7c0NBQ2IsNEVBQUNRO2dDQUNDQyxNQUFLO2dDQUNMQyxTQUFTO29DQUNQckUsYUFBYXFGLFVBQVUsQ0FBQ2hJO29DQUN4QjZCLE9BQU9vRyxJQUFJLENBQUM7Z0NBQ2Q7Z0NBQ0EzQixXQUFVOzBDQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWI7R0F2V3dCM0U7O1FBQ0Q5Qiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkY2QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9idWlsZC9wYWdlLnRzeD8wYzZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjsgLy8gY2F0ZWdvcnlJZCAtPiBwYXJ0SWRcbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IHN0cmluZzsgLy8gYmFja2VuZCBVVUlEIHN0cmluZ1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbi8vIE1hcCBiYWNrZW5kIHBhcnRSb2xlIC0+IENhdGVnb3J5SWQgKHNhbWUgYXMgL2d1bmJ1aWxkZXIgcGFnZSlcbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiLFxuICBiYXJyZWw6IFwiYmFycmVsXCIsXG4gIGhhbmRndWFyZDogXCJoYW5kZ3VhcmRcIixcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIixcbiAgXCJsb3dlci1wYXJ0cy1raXRcIjogXCJsb3dlclBhcnRzXCIsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiLFxufTtcblxuLy8gRW5jb2RlIGJ1aWxkIHN0YXRlIHRvIFVSTC1mcmllbmRseSBzdHJpbmdcbmZ1bmN0aW9uIGVuY29kZUJ1aWxkU3RhdGUoYnVpbGQ6IEJ1aWxkU3RhdGUpOiBzdHJpbmcge1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgLmZpbHRlcigoW18sIHBhcnRJZF0pID0+IHBhcnRJZClcbiAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT4gYCR7Y2F0ZWdvcnlJZH06JHtwYXJ0SWR9YClcbiAgICAuam9pbihcIixcIik7XG4gIHJldHVybiBidG9hKGVudHJpZXMpO1xufVxuXG4vLyBEZWNvZGUgVVJMIHN0cmluZyB0byBidWlsZCBzdGF0ZVxuZnVuY3Rpb24gZGVjb2RlQnVpbGRTdGF0ZShlbmNvZGVkOiBzdHJpbmcpOiBCdWlsZFN0YXRlIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkZWNvZGVkID0gYXRvYihlbmNvZGVkKTtcbiAgICBjb25zdCBidWlsZDogQnVpbGRTdGF0ZSA9IHt9O1xuICAgIGRlY29kZWQuc3BsaXQoXCIsXCIpLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IGVudHJ5LnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCkge1xuICAgICAgICBidWlsZFtjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWRdID0gcGFydElkO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBidWlsZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJ1aWxkRGV0YWlsc1BhZ2UoKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcblxuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KHt9KTtcbiAgY29uc3QgW3NoYXJlVXJsLCBzZXRTaGFyZVVybF0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nUGFydHMsIHNldExvYWRpbmdQYXJ0c10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW3BhcnRzRXJyb3IsIHNldFBhcnRzRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gTG9hZCBidWlsZCBmcm9tIFVSTCBwYXJhbXMgb3IgbG9jYWxTdG9yYWdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJidWlsZFwiKTtcbiAgICBpZiAoYnVpbGRQYXJhbSkge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUJ1aWxkU3RhdGUoYnVpbGRQYXJhbSk7XG4gICAgICBzZXRCdWlsZChkZWNvZGVkKTtcbiAgICAgIC8vIEFsc28gc2F2ZSB0byBsb2NhbFN0b3JhZ2VcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShkZWNvZGVkKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAvLyBMb2FkIGZyb20gbG9jYWxTdG9yYWdlXG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICAgIHNldEJ1aWxkKHBhcnNlZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEludmFsaWQgc3RvcmVkIGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3NlYXJjaFBhcmFtc10pO1xuXG4gIC8vIEZldGNoIGxpdmUgcGFydHMgZnJvbSBiYWNrZW5kIChzYW1lIHNvdXJjZSBhcyAvZ3VuYnVpbGRlcilcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmdQYXJ0cyh0cnVlKTtcbiAgICAgICAgc2V0UGFydHNFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICBgJHtBUElfQkFTRV9VUkx9L2FwaS9wcm9kdWN0cy9ndW5idWlsZGVyP3BsYXRmb3JtPUFSLTE1YCxcbiAgICAgICAgICB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHMgKCR7cmVzLnN0YXR1c30pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGlbXSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZDogUGFydFtdID0gZGF0YVxuICAgICAgICAgIC5tYXAoKHApOiBQYXJ0IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gUEFSVF9ST0xFX1RPX0NBVEVHT1JZW3AucGFydFJvbGVdO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IHAuaWQsIC8vIGFscmVhZHkgYSBzdHJpbmcgVVVJRFxuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0UGFydHNFcnJvcihlcnIubWVzc2FnZSA/PyBcIkZhaWxlZCB0byBsb2FkIHByb2R1Y3RzXCIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZ1BhcnRzKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gR2VuZXJhdGUgc2hhcmVhYmxlIFVSTFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIE9iamVjdC5rZXlzKGJ1aWxkKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlQnVpbGRTdGF0ZShidWlsZCk7XG4gICAgICBjb25zdCB1cmwgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9ndW5idWlsZGVyL2J1aWxkP2J1aWxkPSR7ZW5jb2RlZH1gO1xuICAgICAgc2V0U2hhcmVVcmwodXJsKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFydHM6IFBhcnRbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZChcbiAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgIHAuaWQgPT09IHBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IChjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWQpLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG4gIH0sIFtidWlsZCwgcGFydHNdKTtcblxuICBjb25zdCB0b3RhbFByaWNlID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZFBhcnRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnByaWNlLCAwKSxcbiAgICBbc2VsZWN0ZWRQYXJ0c10sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ29weUxpbmsgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHNoYXJlVXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChzaGFyZVVybCk7XG4gICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRDb3BpZWQoZmFsc2UpLCAyMDAwKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHk6XCIsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNoYXJlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChuYXZpZ2F0b3Iuc2hhcmUgJiYgc2hhcmVVcmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG5hdmlnYXRvci5zaGFyZSh7XG4gICAgICAgICAgdGl0bGU6IFwiTXkgQVItMTUgQnVpbGRcIixcbiAgICAgICAgICB0ZXh0OiBgQ2hlY2sgb3V0IG15IEFSLTE1IGJ1aWxkOiAkJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9YCxcbiAgICAgICAgICB1cmw6IHNoYXJlVXJsLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBoYW5kbGVDb3B5TGluaygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVDb3B5TGluaygpO1xuICAgIH1cbiAgfTtcblxuICBpZiAoIWxvYWRpbmdQYXJ0cyAmJiBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy00eGwgcHgtNCBweS02IGxnOnB5LTEwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTUwIG1iLTRcIj5cbiAgICAgICAgICAgICAgTm8gQnVpbGQgU2VsZWN0ZWRcbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy00MDAgbWItNlwiPlxuICAgICAgICAgICAgICBZb3UgbmVlZCB0byBzZWxlY3QgYXQgbGVhc3Qgb25lIHBhcnQgdG8gdmlldyB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWJsb2NrIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEdvIHRvIEd1bmJ1aWxkZXJcbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTMwMCBtYi00IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oaQIEJhY2sgdG8gR3VuYnVpbGRlclxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTQgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LTJ4bCBtZDp0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0XCI+XG4gICAgICAgICAgICAgICAgQnVpbGQgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0zMDBcIj5TdW1tYXJ5PC9zcGFuPlxuICAgICAgICAgICAgICA8L2gxPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICAgIFJldmlldyB5b3VyIGJ1aWxkLCBwdXJjaGFzZSBwYXJ0cyBmcm9tIG91ciBhZmZpbGlhdGUgcGFydG5lcnMsIG9yXG4gICAgICAgICAgICAgICAgc2hhcmUgeW91ciBidWlsZCB3aXRoIG90aGVycy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBtZDptdC0wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+VG90YWwgQnVpbGQgUHJpY2U8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTN4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IHBhcnRzIHNlbGVjdGVkXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBTaGFyZSBTZWN0aW9uICovfVxuICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJtYi02IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTMgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyIHNtOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgU2hhcmUgWW91ciBCdWlsZFxuICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICBTaGFyZSB0aGlzIGxpbmsgdG8gbGV0IG90aGVycyB2aWV3IHlvdXIgYnVpbGQgb3IgYm9va21hcmsgaXQgdG9cbiAgICAgICAgICAgICAgICBjb21lIGJhY2sgbGF0ZXIuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTaGFyZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU2hhcmVcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5TGlua31cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Byb3VuZGVkLW1kIGJvcmRlciBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgY29waWVkXG4gICAgICAgICAgICAgICAgICAgID8gXCJib3JkZXItZ3JlZW4tNTAwIGJnLWdyZWVuLTUwMC8xMCB0ZXh0LWdyZWVuLTQwMFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDBcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2NvcGllZCA/IFwiQ29waWVkIVwiIDogXCJDb3B5IExpbmtcIn1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7c2hhcmVVcmwgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHAtMyByb3VuZGVkLW1kIGJnLXppbmMtOTAwLzUwIGJvcmRlciBib3JkZXItemluYy04MDBcIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwIG1iLTFcIj5TaGFyZWFibGUgVVJMOjwvcD5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwIGJyZWFrLWFsbCBmb250LW1vbm9cIj5cbiAgICAgICAgICAgICAgICB7c2hhcmVVcmx9XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICB7LyogQnVpbGQgUGFydHMgKi99XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTQgbWQ6cC02XCI+XG4gICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi00XCI+XG4gICAgICAgICAgICBTZWxlY3RlZCBQYXJ0c1xuICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICB7bG9hZGluZ1BhcnRzICYmIChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwMCBtYi00XCI+TG9hZGluZyBwYXJ0c+KApjwvcD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtwYXJ0c0Vycm9yICYmIChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1yZWQtNDAwIG1iLTRcIj5cbiAgICAgICAgICAgICAge3BhcnRzRXJyb3J9IOKAlCBjaGVjayB0aGUgQmFsbGlzdGljIEFQSS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cbiAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXRlZ29yeS5pZF07XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5maW5kKFxuICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiZcbiAgICAgICAgICAgICAgICAgIHAuY2F0ZWdvcnlJZCA9PT0gKGNhdGVnb3J5LmlkIGFzIENhdGVnb3J5SWQpLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItemluYy04MDAgcm91bmRlZC1tZCBwLTQgYmctemluYy05MDAvMzBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge3BhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTAgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj57cGFydC5icmFuZH08L3NwYW4+e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgZmxleCBnYXAtMiBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC51cmwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17cGFydC51cmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVyY2hhc2UgZnJvbSBSZXRhaWxlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy00IGgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwIDZINmEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTBhMiAyIDAgMDAyLTJ2LTRNMTQgNGg2bTAgMHY2bTAtNkwxMCAxNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YC9ndW5idWlsZGVyLyR7Y2F0ZWdvcnkuaWR9LyR7cGFydC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBEZXRhaWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cGFydCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICB7LyogQWN0aW9ucyAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IGZsZXggZmxleC1jb2wgZ2FwLTMgc206ZmxleC1yb3cgc206anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPExpbmtcbiAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlclwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtNiBweS0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEVkaXQgQnVpbGRcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgICAgICAgICAgIHJvdXRlci5wdXNoKFwiL2d1bmJ1aWxkZXJcIik7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC02IHB5LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENsZWFyIEJ1aWxkXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkxpbmsiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiU1RPUkFHRV9LRVkiLCJwcm9jZXNzIiwiQVBJX0JBU0VfVVJMIiwiZW52IiwiTkVYVF9QVUJMSUNfQVBJX0JBU0VfVVJMIiwiUEFSVF9ST0xFX1RPX0NBVEVHT1JZIiwiYmFycmVsIiwiaGFuZGd1YXJkIiwic2lnaHQiLCJlbmNvZGVCdWlsZFN0YXRlIiwiYnVpbGQiLCJlbnRyaWVzIiwiT2JqZWN0IiwiZmlsdGVyIiwiXyIsInBhcnRJZCIsIm1hcCIsImNhdGVnb3J5SWQiLCJqb2luIiwiYnRvYSIsImRlY29kZUJ1aWxkU3RhdGUiLCJlbmNvZGVkIiwiZGVjb2RlZCIsImF0b2IiLCJzcGxpdCIsImZvckVhY2giLCJlbnRyeSIsIkJ1aWxkRGV0YWlsc1BhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJzZXRCdWlsZCIsInNoYXJlVXJsIiwic2V0U2hhcmVVcmwiLCJjb3BpZWQiLCJzZXRDb3BpZWQiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZ1BhcnRzIiwic2V0TG9hZGluZ1BhcnRzIiwicGFydHNFcnJvciIsInNldFBhcnRzRXJyb3IiLCJidWlsZFBhcmFtIiwiZ2V0IiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdG9yZWQiLCJnZXRJdGVtIiwicGFyc2VkIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsInAiLCJwYXJ0Um9sZSIsImlkIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsInVybCIsImJ1eVVybCIsIm5vdGVzIiwiQm9vbGVhbiIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsImtleXMiLCJsZW5ndGgiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIm9yaWdpbiIsInNlbGVjdGVkUGFydHMiLCJmaW5kIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZUNvcHlMaW5rIiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0Iiwic2V0VGltZW91dCIsImNvbnNvbGUiLCJlcnJvciIsImhhbmRsZVNoYXJlIiwic2hhcmUiLCJ0aXRsZSIsInRleHQiLCJ0b0ZpeGVkIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJzZWN0aW9uIiwiaDIiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImNhdGVnb3J5Iiwic2VsZWN0ZWRQYXJ0SWQiLCJwYXJ0IiwiYSIsInRhcmdldCIsInJlbCIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInJlbW92ZUl0ZW0iLCJwdXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/build/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/build/page.fde218b3e94bb955.hot-update.js b/.next/static/webpack/app/gunbuilder/build/page.fde218b3e94bb955.hot-update.js deleted file mode 100644 index 86a7e32..0000000 --- a/.next/static/webpack/app/gunbuilder/build/page.fde218b3e94bb955.hot-update.js +++ /dev/null @@ -1,43 +0,0 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/build/page",{ - -/***/ "(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js": -/*!***********************************************************!*\ - !*** ./node_modules/next/dist/build/polyfills/process.js ***! - \***********************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -"use strict"; -eval(__webpack_require__.ts("\nvar _global_process, _global_process1;\nmodule.exports = ((_global_process = __webpack_require__.g.process) == null ? void 0 : _global_process.env) && typeof ((_global_process1 = __webpack_require__.g.process) == null ? void 0 : _global_process1.env) === \"object\" ? __webpack_require__.g.process : __webpack_require__(/*! next/dist/compiled/process */ \"(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js\");\n\n//# sourceMappingURL=process.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLHFDQUFxQyxxQkFBTSxpRkFBaUYscUJBQU0sa0VBQWtFLHFCQUFNLFdBQVcsbUJBQU8sQ0FBQyw0R0FBNEI7O0FBRXpQIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanM/MGE5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfZ2xvYmFsX3Byb2Nlc3MsIF9nbG9iYWxfcHJvY2VzczE7XG5tb2R1bGUuZXhwb3J0cyA9ICgoX2dsb2JhbF9wcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsX3Byb2Nlc3MuZW52KSAmJiB0eXBlb2YgKChfZ2xvYmFsX3Byb2Nlc3MxID0gZ2xvYmFsLnByb2Nlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsX3Byb2Nlc3MxLmVudikgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwucHJvY2VzcyA6IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcHJvY2Vzc1wiKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvY2Vzcy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\n")); - -/***/ }), - -/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js": -/*!************************************************************!*\ - !*** ./node_modules/next/dist/compiled/process/browser.js ***! - \************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={229:function(e){var t=e.exports={};var r;var n;function defaultSetTimout(){throw new Error(\"setTimeout has not been defined\")}function defaultClearTimeout(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{if(typeof setTimeout===\"function\"){r=setTimeout}else{r=defaultSetTimout}}catch(e){r=defaultSetTimout}try{if(typeof clearTimeout===\"function\"){n=clearTimeout}else{n=defaultClearTimeout}}catch(e){n=defaultClearTimeout}})();function runTimeout(e){if(r===setTimeout){return setTimeout(e,0)}if((r===defaultSetTimout||!r)&&setTimeout){r=setTimeout;return setTimeout(e,0)}try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}function runClearTimeout(e){if(n===clearTimeout){return clearTimeout(e)}if((n===defaultClearTimeout||!n)&&clearTimeout){n=clearTimeout;return clearTimeout(e)}try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}var i=[];var o=false;var u;var a=-1;function cleanUpNextTick(){if(!o||!u){return}o=false;if(u.length){i=u.concat(i)}else{a=-1}if(i.length){drainQueue()}}function drainQueue(){if(o){return}var e=runTimeout(cleanUpNextTick);o=true;var t=i.length;while(t){u=i;i=[];while(++a1){for(var r=1;r CategoryId (same as /gunbuilder page)\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\"\n};\n// Encode build state to URL-friendly string\nfunction encodeBuildState(build) {\n const entries = Object.entries(build).filter((param)=>{\n let [_, partId] = param;\n return partId;\n }).map((param)=>{\n let [categoryId, partId] = param;\n return \"\".concat(categoryId, \":\").concat(partId);\n }).join(\",\");\n return btoa(entries);\n}\n// Decode URL string to build state\nfunction decodeBuildState(encoded) {\n try {\n const decoded = atob(encoded);\n const build = {};\n decoded.split(\",\").forEach((entry)=>{\n const [categoryId, partId] = entry.split(\":\");\n if (categoryId && partId) {\n build[categoryId] = partId;\n }\n });\n return build;\n } catch (e) {\n return {};\n }\n}\nfunction BuildDetailsPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const [shareUrl, setShareUrl] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [copied, setCopied] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loadingParts, setLoadingParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [partsError, setPartsError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Load build from URL params or localStorage\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const buildParam = searchParams.get(\"build\");\n if (buildParam) {\n const decoded = decodeBuildState(buildParam);\n setBuild(decoded);\n // Also save to localStorage\n localStorage.setItem(STORAGE_KEY, JSON.stringify(decoded));\n } else if (true) {\n // Load from localStorage\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n const parsed = JSON.parse(stored);\n setBuild(parsed);\n } catch (e) {\n // Invalid stored data\n }\n }\n }\n }, [\n searchParams\n ]);\n // Fetch live parts from backend (same source as /gunbuilder)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoadingParts(true);\n setPartsError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) return null;\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: p.id,\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined\n };\n }).filter(Boolean);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setPartsError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoadingParts(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Generate shareable URL\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if ( true && Object.keys(build).length > 0) {\n const encoded = encodeBuildState(build);\n const url = \"\".concat(window.location.origin, \"/gunbuilder/build?build=\").concat(encoded);\n setShareUrl(url);\n }\n }, [\n build\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n if (parts.length === 0) return [];\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleCopyLink = async ()=>{\n if (shareUrl) {\n try {\n await navigator.clipboard.writeText(shareUrl);\n setCopied(true);\n setTimeout(()=>setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy:\", err);\n }\n }\n };\n const handleShare = async ()=>{\n if (navigator.share && shareUrl) {\n try {\n await navigator.share({\n title: \"My AR-15 Build\",\n text: \"Check out my AR-15 build: $\".concat(totalPrice.toFixed(2)),\n url: shareUrl\n });\n } catch (e) {\n handleCopyLink();\n }\n } else {\n handleCopyLink();\n }\n };\n if (!loadingParts && selectedParts.length === 0) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-4xl px-4 py-6 lg:py-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-semibold text-zinc-50 mb-4\",\n children: \"No Build Selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-400 mb-6\",\n children: \"You need to select at least one part to view your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 210,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"inline-block rounded-md border border-amber-400/60 bg-amber-400/10 px-4 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 transition-colors\",\n children: \"Go to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 213,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 206,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 205,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 204,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block\",\n children: \"← Back to Gunbuilder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 230,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-4 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 238,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Build \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 242,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 241,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Review your build, purchase parts from our affiliate partners, or share your build with others.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 244,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 237,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Total Build Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 251,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-3xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 252,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" parts selected\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 255,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 250,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 236,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 229,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mb-6 rounded-lg border border-zinc-800 bg-zinc-950/60 p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-2\",\n children: \"Share Your Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 266,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-400\",\n children: \"Share this link to let others view your build or bookmark it to come back later.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 269,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 265,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleShare,\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-4 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"Share\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 275,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleCopyLink,\n className: \"rounded-md border px-4 py-2 text-sm font-medium transition-colors \".concat(copied ? \"border-green-500 bg-green-500/10 text-green-400\" : \"border-zinc-700 bg-zinc-900/50 text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600\"),\n children: copied ? \"Copied!\" : \"Copy Link\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 282,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 274,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 264,\n columnNumber: 11\n }, this),\n shareUrl && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 rounded-md bg-zinc-900/50 border border-zinc-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500 mb-1\",\n children: \"Shareable URL:\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 297,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-400 break-all font-mono\",\n children: shareUrl\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 298,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 296,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 263,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-4 md:p-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-4\",\n children: \"Selected Parts\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 307,\n columnNumber: 11\n }, this),\n loadingParts && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500 mb-4\",\n children: \"Loading parts…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 312,\n columnNumber: 13\n }, this),\n partsError && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400 mb-4\",\n children: [\n partsError,\n \" — check the Ballistic API.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 315,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>{\n const selectedPartId = build[category.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === category.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-4 bg-zinc-900/30\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500 mb-2\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 336,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg font-semibold text-zinc-50 mb-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: part.brand\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 342,\n columnNumber: 29\n }, this),\n \" \",\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 341,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 flex gap-2 flex-wrap\",\n children: [\n part.url && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: part.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"inline-flex items-center gap-2 rounded-md border border-amber-400/60 bg-amber-400/10 px-4 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 transition-colors\",\n children: [\n \"Purchase from Retailer\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 360,\n columnNumber: 35\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 354,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 347,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/\".concat(category.id, \"/\").concat(part.id),\n className: \"inline-flex items-center rounded-md border border-zinc-700 bg-zinc-900/50 px-4 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"View Details\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 369,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 345,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 378,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 335,\n columnNumber: 21\n }, this),\n part && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-right\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 385,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 384,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 334,\n columnNumber: 19\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 330,\n columnNumber: 17\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 320,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 306,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 flex flex-col gap-3 sm:flex-row sm:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder\",\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-6 py-3 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center\",\n children: \"Edit Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 399,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n localStorage.removeItem(STORAGE_KEY);\n router.push(\"/gunbuilder\");\n },\n className: \"rounded-md border border-zinc-700 bg-zinc-900/50 px-6 py-3 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 406,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 405,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 398,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 227,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx\",\n lineNumber: 226,\n columnNumber: 5\n }, this);\n}\n_s(BuildDetailsPage, \"yI2VUmiaBW67/yRb849/GHK2EJo=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = BuildDetailsPage;\nvar _c;\n$RefreshReg$(_c, \"BuildDetailsPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL2J1aWxkL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFFcUQ7QUFDeEI7QUFDZ0M7QUFDVDtBQUlwRCxNQUFNTyxjQUFjO0lBR2xCQztBQURGLE1BQU1DLGVBQ0pELENBQUFBLHdDQUFBQSxPQUFPQSxDQUFDRSxHQUFHLENBQUNDLHdCQUF3QixjQUFwQ0gsbURBQUFBLHdDQUF3QztBQWExQyxnRUFBZ0U7QUFDaEUsTUFBTUksd0JBQW9EO0lBQ3hELGtCQUFrQjtJQUNsQkMsUUFBUTtJQUNSQyxXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkJDLE9BQU87QUFDVDtBQUVBLDRDQUE0QztBQUM1QyxTQUFTQyxpQkFBaUJDLEtBQWlCO0lBQ3pDLE1BQU1DLFVBQVVDLE9BQU9ELE9BQU8sQ0FBQ0QsT0FDNUJHLE1BQU0sQ0FBQztZQUFDLENBQUNDLEdBQUdDLE9BQU87ZUFBS0E7T0FDeEJDLEdBQUcsQ0FBQztZQUFDLENBQUNDLFlBQVlGLE9BQU87ZUFBSyxHQUFpQkEsT0FBZEUsWUFBVyxLQUFVLE9BQVBGO09BQy9DRyxJQUFJLENBQUM7SUFDUixPQUFPQyxLQUFLUjtBQUNkO0FBRUEsbUNBQW1DO0FBQ25DLFNBQVNTLGlCQUFpQkMsT0FBZTtJQUN2QyxJQUFJO1FBQ0YsTUFBTUMsVUFBVUMsS0FBS0Y7UUFDckIsTUFBTVgsUUFBb0IsQ0FBQztRQUMzQlksUUFBUUUsS0FBSyxDQUFDLEtBQUtDLE9BQU8sQ0FBQyxDQUFDQztZQUMxQixNQUFNLENBQUNULFlBQVlGLE9BQU8sR0FBR1csTUFBTUYsS0FBSyxDQUFDO1lBQ3pDLElBQUlQLGNBQWNGLFFBQVE7Z0JBQ3hCTCxLQUFLLENBQUNPLFdBQXlCLEdBQUdGO1lBQ3BDO1FBQ0Y7UUFDQSxPQUFPTDtJQUNULEVBQUUsVUFBTTtRQUNOLE9BQU8sQ0FBQztJQUNWO0FBQ0Y7QUFFZSxTQUFTaUI7O0lBQ3RC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OEJBS0osOERBQUNxQztvQkFBSUQsV0FBVTs7c0NBQ2IsOERBQUN6RyxpREFBSUE7NEJBQ0g0RyxNQUFLOzRCQUNMSCxXQUFVO3NDQUNYOzs7Ozs7c0NBR0QsOERBQUNDOzRCQUFJRCxXQUFVO3NDQUNiLDRFQUFDUTtnQ0FDQ0MsTUFBSztnQ0FDTEMsU0FBUztvQ0FDUHBFLGFBQWFvRixVQUFVLENBQUMvSDtvQ0FDeEI2QixPQUFPbUcsSUFBSSxDQUFDO2dDQUNkO2dDQUNBM0IsV0FBVTswQ0FDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFiO0dBdFd3QjFFOztRQUNEOUIsNERBQWVBO1FBQ3JCQyxzREFBU0E7OztLQUZGNkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvYnVpbGQvcGFnZS50c3g/MGM2YyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47IC8vIGNhdGVnb3J5SWQgLT4gcGFydElkXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBzdHJpbmc7IC8vIGJhY2tlbmQgVVVJRCBzdHJpbmdcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG4vLyBNYXAgYmFja2VuZCBwYXJ0Um9sZSAtPiBDYXRlZ29yeUlkIChzYW1lIGFzIC9ndW5idWlsZGVyIHBhZ2UpXG5jb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0ge1xuICBcInVwcGVyLXJlY2VpdmVyXCI6IFwidXBwZXJcIixcbiAgYmFycmVsOiBcImJhcnJlbFwiLFxuICBoYW5kZ3VhcmQ6IFwiaGFuZGd1YXJkXCIsXG4gIFwiY2hhcmdpbmctaGFuZGxlXCI6IFwiY2hhcmdpbmdIYW5kbGVcIixcbiAgXCJidWZmZXIta2l0XCI6IFwiYnVmZmVyXCIsXG4gIFwibG93ZXItcGFydHMta2l0XCI6IFwibG93ZXJQYXJ0c1wiLFxuICBzaWdodDogXCJzaWdodHNcIixcbn07XG5cbi8vIEVuY29kZSBidWlsZCBzdGF0ZSB0byBVUkwtZnJpZW5kbHkgc3RyaW5nXG5mdW5jdGlvbiBlbmNvZGVCdWlsZFN0YXRlKGJ1aWxkOiBCdWlsZFN0YXRlKTogc3RyaW5nIHtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGJ1aWxkKVxuICAgIC5maWx0ZXIoKFtfLCBwYXJ0SWRdKSA9PiBwYXJ0SWQpXG4gICAgLm1hcCgoW2NhdGVnb3J5SWQsIHBhcnRJZF0pID0+IGAke2NhdGVnb3J5SWR9OiR7cGFydElkfWApXG4gICAgLmpvaW4oXCIsXCIpO1xuICByZXR1cm4gYnRvYShlbnRyaWVzKTtcbn1cblxuLy8gRGVjb2RlIFVSTCBzdHJpbmcgdG8gYnVpbGQgc3RhdGVcbmZ1bmN0aW9uIGRlY29kZUJ1aWxkU3RhdGUoZW5jb2RlZDogc3RyaW5nKTogQnVpbGRTdGF0ZSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGVjb2RlZCA9IGF0b2IoZW5jb2RlZCk7XG4gICAgY29uc3QgYnVpbGQ6IEJ1aWxkU3RhdGUgPSB7fTtcbiAgICBkZWNvZGVkLnNwbGl0KFwiLFwiKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBlbnRyeS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQpIHtcbiAgICAgICAgYnVpbGRbY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkXSA9IHBhcnRJZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCdWlsZERldGFpbHNQYWdlKCkge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG5cbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPih7fSk7XG4gIGNvbnN0IFtzaGFyZVVybCwgc2V0U2hhcmVVcmxdID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcbiAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZ1BhcnRzLCBzZXRMb2FkaW5nUGFydHNdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtwYXJ0c0Vycm9yLCBzZXRQYXJ0c0Vycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIExvYWQgYnVpbGQgZnJvbSBVUkwgcGFyYW1zIG9yIGxvY2FsU3RvcmFnZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkUGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwiYnVpbGRcIik7XG4gICAgaWYgKGJ1aWxkUGFyYW0pIHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVCdWlsZFN0YXRlKGJ1aWxkUGFyYW0pO1xuICAgICAgc2V0QnVpbGQoZGVjb2RlZCk7XG4gICAgICAvLyBBbHNvIHNhdmUgdG8gbG9jYWxTdG9yYWdlXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoZGVjb2RlZCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgLy8gTG9hZCBmcm9tIGxvY2FsU3RvcmFnZVxuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RvcmVkKTtcbiAgICAgICAgICBzZXRCdWlsZChwYXJzZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJbnZhbGlkIHN0b3JlZCBkYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzZWFyY2hQYXJhbXNdKTtcblxuICAvLyBGZXRjaCBsaXZlIHBhcnRzIGZyb20gYmFja2VuZCAoc2FtZSBzb3VyY2UgYXMgL2d1bmJ1aWxkZXIpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJvZHVjdHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nUGFydHModHJ1ZSk7XG4gICAgICAgIHNldFBhcnRzRXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gUEFSVF9ST0xFX1RPX0NBVEVHT1JZW3AucGFydFJvbGVdO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IHAuaWQsIC8vIGFscmVhZHkgYSBzdHJpbmcgVVVJRFxuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0gYXMgUGFydDtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgUGFydFtdO1xuXG4gICAgICAgIHNldFBhcnRzKG5vcm1hbGl6ZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikgcmV0dXJuO1xuICAgICAgICBzZXRQYXJ0c0Vycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nUGFydHMoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoUHJvZHVjdHMoKTtcblxuICAgIHJldHVybiAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIFtdKTtcblxuICAvLyBHZW5lcmF0ZSBzaGFyZWFibGUgVVJMXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgT2JqZWN0LmtleXMoYnVpbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGVCdWlsZFN0YXRlKGJ1aWxkKTtcbiAgICAgIGNvbnN0IHVybCA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2d1bmJ1aWxkZXIvYnVpbGQ/YnVpbGQ9JHtlbmNvZGVkfWA7XG4gICAgICBzZXRTaGFyZVVybCh1cmwpO1xuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRQYXJ0czogUGFydFtdID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhidWlsZClcbiAgICAgIC5tYXAoKFtjYXRlZ29yeUlkLCBwYXJ0SWRdKSA9PlxuICAgICAgICBwYXJ0cy5maW5kKFxuICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gKGNhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZCksXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkLCBwYXJ0c10pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVDb3B5TGluayA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc2hhcmVVcmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNoYXJlVXJsKTtcbiAgICAgICAgc2V0Q29waWVkKHRydWUpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldENvcGllZChmYWxzZSksIDIwMDApO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29weTpcIiwgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2hhcmUgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKG5hdmlnYXRvci5zaGFyZSAmJiBzaGFyZVVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbmF2aWdhdG9yLnNoYXJlKHtcbiAgICAgICAgICB0aXRsZTogXCJNeSBBUi0xNSBCdWlsZFwiLFxuICAgICAgICAgIHRleHQ6IGBDaGVjayBvdXQgbXkgQVItMTUgYnVpbGQ6ICQke3RvdGFsUHJpY2UudG9GaXhlZCgyKX1gLFxuICAgICAgICAgIHVybDogc2hhcmVVcmwsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGhhbmRsZUNvcHlMaW5rKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZUNvcHlMaW5rKCk7XG4gICAgfVxuICB9O1xuXG4gIGlmICghbG9hZGluZ1BhcnRzICYmIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxtYWluIGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ibGFjayB0ZXh0LXppbmMtNTBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTR4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNTAgbWItNFwiPlxuICAgICAgICAgICAgICBObyBCdWlsZCBTZWxlY3RlZFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTQwMCBtYi02XCI+XG4gICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHNlbGVjdCBhdCBsZWFzdCBvbmUgcGFydCB0byB2aWV3IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICBocmVmPVwiL2d1bmJ1aWxkZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtYmxvY2sgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgR28gdG8gR3VuYnVpbGRlclxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWFpbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTQwMCBob3Zlcjp0ZXh0LXppbmMtMzAwIG1iLTQgaW5saW5lLWJsb2NrXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICDihpAgQmFjayB0byBHdW5idWlsZGVyXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBtZDpmbGV4LXJvdyBtZDppdGVtcy1lbmQgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgICBCdWlsZCA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlN1bW1hcnk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgICAgUmV2aWV3IHlvdXIgYnVpbGQsIHB1cmNoYXNlIHBhcnRzIGZyb20gb3VyIGFmZmlsaWF0ZSBwYXJ0bmVycywgb3JcbiAgICAgICAgICAgICAgICBzaGFyZSB5b3VyIGJ1aWxkIHdpdGggb3RoZXJzLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIG1kOm10LTBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5Ub3RhbCBCdWlsZCBQcmljZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgICAke3RvdGFsUHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RofSAvIHtDQVRFR09SSUVTLmxlbmd0aH0gcGFydHMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIFNoYXJlIFNlY3Rpb24gKi99XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm1iLTYgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMyBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXIgc206anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICBTaGFyZSBZb3VyIEJ1aWxkXG4gICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgIFNoYXJlIHRoaXMgbGluayB0byBsZXQgb3RoZXJzIHZpZXcgeW91ciBidWlsZCBvciBib29rbWFyayBpdCB0b1xuICAgICAgICAgICAgICAgIGNvbWUgYmFjayBsYXRlci5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNoYXJlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBTaGFyZVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvcHlMaW5rfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHJvdW5kZWQtbWQgYm9yZGVyIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBjb3BpZWRcbiAgICAgICAgICAgICAgICAgICAgPyBcImJvcmRlci1ncmVlbi01MDAgYmctZ3JlZW4tNTAwLzEwIHRleHQtZ3JlZW4tNDAwXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcImJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMFwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7Y29waWVkID8gXCJDb3BpZWQhXCIgOiBcIkNvcHkgTGlua1wifVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtzaGFyZVVybCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgcC0zIHJvdW5kZWQtbWQgYmctemluYy05MDAvNTAgYm9yZGVyIGJvcmRlci16aW5jLTgwMFwiPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDAgbWItMVwiPlNoYXJlYWJsZSBVUkw6PC9wPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDAgYnJlYWstYWxsIGZvbnQtbW9ub1wiPlxuICAgICAgICAgICAgICAgIHtzaGFyZVVybH1cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIHsvKiBCdWlsZCBQYXJ0cyAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtNCBtZDpwLTZcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTRcIj5cbiAgICAgICAgICAgIFNlbGVjdGVkIFBhcnRzXG4gICAgICAgICAgPC9oMj5cblxuICAgICAgICAgIHtsb2FkaW5nUGFydHMgJiYgKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwIG1iLTRcIj5Mb2FkaW5nIHBhcnRz4oCmPC9wPlxuICAgICAgICAgICl9XG4gICAgICAgICAge3BhcnRzRXJyb3IgJiYgKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDAgbWItNFwiPlxuICAgICAgICAgICAgICB7cGFydHNFcnJvcn0g4oCUIGNoZWNrIHRoZSBCYWxsaXN0aWMgQVBJLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcnRJZCA9IGJ1aWxkW2NhdGVnb3J5LmlkXTtcbiAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgICBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJlxuICAgICAgICAgICAgICAgICAgcC5jYXRlZ29yeUlkID09PSAoY2F0ZWdvcnkuaWQgYXMgQ2F0ZWdvcnlJZCksXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtNCBiZy16aW5jLTkwMC8zMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7cGFydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtemluYy01MCBtYi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPntwYXJ0LmJyYW5kfTwvc3Bhbj57XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBmbGV4IGdhcC0yIGZsZXgtd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LnVybCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtwYXJ0LnVybH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYW1iZXItNDAwLzYwIGJnLWFtYmVyLTQwMC8xMCBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWFtYmVyLTIwMCBob3ZlcjpiZy1hbWJlci00MDAvMTUgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXJjaGFzZSBmcm9tIFJldGFpbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTQgaC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD17Mn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAgNkg2YTIgMiAwIDAwLTIgMnYxMGEyIDIgMCAwMDIgMmgxMGEyIDIgMCAwMDItMnYtNE0xNCA0aDZtMCAwdjZtMC02TDEwIDE0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtgL2d1bmJ1aWxkZXIvJHtjYXRlZ29yeS5pZH0vJHtwYXJ0LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IERldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtwYXJ0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIHsvKiBBY3Rpb25zICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTYgZmxleCBmbGV4LWNvbCBnYXAtMyBzbTpmbGV4LXJvdyBzbTpqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC02IHB5LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRWRpdCBCdWlsZFxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgcm91dGVyLnB1c2goXCIvZ3VuYnVpbGRlclwiKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTYgcHktMyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2xlYXIgQnVpbGRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiTGluayIsInVzZVNlYXJjaFBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJTVE9SQUdFX0tFWSIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQQVJUX1JPTEVfVE9fQ0FURUdPUlkiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJzaWdodCIsImVuY29kZUJ1aWxkU3RhdGUiLCJidWlsZCIsImVudHJpZXMiLCJPYmplY3QiLCJmaWx0ZXIiLCJfIiwicGFydElkIiwibWFwIiwiY2F0ZWdvcnlJZCIsImpvaW4iLCJidG9hIiwiZGVjb2RlQnVpbGRTdGF0ZSIsImVuY29kZWQiLCJkZWNvZGVkIiwiYXRvYiIsInNwbGl0IiwiZm9yRWFjaCIsImVudHJ5IiwiQnVpbGREZXRhaWxzUGFnZSIsInNlYXJjaFBhcmFtcyIsInJvdXRlciIsInNldEJ1aWxkIiwic2hhcmVVcmwiLCJzZXRTaGFyZVVybCIsImNvcGllZCIsInNldENvcGllZCIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nUGFydHMiLCJzZXRMb2FkaW5nUGFydHMiLCJwYXJ0c0Vycm9yIiwic2V0UGFydHNFcnJvciIsImJ1aWxkUGFyYW0iLCJnZXQiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0b3JlZCIsImdldEl0ZW0iLCJwYXJzZWQiLCJwYXJzZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3RzIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwicCIsInBhcnRSb2xlIiwiaWQiLCJuYW1lIiwiYnJhbmQiLCJwcmljZSIsImltYWdlVXJsIiwibWFpbkltYWdlVXJsIiwidW5kZWZpbmVkIiwidXJsIiwiYnV5VXJsIiwiQm9vbGVhbiIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsImtleXMiLCJsZW5ndGgiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIm9yaWdpbiIsInNlbGVjdGVkUGFydHMiLCJmaW5kIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZUNvcHlMaW5rIiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0Iiwic2V0VGltZW91dCIsImNvbnNvbGUiLCJlcnJvciIsImhhbmRsZVNoYXJlIiwic2hhcmUiLCJ0aXRsZSIsInRleHQiLCJ0b0ZpeGVkIiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImgxIiwiaHJlZiIsImhlYWRlciIsInNwYW4iLCJzZWN0aW9uIiwiaDIiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsImNhdGVnb3J5Iiwic2VsZWN0ZWRQYXJ0SWQiLCJwYXJ0IiwiYSIsInRhcmdldCIsInJlbCIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInJlbW92ZUl0ZW0iLCJwdXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/build/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.505dd85efd94f5a1.hot-update.js b/.next/static/webpack/app/gunbuilder/page.505dd85efd94f5a1.hot-update.js deleted file mode 100644 index 1b46a56..0000000 --- a/.next/static/webpack/app/gunbuilder/page.505dd85efd94f5a1.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": -/*!*********************************!*\ - !*** ./app/gunbuilder/page.tsx ***! - \*********************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\n// Make sure these string values match the `id` fields in CATEGORIES.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n // Initialize from localStorage if available\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n // Use the backend UUID as the stable id for the UI\n id: p.uuid,\n categoryId,\n name: p.name,\n brand: p.brandName,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined\n };\n }).filter(Boolean);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n // Persist to localStorage\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n // Remove query param from URL\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Gunbuilder \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 183,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Parts are loaded from the live merchant feed (Aero Precision for now), using your Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 185,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 192,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 177,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 211,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 223,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 217,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 206,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 245,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 264,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 263,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 269,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 262,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 274,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 257,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 250,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 243,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Continue to Buy\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 286,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 296,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 311,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 285,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 238,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 204,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"oYoonYYu7bmIDsX4BZHpRmwTSPs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELHFFQUFxRTtBQUNyRSxNQUFNSSx3QkFBb0Q7SUFDeEQsa0JBQWtCO0lBQ2xCQyxRQUFRO0lBQ1JDLFdBQVc7SUFDWCxtQkFBbUI7SUFDbkIsY0FBYztJQUNkLG1CQUFtQjtJQUNuQkMsT0FBTztBQUNUO0FBSUEsTUFBTUMsY0FBYztBQUVMLFNBQVNDOztJQUN0QixNQUFNQyxlQUFlZCxnRUFBZUE7SUFDcEMsTUFBTWUsU0FBU2QsMERBQVNBO0lBQ3hCLE1BQU0sQ0FBQ2UsT0FBT0MsU0FBUyxHQUFHcEIsK0NBQVFBLENBQVMsRUFBRTtJQUM3QyxNQUFNLENBQUNxQixTQUFTQyxXQUFXLEdBQUd0QiwrQ0FBUUEsQ0FBQztJQUN2QyxNQUFNLENBQUN1QixPQUFPQyxTQUFTLEdBQUd4QiwrQ0FBUUEsQ0FBZ0I7SUFDbEQsTUFBTSxDQUFDeUIsT0FBT0MsU0FBUyxHQUFHMUIsK0NBQVFBLENBQWE7UUFDN0MsNENBQTRDO1FBQzVDLElBQUksSUFBNkIsRUFBRTtZQUNqQyxNQUFNMkIsU0FBU0MsYUFBYUMsT0FBTyxDQUFDZDtZQUNwQyxJQUFJWSxRQUFRO2dCQUNWLElBQUk7b0JBQ0YsT0FBT0csS0FBS0MsS0FBSyxDQUFDSjtnQkFDcEIsRUFBRSxVQUFNO29CQUNOLE9BQU8sQ0FBQztnQkFDVjtZQUNGO1FBQ0Y7UUFDQSxPQUFPLENBQUM7SUFDVjtJQUVBMUIsZ0RBQVNBLENBQUM7UUFDUixNQUFNK0IsYUFBYSxJQUFJQztRQUV2QixlQUFlQztZQUNiLElBQUk7Z0JBQ0ZaLFdBQVc7Z0JBQ1hFLFNB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Z0RBRTNELHFCQUNFLDhEQUFDdUQ7O3NFQUNDLDhEQUFDZDs0REFBSUQsV0FBVTtzRUFDWmEsSUFBSW5ELElBQUk7Ozs7Ozt3REFFVm9ELHFCQUNDLDhEQUFDYjs0REFBSUQsV0FBVTs7OEVBQ2IsOERBQUNDO29FQUFJRCxXQUFVOztzRkFDYiw4REFBQ0k7NEVBQUtKLFdBQVU7O2dGQUNiYyxLQUFLbkQsS0FBSztnRkFBRTs7Ozs7Ozt3RUFFZG1ELEtBQUtwRCxJQUFJOzs7Ozs7OzhFQUVaLDhEQUFDdUM7b0VBQUlELFdBQVU7O3dFQUF5RDt3RUFDcEVjLEtBQUtqRCxLQUFLLENBQUN3QyxPQUFPLENBQUM7Ozs7Ozs7Ozs7OztpRkFJekIsOERBQUNKOzREQUFJRCxXQUFVO3NFQUE2Qjs7Ozs7OzttREFqQnZDYSxJQUFJckQsRUFBRTs7Ozs7NENBdUJuQjs7Ozs7Ozs7Ozs7OzhDQUtKLDhEQUFDeUM7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDdEYsaURBQUlBOzRDQUNIc0csTUFBSzs0Q0FDTGhCLFdBQVcsdUtBSVYsT0FIQ1QsY0FBY2UsTUFBTSxLQUFLLElBQ3JCLHNEQUNBO3NEQUVQOzs7Ozs7c0RBR0QsOERBQUNXOzRDQUNDQyxNQUFLOzRDQUNMQyxTQUFTO2dEQUNQakYsU0FBUyxDQUFDO2dEQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7NENBQzFCOzRDQUNBOEYsVUFBVTlCLGNBQWNlLE1BQU0sS0FBSzs0Q0FDbkNOLFdBQVcsaUtBSVYsT0FIQ1QsY0FBY2UsTUFBTSxLQUFLLElBQ3JCLGtDQUNBO3NEQUVQOzs7Ozs7c0RBR0QsOERBQUNqRDs0Q0FBRTJDLFdBQVU7c0RBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVM5RDtHQXhSd0J4RTs7UUFDRGIsNERBQWVBO1FBQ3JCQyxzREFBU0E7OztLQUZGWSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb2x1bW4gfSBmcm9tIFwiQC9jb21wb25lbnRzL0NhdGVnb3J5Q29sdW1uXCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogc3RyaW5nOyAgICAgICAgICAgICAgLy8gYmFja2VuZCBVVUlEIHN0cmluZ1xuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG4vLyBNYXAgYmFja2VuZCBwYXJ0Um9sZSB0byB5b3VyIGV4aXN0aW5nIENhdGVnb3J5SWQgdmFsdWVzLlxuLy8gTWFrZSBzdXJlIHRoZXNlIHN0cmluZyB2YWx1ZXMgbWF0Y2ggdGhlIGBpZGAgZmllbGRzIGluIENBVEVHT1JJRVMuXG5jb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0ge1xuICBcInVwcGVyLXJlY2VpdmVyXCI6IFwidXBwZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBiYXJyZWw6IFwiYmFycmVsXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgaGFuZGd1YXJkOiBcImhhbmRndWFyZFwiIGFzIENhdGVnb3J5SWQsXG4gIFwiY2hhcmdpbmctaGFuZGxlXCI6IFwiY2hhcmdpbmdIYW5kbGVcIiBhcyBDYXRlZ29yeUlkLFxuICBcImJ1ZmZlci1raXRcIjogXCJidWZmZXJcIiBhcyBDYXRlZ29yeUlkLFxuICBcImxvd2VyLXBhcnRzLWtpdFwiOiBcImxvd2VyUGFydHNcIiBhcyBDYXRlZ29yeUlkLFxuICBzaWdodDogXCJzaWdodHNcIiBhcyBDYXRlZ29yeUlkLFxufTtcblxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47IC8vIGNhdGVnb3J5SWQgLT4gcGFydElkXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEd1bmJ1aWxkZXJQYWdlKCkge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KCgpID0+IHtcbiAgICAvLyBJbml0aWFsaXplIGZyb20gbG9jYWxTdG9yYWdlIGlmIGF2YWlsYWJsZVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RvcmVkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXI/cGxhdGZvcm09QVItMTVgLFxuICAgICAgICAgIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhXG4gICAgICAgICAgLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAvLyBVc2UgdGhlIGJhY2tlbmQgVVVJRCBhcyB0aGUgc3RhYmxlIGlkIGZvciB0aGUgVUlcbiAgICAgICAgICAgICAgaWQ6IHAudXVpZCxcbiAgICAgICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgICAgICBicmFuZDogcC5icmFuZE5hbWUsXG4gICAgICAgICAgICAgIHByaWNlOiBwLnByaWNlID8/IDAsXG4gICAgICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSBhcyBQYXJ0O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gSGFuZGxlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgZm9yIHBhcnQgc2VsZWN0aW9uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0UGFyYW0gPSBzZWFyY2hQYXJhbXMuZ2V0KFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3RQYXJhbSkge1xuICAgICAgY29uc3QgW2NhdGVnb3J5SWQsIHBhcnRJZF0gPSBzZWxlY3RQYXJhbS5zcGxpdChcIjpcIik7XG4gICAgICBpZiAoY2F0ZWdvcnlJZCAmJiBwYXJ0SWQgJiYgQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICBzZXRCdWlsZCgocHJldikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBQZXJzaXN0IHRvIGxvY2FsU3RvcmFnZVxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW0gZnJvbSBVUkxcbiAgICAgICAgcm91dGVyLnJlcGxhY2UoXCIvZ3VuYnVpbGRlclwiLCB7IHNjcm9sbDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2VhcmNoUGFyYW1zLCByb3V0ZXJdKTtcblxuICAvLyBQZXJzaXN0IGJ1aWxkIHN0YXRlIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgcGFydHNCeUNhdGVnb3J5OiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSB7fSBhcyBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPjtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIENBVEVHT1JJRVMpIHtcbiAgICAgIGdyb3VwZWRbY2F0ZWdvcnkuaWRdID0gcGFydHMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cGVkO1xuICB9LCBbcGFydHNdKTtcblxuICBjb25zdCBzZWxlY3RlZFBhcnRzOiBQYXJ0W10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkLCBwYXJ0c10pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgR3VuYnVpbGRlciA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlByb3RvdHlwZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICBDaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5IHRvIGFzc2VtYmxlIGFuIEFSLTE1IGJ1aWxkLiBQYXJ0cyBhcmVcbiAgICAgICAgICAgICAgbG9hZGVkIGZyb20gdGhlIGxpdmUgbWVyY2hhbnQgZmVlZCAoQWVybyBQcmVjaXNpb24gZm9yIG5vdyksIHVzaW5nXG4gICAgICAgICAgICAgIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQgQVBJLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIG1kOm10LTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+Q3VycmVudCBidWlsZCB0b3RhbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICR7dG90YWxQcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGh9IC8ge0NBVEVHT1JJRVMubGVuZ3RofSBjYXRlZ29yaWVzIGZpbGxlZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBMYXlvdXQgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtWzNmciwxLjI1ZnJdXCI+XG4gICAgICAgICAgey8qIENhdGVnb3JpZXMvcGFydHMgKi99XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICAgIHtsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+TG9hZGluZyBwYXJ0cyBmcm9tIGJhY2tlbmTigKY8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDBcIj5cbiAgICAgICAgICAgICAgICB7ZXJyb3J9IOKAlCBjaGVjayB0aGF0IHRoZSBCYWxsaXN0aWMgQVBJIGlzIHJ1bm5pbmcgYW5kIENPUlMgaXNcbiAgICAgICAgICAgICAgICBjb25maWd1cmVkLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMiBtZDpwLTMgYmctemluYy05NTAvNjBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT17Y2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgcGFydHM9e3BhcnRzQnlDYXRlZ29yeVtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0SWQ9e2J1aWxkW2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdFBhcnQ9eyhwYXJ0SWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RQYXJ0KGNhdGVnb3J5LmlkLCBwYXJ0SWQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICB7LyogQnVpbGQgU3VtbWFyeSAqL31cbiAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTQgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0zXCI+XG4gICAgICAgICAgICAgIEN1cnJlbnQgQnVpbGRcbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICBTZWxlY3QgYSBwYXJ0IGZyb20gZWFjaCBjYXRlZ29yeSB0byBzdGFydCB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFydElkID0gYnVpbGRbY2F0LmlkXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXQuaWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17Y2F0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7cGFydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQ1RBICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGJvcmRlci10IGJvcmRlci16aW5jLTgwMCBwdC0zIHNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlci9idWlsZFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENvbnRpbnVlIHRvIEJ1eVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgc3VtbWFyeSB3aXRoIGFmZmlsaWF0ZSBsaW5rcyBhbmQgc2hhcmluZyBvcHRpb25zLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0IiwiU1RPUkFHRV9LRVkiLCJHdW5idWlsZGVyUGFnZSIsInNlYXJjaFBhcmFtcyIsInJvdXRlciIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3RzIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsImNhdGVnb3J5SWQiLCJwYXJ0Um9sZSIsImlkIiwidXVpZCIsIm5hbWUiLCJicmFuZCIsImJyYW5kTmFtZSIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJmaWx0ZXIiLCJCb29sZWFuIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2VsZWN0UGFyYW0iLCJnZXQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwicHJldiIsInVwZGF0ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInNjcm9sbCIsInBhcnRzQnlDYXRlZ29yeSIsImdyb3VwZWQiLCJjYXRlZ29yeSIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsInRvdGFsUHJpY2UiLCJyZWR1Y2UiLCJzdW0iLCJoYW5kbGVTZWxlY3RQYXJ0IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImhlYWRlciIsImgxIiwic3BhbiIsInRvRml4ZWQiLCJsZW5ndGgiLCJzZWN0aW9uIiwic2VsZWN0ZWRQYXJ0SWQiLCJvblNlbGVjdFBhcnQiLCJhc2lkZSIsImgyIiwidWwiLCJjYXQiLCJwYXJ0IiwibGkiLCJocmVmIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJyZW1vdmVJdGVtIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.83e62d88b00e9127.hot-update.js b/.next/static/webpack/app/gunbuilder/page.83e62d88b00e9127.hot-update.js deleted file mode 100644 index 5fbd837..0000000 --- a/.next/static/webpack/app/gunbuilder/page.83e62d88b00e9127.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": -/*!*********************************!*\ - !*** ./app/gunbuilder/page.tsx ***! - \*********************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Gunbuilder \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 180,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Parts are loaded from the live merchant feed (Aero Precision for now), using your Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 191,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 189,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 220,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 216,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 214,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 203,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 242,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 255,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 261,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 260,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 266,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 259,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 254,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 247,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 240,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Continue to Buy\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 283,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 308,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 235,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 201,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 172,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 171,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0FBQ1Q7QUFJQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLGVBQWVkLGdFQUFlQTtJQUNwQyxNQUFNZSxTQUFTZCwwREFBU0E7SUFDeEIsTUFBTSxDQUFDZSxPQUFPQyxTQUFTLEdBQUdwQiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3FCLFNBQVNDLFdBQVcsR0FBR3RCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3VCLE9BQU9DLFNBQVMsR0FBR3hCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUN5QixPQUFPQyxTQUFTLEdBQUcxQiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTJCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTFCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTStCLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixXQUFXO2dCQUNYRSxTQUFTO2dCQUVULE1BQU1XLE1BQU0sTUFBTUMs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OERBQUNkOzREQUFJRCxXQUFVO3NFQUNaYSxJQUFJbkQsSUFBSTs7Ozs7O3dEQUVWb0QscUJBQ0MsOERBQUNiOzREQUFJRCxXQUFVOzs4RUFDYiw4REFBQ0M7b0VBQUlELFdBQVU7O3NGQUNiLDhEQUFDSTs0RUFBS0osV0FBVTs7Z0ZBQ2JjLEtBQUtuRCxLQUFLO2dGQUFFOzs7Ozs7O3dFQUVkbUQsS0FBS3BELElBQUk7Ozs7Ozs7OEVBRVosOERBQUN1QztvRUFBSUQsV0FBVTs7d0VBQXlEO3dFQUNwRWMsS0FBS2xELEtBQUssQ0FBQ3lDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O2lGQUl6Qiw4REFBQ0o7NERBQUlELFdBQVU7c0VBQTZCOzs7Ozs7O21EQWpCdkNhLElBQUlyRCxFQUFFOzs7Ozs0Q0F1Qm5COzs7Ozs7Ozs7Ozs7OENBS0osOERBQUN5QztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUN0RixpREFBSUE7NENBQ0hzRyxNQUFLOzRDQUNMaEIsV0FBVyx1S0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBO3NEQUVQOzs7Ozs7c0RBR0QsOERBQUNXOzRDQUNDQyxNQUFLOzRDQUNMQyxTQUFTO2dEQUNQakYsU0FBUyxDQUFDO2dEQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7NENBQzFCOzRDQUNBOEYsVUFBVS9CLGNBQWNnQixNQUFNLEtBQUs7NENBQ25DTixXQUFXLGlLQUlWLE9BSENWLGNBQWNnQixNQUFNLEtBQUssSUFDckIsa0NBQ0E7c0RBRVA7Ozs7OztzREFHRCw4REFBQ2pEOzRDQUFFMkMsV0FBVTtzREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlEO0dBdFJ3QnhFOztRQUNEYiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkZZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4PzA1NDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kIG51bWVyaWMgaWRcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuLy8gTWFwIGJhY2tlbmQgcGFydFJvbGUgdG8geW91ciBleGlzdGluZyBDYXRlZ29yeUlkIHZhbHVlcy5cbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiIGFzIENhdGVnb3J5SWQsXG4gIGJhcnJlbDogXCJiYXJyZWxcIiBhcyBDYXRlZ29yeUlkLFxuICBoYW5kZ3VhcmQ6IFwiaGFuZGd1YXJkXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiIGFzIENhdGVnb3J5SWQsXG4gIFwiYnVmZmVyLWtpdFwiOiBcImJ1ZmZlclwiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcGFydHMta2l0XCI6IFwibG93ZXJQYXJ0c1wiIGFzIENhdGVnb3J5SWQsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiIGFzIENhdGVnb3J5SWQsXG59O1xuXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjsgLy8gY2F0ZWdvcnlJZCAtPiBwYXJ0SWRcblxuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR3VuYnVpbGRlclBhZ2UoKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RvcmVkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXI/cGxhdGZvcm09QVItMTVgLFxuICAgICAgICAgIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhXG4gICAgICAgICAgLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAvLyBTa2lwIGFueSBwYXJ0cyB3ZSBkb24ndCBrbm93IGhvdyB0byBtYXAgeWV0XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyA8PDwgQUxXQVlTIHN0cmluZ1xuICAgICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgICAgIGJyYW5kOiBwLmJyYW5kLFxuICAgICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgICBpbWFnZVVybDogcC5tYWluSW1hZ2VVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1cmw6IHAuYnV5VXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0gYXMgUGFydDtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKHApOiBwIGlzIFBhcnQgPT4gcCAhPT0gbnVsbCk7XG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gSGFuZGxlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgZm9yIHBhcnQgc2VsZWN0aW9uICg/c2VsZWN0PXVwcGVyOjE2NSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdFBhcmFtKSB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IHNlbGVjdFBhcmFtLnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCAmJiBDQVRFR09SSUVTLnNvbWUoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm91dGVyLnJlcGxhY2UoXCIvZ3VuYnVpbGRlclwiLCB7IHNjcm9sbDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2VhcmNoUGFyYW1zLCByb3V0ZXJdKTtcblxuICAvLyBQZXJzaXN0IGJ1aWxkIHN0YXRlIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgcGFydHNCeUNhdGVnb3J5OiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSB7fSBhcyBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPjtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIENBVEVHT1JJRVMpIHtcbiAgICAgIGdyb3VwZWRbY2F0ZWdvcnkuaWRdID0gcGFydHMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cGVkO1xuICB9LCBbcGFydHNdKTtcblxuICBjb25zdCBzZWxlY3RlZFBhcnRzOiBQYXJ0W10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkLCBwYXJ0c10pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgR3VuYnVpbGRlciA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlByb3RvdHlwZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICBDaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5IHRvIGFzc2VtYmxlIGFuIEFSLTE1IGJ1aWxkLiBQYXJ0cyBhcmVcbiAgICAgICAgICAgICAgbG9hZGVkIGZyb20gdGhlIGxpdmUgbWVyY2hhbnQgZmVlZCAoQWVybyBQcmVjaXNpb24gZm9yIG5vdyksIHVzaW5nXG4gICAgICAgICAgICAgIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQgQVBJLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIG1kOm10LTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+Q3VycmVudCBidWlsZCB0b3RhbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICR7dG90YWxQcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGh9IC8ge0NBVEVHT1JJRVMubGVuZ3RofSBjYXRlZ29yaWVzIGZpbGxlZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBMYXlvdXQgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtWzNmciwxLjI1ZnJdXCI+XG4gICAgICAgICAgey8qIENhdGVnb3JpZXMvcGFydHMgKi99XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICAgIHtsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+TG9hZGluZyBwYXJ0cyBmcm9tIGJhY2tlbmTigKY8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDBcIj5cbiAgICAgICAgICAgICAgICB7ZXJyb3J9IOKAlCBjaGVjayB0aGF0IHRoZSBCYWxsaXN0aWMgQVBJIGlzIHJ1bm5pbmcgYW5kIENPUlMgaXNcbiAgICAgICAgICAgICAgICBjb25maWd1cmVkLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMiBtZDpwLTMgYmctemluYy05NTAvNjBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT17Y2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgcGFydHM9e3BhcnRzQnlDYXRlZ29yeVtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0SWQ9e2J1aWxkW2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdFBhcnQ9eyhwYXJ0SWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RQYXJ0KGNhdGVnb3J5LmlkLCBwYXJ0SWQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICB7LyogQnVpbGQgU3VtbWFyeSAqL31cbiAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTQgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0zXCI+XG4gICAgICAgICAgICAgIEN1cnJlbnQgQnVpbGRcbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICBTZWxlY3QgYSBwYXJ0IGZyb20gZWFjaCBjYXRlZ29yeSB0byBzdGFydCB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFydElkID0gYnVpbGRbY2F0LmlkXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXQuaWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17Y2F0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7cGFydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQ1RBICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGJvcmRlci10IGJvcmRlci16aW5jLTgwMCBwdC0zIHNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlci9idWlsZFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENvbnRpbnVlIHRvIEJ1eVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgc3VtbWFyeSB3aXRoIGFmZmlsaWF0ZSBsaW5rcyBhbmQgc2hhcmluZyBvcHRpb25zLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiTGluayIsInVzZVNlYXJjaFBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJDYXRlZ29yeUNvbHVtbiIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQQVJUX1JPTEVfVE9fQ0FURUdPUlkiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJzaWdodCIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJjYXRlZ29yeUlkIiwicGFydFJvbGUiLCJpZCIsIlN0cmluZyIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJub3RlcyIsImZpbHRlciIsImVyciIsIm1lc3NhZ2UiLCJhYm9ydCIsInNlbGVjdFBhcmFtIiwiZ2V0IiwicGFydElkIiwic3BsaXQiLCJzb21lIiwiYyIsInByZXYiLCJ1cGRhdGVkIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlcGxhY2UiLCJzY3JvbGwiLCJwYXJ0c0J5Q2F0ZWdvcnkiLCJncm91cGVkIiwiY2F0ZWdvcnkiLCJzZWxlY3RlZFBhcnRzIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJCb29sZWFuIiwidG90YWxQcmljZSIsInJlZHVjZSIsInN1bSIsImhhbmRsZVNlbGVjdFBhcnQiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaGVhZGVyIiwiaDEiLCJzcGFuIiwidG9GaXhlZCIsImxlbmd0aCIsInNlY3Rpb24iLCJzZWxlY3RlZFBhcnRJZCIsIm9uU2VsZWN0UGFydCIsImFzaWRlIiwiaDIiLCJ1bCIsImNhdCIsInBhcnQiLCJsaSIsImhyZWYiLCJidXR0b24iLCJ0eXBlIiwib25DbGljayIsInJlbW92ZUl0ZW0iLCJkaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.f9ea548d7b4340db.hot-update.js b/.next/static/webpack/app/gunbuilder/page.f9ea548d7b4340db.hot-update.js deleted file mode 100644 index b79453b..0000000 --- a/.next/static/webpack/app/gunbuilder/page.f9ea548d7b4340db.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": -/*!*********************************!*\ - !*** ./app/gunbuilder/page.tsx ***! - \*********************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined,\n notes: undefined\n };\n }).filter((p)=>p !== null);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 176,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Gunbuilder \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 180,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Parts are loaded from the live merchant feed (Aero Precision for now), using your Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 182,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 191,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 189,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 205,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 220,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 216,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 214,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 203,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 236,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 242,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 255,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 261,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 260,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 266,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 259,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 271,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 254,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 247,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 240,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Continue to Buy\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 283,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 293,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 308,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 235,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 201,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 172,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 171,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0FBQ1Q7QUFJQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLGVBQWVkLGdFQUFlQTtJQUNwQyxNQUFNZSxTQUFTZCwwREFBU0E7SUFDeEIsTUFBTSxDQUFDZSxPQUFPQyxTQUFTLEdBQUdwQiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3FCLFNBQVNDLFdBQVcsR0FBR3RCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3VCLE9BQU9DLFNBQVMsR0FBR3hCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUN5QixPQUFPQyxTQUFTLEdBQUcxQiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTJCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTFCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTStCLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixXQUFXO2dCQUNYRSxTQUFTO2dCQUVULE1BQU1XLE1BQU0sTUFBTUMs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OERBQUNkOzREQUFJRCxXQUFVO3NFQUNaYSxJQUFJbkQsSUFBSTs7Ozs7O3dEQUVWb0QscUJBQ0MsOERBQUNiOzREQUFJRCxXQUFVOzs4RUFDYiw4REFBQ0M7b0VBQUlELFdBQVU7O3NGQUNiLDhEQUFDSTs0RUFBS0osV0FBVTs7Z0ZBQ2JjLEtBQUtuRCxLQUFLO2dGQUFFOzs7Ozs7O3dFQUVkbUQsS0FBS3BELElBQUk7Ozs7Ozs7OEVBRVosOERBQUN1QztvRUFBSUQsV0FBVTs7d0VBQXlEO3dFQUNwRWMsS0FBS2xELEtBQUssQ0FBQ3lDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7O2lGQUl6Qiw4REFBQ0o7NERBQUlELFdBQVU7c0VBQTZCOzs7Ozs7O21EQWpCdkNhLElBQUlyRCxFQUFFOzs7Ozs0Q0F1Qm5COzs7Ozs7Ozs7Ozs7OENBS0osOERBQUN5QztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUN0RixpREFBSUE7NENBQ0hzRyxNQUFLOzRDQUNMaEIsV0FBVyx1S0FJVixPQUhDVixjQUFjZ0IsTUFBTSxLQUFLLElBQ3JCLHNEQUNBO3NEQUVQOzs7Ozs7c0RBR0QsOERBQUNXOzRDQUNDQyxNQUFLOzRDQUNMQyxTQUFTO2dEQUNQakYsU0FBUyxDQUFDO2dEQUNWRSxhQUFhZ0YsVUFBVSxDQUFDN0Y7NENBQzFCOzRDQUNBOEYsVUFBVS9CLGNBQWNnQixNQUFNLEtBQUs7NENBQ25DTixXQUFXLGlLQUlWLE9BSENWLGNBQWNnQixNQUFNLEtBQUssSUFDckIsa0NBQ0E7c0RBRVA7Ozs7OztzREFHRCw4REFBQ2pEOzRDQUFFMkMsV0FBVTtzREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlEO0dBdFJ3QnhFOztRQUNEYiw0REFBZUE7UUFDckJDLHNEQUFTQTs7O0tBRkZZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4PzA1NDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVNlYXJjaFBhcmFtcywgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQsIFBhcnQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbHVtbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvQ2F0ZWdvcnlDb2x1bW5cIjtcblxudHlwZSBHdW5idWlsZGVyUHJvZHVjdEZyb21BcGkgPSB7XG4gIGlkOiBudW1iZXI7ICAgICAgICAgICAgICAgICAvLyBiYWNrZW5kIG51bWVyaWMgaWRcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxuLy8gTWFwIGJhY2tlbmQgcGFydFJvbGUgdG8geW91ciBleGlzdGluZyBDYXRlZ29yeUlkIHZhbHVlcy5cbmNvbnN0IFBBUlRfUk9MRV9UT19DQVRFR09SWTogUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4gPSB7XG4gIFwidXBwZXItcmVjZWl2ZXJcIjogXCJ1cHBlclwiIGFzIENhdGVnb3J5SWQsXG4gIGJhcnJlbDogXCJiYXJyZWxcIiBhcyBDYXRlZ29yeUlkLFxuICBoYW5kZ3VhcmQ6IFwiaGFuZGd1YXJkXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJjaGFyZ2luZy1oYW5kbGVcIjogXCJjaGFyZ2luZ0hhbmRsZVwiIGFzIENhdGVnb3J5SWQsXG4gIFwiYnVmZmVyLWtpdFwiOiBcImJ1ZmZlclwiIGFzIENhdGVnb3J5SWQsXG4gIFwibG93ZXItcGFydHMta2l0XCI6IFwibG93ZXJQYXJ0c1wiIGFzIENhdGVnb3J5SWQsXG4gIHNpZ2h0OiBcInNpZ2h0c1wiIGFzIENhdGVnb3J5SWQsXG59O1xuXG50eXBlIEJ1aWxkU3RhdGUgPSBQYXJ0aWFsPFJlY29yZDxDYXRlZ29yeUlkLCBzdHJpbmc+PjsgLy8gY2F0ZWdvcnlJZCAtPiBwYXJ0SWRcblxuY29uc3QgU1RPUkFHRV9LRVkgPSBcImd1bmJ1aWxkZXItYnVpbGQtc3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR3VuYnVpbGRlclBhZ2UoKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpO1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgW3BhcnRzLCBzZXRQYXJ0c10gPSB1c2VTdGF0ZTxQYXJ0W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtidWlsZCwgc2V0QnVpbGRdID0gdXNlU3RhdGU8QnVpbGRTdGF0ZT4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RvcmVkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXI/cGxhdGZvcm09QVItMTVgLFxuICAgICAgICAgIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhXG4gICAgICAgICAgLm1hcCgocCk6IFBhcnQgfCBudWxsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWQgPSBQQVJUX1JPTEVfVE9fQ0FURUdPUllbcC5wYXJ0Um9sZV07XG4gICAgICAgICAgICBpZiAoIWNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgICAgLy8gU2tpcCBhbnkgcGFydHMgd2UgZG9uJ3Qga25vdyBob3cgdG8gbWFwIHlldFxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IFN0cmluZyhwLmlkKSwgLy8gPDw8IEFMV0FZUyBzdHJpbmdcbiAgICAgICAgICAgICAgY2F0ZWdvcnlJZCxcbiAgICAgICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgICAgICBicmFuZDogcC5icmFuZCxcbiAgICAgICAgICAgICAgcHJpY2U6IHAucHJpY2UgPz8gMCxcbiAgICAgICAgICAgICAgaW1hZ2VVcmw6IHAubWFpbkltYWdlVXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdXJsOiBwLmJ1eVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIG5vdGVzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigocCk6IHAgaXMgUGFydCA9PiBwICE9PSBudWxsKTtcblxuICAgICAgICBzZXRQYXJ0cyhub3JtYWxpemVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHJldHVybjtcbiAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgPz8gXCJGYWlsZWQgdG8gbG9hZCBwcm9kdWN0c1wiKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZldGNoUHJvZHVjdHMoKTtcblxuICAgIHJldHVybiAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG4gIH0sIFtdKTtcblxuICAvLyBIYW5kbGUgVVJMIHF1ZXJ5IHBhcmFtZXRlciBmb3IgcGFydCBzZWxlY3Rpb24gKD9zZWxlY3Q9dXBwZXI6MTY1KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdFBhcmFtID0gc2VhcmNoUGFyYW1zLmdldChcInNlbGVjdFwiKTtcbiAgICBpZiAoc2VsZWN0UGFyYW0pIHtcbiAgICAgIGNvbnN0IFtjYXRlZ29yeUlkLCBwYXJ0SWRdID0gc2VsZWN0UGFyYW0uc3BsaXQoXCI6XCIpO1xuICAgICAgaWYgKGNhdGVnb3J5SWQgJiYgcGFydElkICYmIENBVEVHT1JJRVMuc29tZSgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCkpIHtcbiAgICAgICAgc2V0QnVpbGQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkID0ge1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIFtjYXRlZ29yeUlkIGFzIENhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCkpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9KTtcblxuICAgICAgICByb3V0ZXIucmVwbGFjZShcIi9ndW5idWlsZGVyXCIsIHsgc2Nyb2xsOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzZWFyY2hQYXJhbXMsIHJvdXRlcl0pO1xuXG4gIC8vIFBlcnNpc3QgYnVpbGQgc3RhdGUgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICBjb25zdCBwYXJ0c0J5Q2F0ZWdvcnk6IFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBlZCA9IHt9IGFzIFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+O1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgQ0FURUdPUklFUykge1xuICAgICAgZ3JvdXBlZFtjYXRlZ29yeS5pZF0gPSBwYXJ0cy5maWx0ZXIoXG4gICAgICAgIChwKSA9PiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmlkLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwZWQ7XG4gIH0sIFtwYXJ0c10pO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFydHM6IFBhcnRbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhidWlsZClcbiAgICAgIC5tYXAoKFtjYXRlZ29yeUlkLCBwYXJ0SWRdKSA9PlxuICAgICAgICBwYXJ0cy5maW5kKChwKSA9PiBwLmlkID09PSBwYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeUlkKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgUGFydFtdO1xuICB9LCBbYnVpbGQsIHBhcnRzXSk7XG5cbiAgY29uc3QgdG90YWxQcmljZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRQYXJ0cy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgcC5wcmljZSwgMCksXG4gICAgW3NlbGVjdGVkUGFydHNdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8bWFpbiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctYmxhY2sgdGV4dC16aW5jLTUwXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTYgZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpmbGV4LXJvdyBtZDppdGVtcy1lbmQgbWQ6anVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4yZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIFNoYWRvdyBTdGFuZGFyZFxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBHdW5idWlsZGVyIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+UHJvdG90eXBlPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIENob29zZSBvbmUgcGFydCBwZXIgY2F0ZWdvcnkgdG8gYXNzZW1ibGUgYW4gQVItMTUgYnVpbGQuIFBhcnRzIGFyZVxuICAgICAgICAgICAgICBsb2FkZWQgZnJvbSB0aGUgbGl2ZSBtZXJjaGFudCBmZWVkIChBZXJvIFByZWNpc2lvbiBmb3Igbm93KSwgdXNpbmdcbiAgICAgICAgICAgICAgeW91ciBCYWxsaXN0aWMgYmFja2VuZCBBUEkuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgbWQ6bXQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy00MDBcIj5DdXJyZW50IGJ1aWxkIHRvdGFsPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aH0gLyB7Q0FURUdPUklFUy5sZW5ndGh9IGNhdGVnb3JpZXMgZmlsbGVkXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgey8qIExheW91dCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IGxnOmdyaWQtY29scy1bM2ZyLDEuMjVmcl1cIj5cbiAgICAgICAgICB7LyogQ2F0ZWdvcmllcy9wYXJ0cyAqL31cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvNjAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5Mb2FkaW5nIHBhcnRzIGZyb20gYmFja2VuZOKApjwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTQwMFwiPlxuICAgICAgICAgICAgICAgIHtlcnJvcn0g4oCUIGNoZWNrIHRoYXQgdGhlIEJhbGxpc3RpYyBBUEkgaXMgcnVubmluZyBhbmQgQ09SUyBpc1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC00IG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXRlZ29yeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLXppbmMtODAwIHJvdW5kZWQtbWQgcC0yIG1kOnAtMyBiZy16aW5jLTk1MC82MFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PXtjYXRlZ29yeX1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cz17cGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRJZD17YnVpbGRbY2F0ZWdvcnkuaWRdfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0UGFydD17KHBhcnRJZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdFBhcnQoY2F0ZWdvcnkuaWQsIHBhcnRJZClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHsvKiBCdWlsZCBTdW1tYXJ5ICovfVxuICAgICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjE2ZW1dIHVwcGVyY2FzZSB0ZXh0LXppbmMtNDAwIG1iLTNcIj5cbiAgICAgICAgICAgICAgQ3VycmVudCBCdWlsZFxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHByLTFcIj5cbiAgICAgICAgICAgICAge3NlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHBhcnQgZnJvbSBlYWNoIGNhdGVnb3J5IHRvIHN0YXJ0IHlvdXIgYnVpbGQuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICB7Q0FURUdPUklFUy5tYXAoKGNhdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJ0SWQgPSBidWlsZFtjYXQuaWRdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLmlkID09PSBzZWxlY3RlZFBhcnRJZCAmJiBwLmNhdGVnb3J5SWQgPT09IGNhdC5pZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtjYXQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhdC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC16aW5jLTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQuYnJhbmR9e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDAgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3BhcnQucHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQteHMgdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDVEEgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgYm9yZGVyLXQgYm9yZGVyLXppbmMtODAwIHB0LTMgc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWFtYmVyLTQwMC82MCBiZy1hbWJlci00MDAvMTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzE1IHRleHQtY2VudGVyIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ29udGludWUgdG8gQnV5XG4gICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEJ1aWxkKHt9KTtcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzUwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtemluYy0zMDAgaG92ZXI6YmctemluYy04MDAgaG92ZXI6Ym9yZGVyLXppbmMtNjAwIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENsZWFyIEJ1aWxkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIFZpZXcgeW91ciBidWlsZCBzdW1tYXJ5IHdpdGggYWZmaWxpYXRlIGxpbmtzIGFuZCBzaGFyaW5nIG9wdGlvbnMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYWluPlxuICApO1xufSJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUm91dGVyIiwiQ0FURUdPUklFUyIsIkNhdGVnb3J5Q29sdW1uIiwicHJvY2VzcyIsIkFQSV9CQVNFX1VSTCIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlBBUlRfUk9MRV9UT19DQVRFR09SWSIsImJhcnJlbCIsImhhbmRndWFyZCIsInNpZ2h0IiwiU1RPUkFHRV9LRVkiLCJHdW5idWlsZGVyUGFnZSIsInNlYXJjaFBhcmFtcyIsInJvdXRlciIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJmZXRjaFByb2R1Y3RzIiwicmVzIiwiZmV0Y2giLCJzaWduYWwiLCJvayIsIkVycm9yIiwic3RhdHVzIiwiZGF0YSIsImpzb24iLCJub3JtYWxpemVkIiwibWFwIiwicCIsImNhdGVnb3J5SWQiLCJwYXJ0Um9sZSIsImlkIiwiU3RyaW5nIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsInVuZGVmaW5lZCIsInVybCIsImJ1eVVybCIsIm5vdGVzIiwiZmlsdGVyIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2VsZWN0UGFyYW0iLCJnZXQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwicHJldiIsInVwZGF0ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInNjcm9sbCIsInBhcnRzQnlDYXRlZ29yeSIsImdyb3VwZWQiLCJjYXRlZ29yeSIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsIkJvb2xlYW4iLCJ0b3RhbFByaWNlIiwicmVkdWNlIiwic3VtIiwiaGFuZGxlU2VsZWN0UGFydCIsIm1haW4iLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJoMSIsInNwYW4iLCJ0b0ZpeGVkIiwibGVuZ3RoIiwic2VjdGlvbiIsInNlbGVjdGVkUGFydElkIiwib25TZWxlY3RQYXJ0IiwiYXNpZGUiLCJoMiIsInVsIiwiY2F0IiwicGFydCIsImxpIiwiaHJlZiIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwicmVtb3ZlSXRlbSIsImRpc2FibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/gunbuilder/page.ff3c747b2702e8ac.hot-update.js b/.next/static/webpack/app/gunbuilder/page.ff3c747b2702e8ac.hot-update.js deleted file mode 100644 index 04ba01d..0000000 --- a/.next/static/webpack/app/gunbuilder/page.ff3c747b2702e8ac.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/gunbuilder/page",{ - -/***/ "(app-pages-browser)/./app/gunbuilder/page.tsx": -/*!*********************************!*\ - !*** ./app/gunbuilder/page.tsx ***! - \*********************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ GunbuilderPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(app-pages-browser)/./data/gunbuilderParts.ts\");\n/* harmony import */ var _components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/CategoryColumn */ \"(app-pages-browser)/./components/CategoryColumn.tsx\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\nvar _process_env_NEXT_PUBLIC_API_BASE_URL;\nconst API_BASE_URL = (_process_env_NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL) !== null && _process_env_NEXT_PUBLIC_API_BASE_URL !== void 0 ? _process_env_NEXT_PUBLIC_API_BASE_URL : \"http://localhost:8080\";\n// Map backend partRole to your existing CategoryId values.\nconst PART_ROLE_TO_CATEGORY = {\n \"upper-receiver\": \"upper\",\n barrel: \"barrel\",\n handguard: \"handguard\",\n \"charging-handle\": \"chargingHandle\",\n \"buffer-kit\": \"buffer\",\n \"lower-parts-kit\": \"lowerParts\",\n sight: \"sights\"\n};\nconst STORAGE_KEY = \"gunbuilder-build-state\";\nfunction GunbuilderPage() {\n _s();\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [parts, setParts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [build, setBuild] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(()=>{\n if (true) {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n try {\n return JSON.parse(stored);\n } catch (e) {\n return {};\n }\n }\n }\n return {};\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const controller = new AbortController();\n async function fetchProducts() {\n try {\n setLoading(true);\n setError(null);\n const res = await fetch(\"\".concat(API_BASE_URL, \"/api/products/gunbuilder?platform=AR-15\"), {\n signal: controller.signal\n });\n if (!res.ok) {\n throw new Error(\"Failed to load products (\".concat(res.status, \")\"));\n }\n const data = await res.json();\n const normalized = data.map((p)=>{\n const categoryId = PART_ROLE_TO_CATEGORY[p.partRole];\n if (!categoryId) {\n // Skip any parts we don't know how to map yet\n return null;\n }\n var _p_price, _p_mainImageUrl, _p_buyUrl;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: (_p_price = p.price) !== null && _p_price !== void 0 ? _p_price : 0,\n imageUrl: (_p_mainImageUrl = p.mainImageUrl) !== null && _p_mainImageUrl !== void 0 ? _p_mainImageUrl : undefined,\n url: (_p_buyUrl = p.buyUrl) !== null && _p_buyUrl !== void 0 ? _p_buyUrl : undefined\n };\n }).filter(Boolean);\n setParts(normalized);\n } catch (err) {\n if (err.name === \"AbortError\") return;\n var _err_message;\n setError((_err_message = err.message) !== null && _err_message !== void 0 ? _err_message : \"Failed to load products\");\n } finally{\n setLoading(false);\n }\n }\n fetchProducts();\n return ()=>controller.abort();\n }, []);\n // Handle URL query parameter for part selection (?select=upper:165)\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n const selectParam = searchParams.get(\"select\");\n if (selectParam) {\n const [categoryId, partId] = selectParam.split(\":\");\n if (categoryId && partId && _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === categoryId)) {\n setBuild((prev)=>{\n const updated = {\n ...prev,\n [categoryId]: partId\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return updated;\n });\n router.replace(\"/gunbuilder\", {\n scroll: false\n });\n }\n }\n }, [\n searchParams,\n router\n ]);\n // Persist build state to localStorage whenever it changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(build));\n }\n }, [\n build\n ]);\n const partsByCategory = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n const grouped = {};\n for (const category of _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES){\n grouped[category.id] = parts.filter((p)=>p.categoryId === category.id);\n }\n return grouped;\n }, [\n parts\n ]);\n const selectedParts = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>{\n return Object.entries(build).map((param)=>{\n let [categoryId, partId] = param;\n return parts.find((p)=>p.id === partId && p.categoryId === categoryId);\n }).filter(Boolean);\n }, [\n build,\n parts\n ]);\n const totalPrice = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>selectedParts.reduce((sum, p)=>sum + p.price, 0), [\n selectedParts\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen bg-black text-zinc-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-6xl px-4 py-6 lg:py-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"mb-6 flex flex-col gap-2 md:flex-row md:items-end md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-500\",\n children: \"Shadow Standard\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 175,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"mt-1 text-2xl md:text-3xl font-semibold tracking-tight\",\n children: [\n \"Gunbuilder \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Prototype\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 179,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 178,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-zinc-400 max-w-xl\",\n children: \"Choose one part per category to assemble an AR-15 build. Parts are loaded from the live merchant feed (Aero Precision for now), using your Ballistic backend API.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 181,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 174,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-400\",\n children: \"Current build total\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 189,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-semibold text-amber-300\",\n children: [\n \"$\",\n totalPrice.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-zinc-500\",\n children: [\n selectedParts.length,\n \" / \",\n _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.length,\n \" categories filled\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 193,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 188,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 173,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 lg:grid-cols-[3fr,1.25fr]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/60 p-3 md:p-4\",\n children: [\n loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Loading parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 204,\n columnNumber: 15\n }, this),\n error && !loading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-400\",\n children: [\n error,\n \" — check that the Ballistic API is running and CORS is configured.\"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 207,\n columnNumber: 15\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid gap-4 md:grid-cols-2 lg:grid-cols-3\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((category)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-zinc-800 rounded-md p-2 md:p-3 bg-zinc-950/60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_CategoryColumn__WEBPACK_IMPORTED_MODULE_5__.CategoryColumn, {\n category: category,\n parts: partsByCategory[category.id],\n selectedPartId: build[category.id],\n onSelectPart: (partId)=>handleSelectPart(category.id, partId)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 219,\n columnNumber: 21\n }, this)\n }, category.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 215,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 213,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 202,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: \"rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold tracking-[0.16em] uppercase text-zinc-400 mb-3\",\n children: \"Current Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 235,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-y-auto pr-1\",\n children: [\n selectedParts.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-zinc-500\",\n children: \"Select a part from each category to start your build.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 241,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"space-y-2\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.map((cat)=>{\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] uppercase tracking-[0.16em] text-zinc-500\",\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 254,\n columnNumber: 23\n }, this),\n part ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 flex justify-between items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-zinc-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-zinc-400\",\n children: [\n part.brand,\n \" \"\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 260,\n columnNumber: 29\n }, this),\n part.name\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 259,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-semibold text-amber-300 whitespace-nowrap\",\n children: [\n \"$\",\n part.price.toFixed(2)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 265,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 258,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-xs text-zinc-600\",\n children: \"Not selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 270,\n columnNumber: 25\n }, this)\n ]\n }, cat.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 253,\n columnNumber: 21\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 246,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 border-t border-zinc-800 pt-3 space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: \"/gunbuilder/build\",\n className: \"block w-full rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"),\n children: \"Continue to Buy\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 282,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>{\n setBuild({});\n localStorage.removeItem(STORAGE_KEY);\n },\n disabled: selectedParts.length === 0,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors \".concat(selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed\" : \"\"),\n children: \"Clear Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 292,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-[0.7rem] text-zinc-500\",\n children: \"View your build summary with affiliate links and sharing options.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 307,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 281,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 234,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 200,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 171,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 170,\n columnNumber: 5\n }, this);\n}\n_s(GunbuilderPage, \"Y6wZ0gvMO3IoR5mwZ32LMh6vOAs=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useSearchParams,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = GunbuilderPage;\nvar _c;\n$RefreshReg$(_c, \"GunbuilderPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRXFEO0FBQ3hCO0FBQ2dDO0FBQ1Q7QUFFUztJQWMzRFE7QUFERixNQUFNQyxlQUNKRCxDQUFBQSx3Q0FBQUEsT0FBT0EsQ0FBQ0UsR0FBRyxDQUFDQyx3QkFBd0IsY0FBcENILG1EQUFBQSx3Q0FBd0M7QUFFMUMsMkRBQTJEO0FBQzNELE1BQU1JLHdCQUFvRDtJQUN4RCxrQkFBa0I7SUFDbEJDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CQyxPQUFPO0FBQ1Q7QUFJQSxNQUFNQyxjQUFjO0FBRUwsU0FBU0M7O0lBQ3RCLE1BQU1DLGVBQWVkLGdFQUFlQTtJQUNwQyxNQUFNZSxTQUFTZCwwREFBU0E7SUFDeEIsTUFBTSxDQUFDZSxPQUFPQyxTQUFTLEdBQUdwQiwrQ0FBUUEsQ0FBUyxFQUFFO0lBQzdDLE1BQU0sQ0FBQ3FCLFNBQVNDLFdBQVcsR0FBR3RCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ3VCLE9BQU9DLFNBQVMsR0FBR3hCLCtDQUFRQSxDQUFnQjtJQUNsRCxNQUFNLENBQUN5QixPQUFPQyxTQUFTLEdBQUcxQiwrQ0FBUUEsQ0FBYTtRQUM3QyxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTTJCLFNBQVNDLGFBQWFDLE9BQU8sQ0FBQ2Q7WUFDcEMsSUFBSVksUUFBUTtnQkFDVixJQUFJO29CQUNGLE9BQU9HLEtBQUtDLEtBQUssQ0FBQ0o7Z0JBQ3BCLEVBQUUsVUFBTTtvQkFDTixPQUFPLENBQUM7Z0JBQ1Y7WUFDRjtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQTFCLGdEQUFTQSxDQUFDO1FBQ1IsTUFBTStCLGFBQWEsSUFBSUM7UUFFdkIsZUFBZUM7WUFDYixJQUFJO2dCQUNGWixXQUFXO2dCQUNYRSxTQUFTO2dCQUVULE1BQU1XLE1BQU0sTUFBTUMs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QUFJOzs7Ozs7d0RBRVZtRCxxQkFDQyw4REFBQ2I7NERBQUlELFdBQVU7OzhFQUNiLDhEQUFDQztvRUFBSUQsV0FBVTs7c0ZBQ2IsOERBQUNJOzRFQUFLSixXQUFVOztnRkFDYmMsS0FBS2xELEtBQUs7Z0ZBQUU7Ozs7Ozs7d0VBRWRrRCxLQUFLbkQsSUFBSTs7Ozs7Ozs4RUFFWiw4REFBQ3NDO29FQUFJRCxXQUFVOzt3RUFBeUQ7d0VBQ3BFYyxLQUFLakQsS0FBSyxDQUFDd0MsT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7aUZBSXpCLDhEQUFDSjs0REFBSUQsV0FBVTtzRUFBNkI7Ozs7Ozs7bURBakJ2Q2EsSUFBSXBELEVBQUU7Ozs7OzRDQXVCbkI7Ozs7Ozs7Ozs7Ozs4Q0FLSiw4REFBQ3dDO29DQUFJRCxXQUFVOztzREFDYiw4REFBQ3JGLGlEQUFJQTs0Q0FDSHFHLE1BQUs7NENBQ0xoQixXQUFXLHVLQUlWLE9BSENULGNBQWNlLE1BQU0sS0FBSyxJQUNyQixzREFDQTtzREFFUDs7Ozs7O3NEQUdELDhEQUFDVzs0Q0FDQ0MsTUFBSzs0Q0FDTEMsU0FBUztnREFDUGhGLFNBQVMsQ0FBQztnREFDVkUsYUFBYStFLFVBQVUsQ0FBQzVGOzRDQUMxQjs0Q0FDQTZGLFVBQVU5QixjQUFjZSxNQUFNLEtBQUs7NENBQ25DTixXQUFXLGlLQUlWLE9BSENULGNBQWNlLE1BQU0sS0FBSyxJQUNyQixrQ0FDQTtzREFFUDs7Ozs7O3NEQUdELDhEQUFDaEQ7NENBQUUwQyxXQUFVO3NEQUFtQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTOUQ7R0FyUndCdkU7O1FBQ0RiLDREQUFlQTtRQUNyQkMsc0RBQVNBOzs7S0FGRlkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2d1bmJ1aWxkZXIvcGFnZS50c3g/MDU0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgeyBDQVRFR09SSUVTIH0gZnJvbSBcIkAvZGF0YS9ndW5idWlsZGVyUGFydHNcIjtcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcnlJZCwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcbmltcG9ydCB7IENhdGVnb3J5Q29sdW1uIH0gZnJvbSBcIkAvY29tcG9uZW50cy9DYXRlZ29yeUNvbHVtblwiO1xuXG50eXBlIEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaSA9IHtcbiAgaWQ6IG51bWJlcjsgICAgICAgICAgICAgICAgIC8vIGJhY2tlbmQgbnVtZXJpYyBpZFxuICBuYW1lOiBzdHJpbmc7XG4gIGJyYW5kOiBzdHJpbmc7XG4gIHBsYXRmb3JtOiBzdHJpbmc7XG4gIHBhcnRSb2xlOiBzdHJpbmc7XG4gIHByaWNlOiBudW1iZXIgfCBudWxsO1xuICBtYWluSW1hZ2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIGJ1eVVybDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmNvbnN0IEFQSV9CQVNFX1VSTCA9XG4gIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiO1xuXG4vLyBNYXAgYmFja2VuZCBwYXJ0Um9sZSB0byB5b3VyIGV4aXN0aW5nIENhdGVnb3J5SWQgdmFsdWVzLlxuY29uc3QgUEFSVF9ST0xFX1RPX0NBVEVHT1JZOiBSZWNvcmQ8c3RyaW5nLCBDYXRlZ29yeUlkPiA9IHtcbiAgXCJ1cHBlci1yZWNlaXZlclwiOiBcInVwcGVyXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgYmFycmVsOiBcImJhcnJlbFwiIGFzIENhdGVnb3J5SWQsXG4gIGhhbmRndWFyZDogXCJoYW5kZ3VhcmRcIiBhcyBDYXRlZ29yeUlkLFxuICBcImNoYXJnaW5nLWhhbmRsZVwiOiBcImNoYXJnaW5nSGFuZGxlXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJidWZmZXIta2l0XCI6IFwiYnVmZmVyXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgXCJsb3dlci1wYXJ0cy1raXRcIjogXCJsb3dlclBhcnRzXCIgYXMgQ2F0ZWdvcnlJZCxcbiAgc2lnaHQ6IFwic2lnaHRzXCIgYXMgQ2F0ZWdvcnlJZCxcbn07XG5cbnR5cGUgQnVpbGRTdGF0ZSA9IFBhcnRpYWw8UmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZz4+OyAvLyBjYXRlZ29yeUlkIC0+IHBhcnRJZFxuXG5jb25zdCBTVE9SQUdFX0tFWSA9IFwiZ3VuYnVpbGRlci1idWlsZC1zdGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHdW5idWlsZGVyUGFnZSgpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBbcGFydHMsIHNldFBhcnRzXSA9IHVzZVN0YXRlPFBhcnRbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2J1aWxkLCBzZXRCdWlsZF0gPSB1c2VTdGF0ZTxCdWlsZFN0YXRlPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdG9yZWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaFByb2R1Y3RzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7QVBJX0JBU0VfVVJMfS9hcGkvcHJvZHVjdHMvZ3VuYnVpbGRlcj9wbGF0Zm9ybT1BUi0xNWAsXG4gICAgICAgICAgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHByb2R1Y3RzICgke3Jlcy5zdGF0dXN9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YTogR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpW10gPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFBhcnRbXSA9IGRhdGFcbiAgICAgICAgICAubWFwKChwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gUEFSVF9ST0xFX1RPX0NBVEVHT1JZW3AucGFydFJvbGVdO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yeUlkKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgYW55IHBhcnRzIHdlIGRvbid0IGtub3cgaG93IHRvIG1hcCB5ZXRcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkOiBTdHJpbmcocC5pZCksIC8vIDw8PCBBTFdBWVMgc3RyaW5nXG4gICAgICAgICAgICAgIGNhdGVnb3J5SWQsXG4gICAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgICAgIHByaWNlOiBwLnByaWNlID8/IDAsXG4gICAgICAgICAgICAgIGltYWdlVXJsOiBwLm1haW5JbWFnZVVybCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVybDogcC5idXlVcmwgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSBhcyBQYXJ0O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBQYXJ0W107XG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gSGFuZGxlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgZm9yIHBhcnQgc2VsZWN0aW9uICg/c2VsZWN0PXVwcGVyOjE2NSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdFBhcmFtKSB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IHNlbGVjdFBhcmFtLnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCAmJiBDQVRFR09SSUVTLnNvbWUoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm91dGVyLnJlcGxhY2UoXCIvZ3VuYnVpbGRlclwiLCB7IHNjcm9sbDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2VhcmNoUGFyYW1zLCByb3V0ZXJdKTtcblxuICAvLyBQZXJzaXN0IGJ1aWxkIHN0YXRlIHRvIGxvY2FsU3RvcmFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShidWlsZCkpO1xuICAgIH1cbiAgfSwgW2J1aWxkXSk7XG5cbiAgY29uc3QgcGFydHNCeUNhdGVnb3J5OiBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSB7fSBhcyBSZWNvcmQ8Q2F0ZWdvcnlJZCwgUGFydFtdPjtcbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIENBVEVHT1JJRVMpIHtcbiAgICAgIGdyb3VwZWRbY2F0ZWdvcnkuaWRdID0gcGFydHMuZmlsdGVyKFxuICAgICAgICAocCkgPT4gcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBncm91cGVkO1xuICB9LCBbcGFydHNdKTtcblxuICBjb25zdCBzZWxlY3RlZFBhcnRzOiBQYXJ0W10gPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnVpbGQpXG4gICAgICAubWFwKChbY2F0ZWdvcnlJZCwgcGFydElkXSkgPT5cbiAgICAgICAgcGFydHMuZmluZCgocCkgPT4gcC5pZCA9PT0gcGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0ZWdvcnlJZCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFBhcnRbXTtcbiAgfSwgW2J1aWxkLCBwYXJ0c10pO1xuXG4gIGNvbnN0IHRvdGFsUHJpY2UgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkUGFydHMucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAucHJpY2UsIDApLFxuICAgIFtzZWxlY3RlZFBhcnRzXSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RQYXJ0ID0gKGNhdGVnb3J5SWQ6IENhdGVnb3J5SWQsIHBhcnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0QnVpbGQoKHByZXYpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2NhdGVnb3J5SWRdOiBwYXJ0SWQsXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTZ4bCBweC00IHB5LTYgbGc6cHktMTBcIj5cbiAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtZW5kIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctWzAuMmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICBTaGFkb3cgU3RhbmRhcmRcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJtdC0xIHRleHQtMnhsIG1kOnRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRcIj5cbiAgICAgICAgICAgICAgR3VuYnVpbGRlciA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWFtYmVyLTMwMFwiPlByb3RvdHlwZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gdGV4dC16aW5jLTQwMCBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICBDaG9vc2Ugb25lIHBhcnQgcGVyIGNhdGVnb3J5IHRvIGFzc2VtYmxlIGFuIEFSLTE1IGJ1aWxkLiBQYXJ0cyBhcmVcbiAgICAgICAgICAgICAgbG9hZGVkIGZyb20gdGhlIGxpdmUgbWVyY2hhbnQgZmVlZCAoQWVybyBQcmVjaXNpb24gZm9yIG5vdyksIHVzaW5nXG4gICAgICAgICAgICAgIHlvdXIgQmFsbGlzdGljIGJhY2tlbmQgQVBJLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIG1kOm10LTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+Q3VycmVudCBidWlsZCB0b3RhbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICR7dG90YWxQcmljZS50b0ZpeGVkKDIpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGh9IC8ge0NBVEVHT1JJRVMubGVuZ3RofSBjYXRlZ29yaWVzIGZpbGxlZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIHsvKiBMYXlvdXQgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBsZzpncmlkLWNvbHMtWzNmciwxLjI1ZnJdXCI+XG4gICAgICAgICAgey8qIENhdGVnb3JpZXMvcGFydHMgKi99XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzYwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICAgIHtsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+TG9hZGluZyBwYXJ0cyBmcm9tIGJhY2tlbmTigKY8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDBcIj5cbiAgICAgICAgICAgICAgICB7ZXJyb3J9IOKAlCBjaGVjayB0aGF0IHRoZSBCYWxsaXN0aWMgQVBJIGlzIHJ1bm5pbmcgYW5kIENPUlMgaXNcbiAgICAgICAgICAgICAgICBjb25maWd1cmVkLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtNCBtZDpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiPlxuICAgICAgICAgICAgICAgIHtDQVRFR09SSUVTLm1hcCgoY2F0ZWdvcnkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyIGJvcmRlci16aW5jLTgwMCByb3VuZGVkLW1kIHAtMiBtZDpwLTMgYmctemluYy05NTAvNjBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT17Y2F0ZWdvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgcGFydHM9e3BhcnRzQnlDYXRlZ29yeVtjYXRlZ29yeS5pZF19XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0SWQ9e2J1aWxkW2NhdGVnb3J5LmlkXX1cbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdFBhcnQ9eyhwYXJ0SWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RQYXJ0KGNhdGVnb3J5LmlkLCBwYXJ0SWQpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICB7LyogQnVpbGQgU3VtbWFyeSAqL31cbiAgICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTQgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy1bMC4xNmVtXSB1cHBlcmNhc2UgdGV4dC16aW5jLTQwMCBtYi0zXCI+XG4gICAgICAgICAgICAgIEN1cnJlbnQgQnVpbGRcbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBwci0xXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgICAgICBTZWxlY3QgYSBwYXJ0IGZyb20gZWFjaCBjYXRlZ29yeSB0byBzdGFydCB5b3VyIGJ1aWxkLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAge0NBVEVHT1JJRVMubWFwKChjYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFydElkID0gYnVpbGRbY2F0LmlkXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0cy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXQuaWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17Y2F0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYXQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7cGFydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtemluYy01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJ0LmJyYW5kfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtYW1iZXItMzAwIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwYXJ0LnByaWNlLnRvRml4ZWQoMil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtemluYy02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQ1RBICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGJvcmRlci10IGJvcmRlci16aW5jLTgwMCBwdC0zIHNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgIGhyZWY9XCIvZ3VuYnVpbGRlci9idWlsZFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENvbnRpbnVlIHRvIEJ1eVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci16aW5jLTcwMCBiZy16aW5jLTkwMC81MCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXppbmMtMzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTYwMCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGVhciBCdWlsZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICBWaWV3IHlvdXIgYnVpbGQgc3VtbWFyeSB3aXRoIGFmZmlsaWF0ZSBsaW5rcyBhbmQgc2hhcmluZyBvcHRpb25zLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWFpbj5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiTGluayIsInVzZVNlYXJjaFBhcmFtcyIsInVzZVJvdXRlciIsIkNBVEVHT1JJRVMiLCJDYXRlZ29yeUNvbHVtbiIsInByb2Nlc3MiLCJBUElfQkFTRV9VUkwiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJQQVJUX1JPTEVfVE9fQ0FURUdPUlkiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJzaWdodCIsIlNUT1JBR0VfS0VZIiwiR3VuYnVpbGRlclBhZ2UiLCJzZWFyY2hQYXJhbXMiLCJyb3V0ZXIiLCJwYXJ0cyIsInNldFBhcnRzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiYnVpbGQiLCJzZXRCdWlsZCIsInN0b3JlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiZmV0Y2hQcm9kdWN0cyIsInJlcyIsImZldGNoIiwic2lnbmFsIiwib2siLCJFcnJvciIsInN0YXR1cyIsImRhdGEiLCJqc29uIiwibm9ybWFsaXplZCIsIm1hcCIsInAiLCJjYXRlZ29yeUlkIiwicGFydFJvbGUiLCJpZCIsIlN0cmluZyIsIm5hbWUiLCJicmFuZCIsInByaWNlIiwiaW1hZ2VVcmwiLCJtYWluSW1hZ2VVcmwiLCJ1bmRlZmluZWQiLCJ1cmwiLCJidXlVcmwiLCJmaWx0ZXIiLCJCb29sZWFuIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2VsZWN0UGFyYW0iLCJnZXQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwicHJldiIsInVwZGF0ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInNjcm9sbCIsInBhcnRzQnlDYXRlZ29yeSIsImdyb3VwZWQiLCJjYXRlZ29yeSIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsInRvdGFsUHJpY2UiLCJyZWR1Y2UiLCJzdW0iLCJoYW5kbGVTZWxlY3RQYXJ0IiwibWFpbiIsImNsYXNzTmFtZSIsImRpdiIsImhlYWRlciIsImgxIiwic3BhbiIsInRvRml4ZWQiLCJsZW5ndGgiLCJzZWN0aW9uIiwic2VsZWN0ZWRQYXJ0SWQiLCJvblNlbGVjdFBhcnQiLCJhc2lkZSIsImgyIiwidWwiLCJjYXQiLCJwYXJ0IiwibGkiLCJocmVmIiwiYnV0dG9uIiwidHlwZSIsIm9uQ2xpY2siLCJyZW1vdmVJdGVtIiwiZGlzYWJsZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/gunbuilder/page.tsx\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.385ea9265ba687b2.hot-update.js b/.next/static/webpack/app/layout.385ea9265ba687b2.hot-update.js deleted file mode 100644 index 412f36e..0000000 --- a/.next/static/webpack/app/layout.385ea9265ba687b2.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"5589102c78c1\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI1NTg5MTAyYzc4YzFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.4528b572b2c1fb3a.hot-update.js b/.next/static/webpack/app/layout.4528b572b2c1fb3a.hot-update.js deleted file mode 100644 index 7bf7317..0000000 --- a/.next/static/webpack/app/layout.4528b572b2c1fb3a.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"8eda1647e112\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI4ZWRhMTY0N2UxMTJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.48663096e2813c6e.hot-update.js b/.next/static/webpack/app/layout.48663096e2813c6e.hot-update.js deleted file mode 100644 index 2ee8409..0000000 --- a/.next/static/webpack/app/layout.48663096e2813c6e.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"02df986b7233\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIwMmRmOTg2YjcyMzNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.505dd85efd94f5a1.hot-update.js b/.next/static/webpack/app/layout.505dd85efd94f5a1.hot-update.js deleted file mode 100644 index 552c4a2..0000000 --- a/.next/static/webpack/app/layout.505dd85efd94f5a1.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"5f4354ca2638\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI1ZjQzNTRjYTI2MzhcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.5733fa94b307a5ba.hot-update.js b/.next/static/webpack/app/layout.5733fa94b307a5ba.hot-update.js deleted file mode 100644 index 6ced5cb..0000000 --- a/.next/static/webpack/app/layout.5733fa94b307a5ba.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"c8f6c943c86b\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJjOGY2Yzk0M2M4NmJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.83e62d88b00e9127.hot-update.js b/.next/static/webpack/app/layout.83e62d88b00e9127.hot-update.js deleted file mode 100644 index 3819482..0000000 --- a/.next/static/webpack/app/layout.83e62d88b00e9127.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"9fe66326ffbc\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI5ZmU2NjMyNmZmYmNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.96a4c04f3af3cc7f.hot-update.js b/.next/static/webpack/app/layout.96a4c04f3af3cc7f.hot-update.js deleted file mode 100644 index f26ad11..0000000 --- a/.next/static/webpack/app/layout.96a4c04f3af3cc7f.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"b291b7e5c3b7\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJiMjkxYjdlNWMzYjdcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.a73da2d4cd917396.hot-update.js b/.next/static/webpack/app/layout.a73da2d4cd917396.hot-update.js deleted file mode 100644 index cb3c246..0000000 --- a/.next/static/webpack/app/layout.a73da2d4cd917396.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"8a86f3a0370b\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI4YTg2ZjNhMDM3MGJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.06cf6e708077e037.hot-update.js b/.next/static/webpack/app/layout.b7fbe4ccfef3faff.hot-update.js similarity index 91% rename from .next/static/webpack/app/layout.06cf6e708077e037.hot-update.js rename to .next/static/webpack/app/layout.b7fbe4ccfef3faff.hot-update.js index a1b1a22..e6e14be 100644 --- a/.next/static/webpack/app/layout.06cf6e708077e037.hot-update.js +++ b/.next/static/webpack/app/layout.b7fbe4ccfef3faff.hot-update.js @@ -15,7 +15,7 @@ self["webpackHotUpdate_N_E"]("app/layout",{ \*************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"b676bdc45d0b\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJiNjc2YmRjNDVkMGJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"38bffb97d808\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIzOGJmZmI5N2Q4MDhcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }) diff --git a/.next/static/webpack/app/layout.cd76be92af930a77.hot-update.js b/.next/static/webpack/app/layout.cd76be92af930a77.hot-update.js deleted file mode 100644 index d287ea0..0000000 --- a/.next/static/webpack/app/layout.cd76be92af930a77.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"9d6d63dc9b6d\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI5ZDZkNjNkYzliNmRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.2f74deb0913397a7.hot-update.js b/.next/static/webpack/app/layout.d652b55a3b2a7c68.hot-update.js similarity index 91% rename from .next/static/webpack/app/layout.2f74deb0913397a7.hot-update.js rename to .next/static/webpack/app/layout.d652b55a3b2a7c68.hot-update.js index f0b8ac0..97ffe18 100644 --- a/.next/static/webpack/app/layout.2f74deb0913397a7.hot-update.js +++ b/.next/static/webpack/app/layout.d652b55a3b2a7c68.hot-update.js @@ -15,7 +15,7 @@ self["webpackHotUpdate_N_E"]("app/layout",{ \*************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"bbd9614ae9e2\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJiYmQ5NjE0YWU5ZTJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"96f8d0aef6a8\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI5NmY4ZDBhZWY2YThcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }) diff --git a/.next/static/webpack/app/layout.32693299354f3264.hot-update.js b/.next/static/webpack/app/layout.e3d46f4ba3a2dd37.hot-update.js similarity index 91% rename from .next/static/webpack/app/layout.32693299354f3264.hot-update.js rename to .next/static/webpack/app/layout.e3d46f4ba3a2dd37.hot-update.js index 44cfe34..b155b01 100644 --- a/.next/static/webpack/app/layout.32693299354f3264.hot-update.js +++ b/.next/static/webpack/app/layout.e3d46f4ba3a2dd37.hot-update.js @@ -15,7 +15,7 @@ self["webpackHotUpdate_N_E"]("app/layout",{ \*************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"654967be10be\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI2NTQ5NjdiZTEwYmVcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"6b444ffc26d4\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI2YjQ0NGZmYzI2ZDRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }) diff --git a/.next/static/webpack/app/layout.e621a4bd458e1eac.hot-update.js b/.next/static/webpack/app/layout.e621a4bd458e1eac.hot-update.js deleted file mode 100644 index cb6c21a..0000000 --- a/.next/static/webpack/app/layout.e621a4bd458e1eac.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"a0c296e374f1\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJhMGMyOTZlMzc0ZjFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.f1420e1828c7aaab.hot-update.js b/.next/static/webpack/app/layout.f1420e1828c7aaab.hot-update.js deleted file mode 100644 index d42f724..0000000 --- a/.next/static/webpack/app/layout.f1420e1828c7aaab.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"dcc05fdae0c9\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJkY2MwNWZkYWUwYzlcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.f9ea548d7b4340db.hot-update.js b/.next/static/webpack/app/layout.f9ea548d7b4340db.hot-update.js deleted file mode 100644 index cb7fbaf..0000000 --- a/.next/static/webpack/app/layout.f9ea548d7b4340db.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"e3f470993806\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJlM2Y0NzA5OTM4MDZcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.fde218b3e94bb955.hot-update.js b/.next/static/webpack/app/layout.fde218b3e94bb955.hot-update.js deleted file mode 100644 index d8b5f92..0000000 --- a/.next/static/webpack/app/layout.fde218b3e94bb955.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"780b9485becb\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI3ODBiOTQ4NWJlY2JcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/app/layout.ff3c747b2702e8ac.hot-update.js b/.next/static/webpack/app/layout.ff3c747b2702e8ac.hot-update.js deleted file mode 100644 index 14af661..0000000 --- a/.next/static/webpack/app/layout.ff3c747b2702e8ac.hot-update.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("app/layout",{ - -/***/ "(app-pages-browser)/./app/globals.css": -/*!*************************!*\ - !*** ./app/globals.css ***! - \*************************/ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"f5a7cc32ff4b\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2dsb2JhbHMuY3NzPzk1YWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJmNWE3Y2MzMmZmNGJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); - -/***/ }) - -}); \ No newline at end of file diff --git a/.next/static/webpack/32693299354f3264.webpack.hot-update.json b/.next/static/webpack/b7fbe4ccfef3faff.webpack.hot-update.json similarity index 100% rename from .next/static/webpack/32693299354f3264.webpack.hot-update.json rename to .next/static/webpack/b7fbe4ccfef3faff.webpack.hot-update.json diff --git a/.next/static/webpack/cd76be92af930a77.webpack.hot-update.json b/.next/static/webpack/cd76be92af930a77.webpack.hot-update.json deleted file mode 100644 index 6a4f8ba..0000000 --- a/.next/static/webpack/cd76be92af930a77.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/[categoryId]/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/385ea9265ba687b2.webpack.hot-update.json b/.next/static/webpack/d652b55a3b2a7c68.webpack.hot-update.json similarity index 100% rename from .next/static/webpack/385ea9265ba687b2.webpack.hot-update.json rename to .next/static/webpack/d652b55a3b2a7c68.webpack.hot-update.json diff --git a/.next/static/webpack/ddd29a4d8ee37726.webpack.hot-update.json b/.next/static/webpack/ddd29a4d8ee37726.webpack.hot-update.json deleted file mode 100644 index 3823c4c..0000000 --- a/.next/static/webpack/ddd29a4d8ee37726.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/4528b572b2c1fb3a.webpack.hot-update.json b/.next/static/webpack/e3d46f4ba3a2dd37.webpack.hot-update.json similarity index 100% rename from .next/static/webpack/4528b572b2c1fb3a.webpack.hot-update.json rename to .next/static/webpack/e3d46f4ba3a2dd37.webpack.hot-update.json diff --git a/.next/static/webpack/e621a4bd458e1eac.webpack.hot-update.json b/.next/static/webpack/e621a4bd458e1eac.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/e621a4bd458e1eac.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/efcc3aac418e8f7b.webpack.hot-update.json b/.next/static/webpack/efcc3aac418e8f7b.webpack.hot-update.json deleted file mode 100644 index 3823c4c..0000000 --- a/.next/static/webpack/efcc3aac418e8f7b.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/f1420e1828c7aaab.webpack.hot-update.json b/.next/static/webpack/f1420e1828c7aaab.webpack.hot-update.json deleted file mode 100644 index 5c82546..0000000 --- a/.next/static/webpack/f1420e1828c7aaab.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/f9ea548d7b4340db.webpack.hot-update.json b/.next/static/webpack/f9ea548d7b4340db.webpack.hot-update.json deleted file mode 100644 index 31f1cde..0000000 --- a/.next/static/webpack/f9ea548d7b4340db.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/fde218b3e94bb955.webpack.hot-update.json b/.next/static/webpack/fde218b3e94bb955.webpack.hot-update.json deleted file mode 100644 index c52c0f6..0000000 --- a/.next/static/webpack/fde218b3e94bb955.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/build/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/ff3c747b2702e8ac.webpack.hot-update.json b/.next/static/webpack/ff3c747b2702e8ac.webpack.hot-update.json deleted file mode 100644 index 17b3e8c..0000000 --- a/.next/static/webpack/ff3c747b2702e8ac.webpack.hot-update.json +++ /dev/null @@ -1 +0,0 @@ -{"c":["app/layout","app/gunbuilder/page","webpack"],"r":["app/_not-found/page"],"m":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!","(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js"]} \ No newline at end of file diff --git a/.next/static/webpack/webpack.3e0083886b2f1753.hot-update.js b/.next/static/webpack/webpack.3e0083886b2f1753.hot-update.js deleted file mode 100644 index 28af4d8..0000000 --- a/.next/static/webpack/webpack.3e0083886b2f1753.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "fde218b3e94bb955"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.4528b572b2c1fb3a.hot-update.js b/.next/static/webpack/webpack.4528b572b2c1fb3a.hot-update.js deleted file mode 100644 index a34c4b1..0000000 --- a/.next/static/webpack/webpack.4528b572b2c1fb3a.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "96a4c04f3af3cc7f"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.48663096e2813c6e.hot-update.js b/.next/static/webpack/webpack.48663096e2813c6e.hot-update.js deleted file mode 100644 index cc2b053..0000000 --- a/.next/static/webpack/webpack.48663096e2813c6e.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "5733fa94b307a5ba"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.505dd85efd94f5a1.hot-update.js b/.next/static/webpack/webpack.505dd85efd94f5a1.hot-update.js deleted file mode 100644 index 4b7d044..0000000 --- a/.next/static/webpack/webpack.505dd85efd94f5a1.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "48663096e2813c6e"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.5733fa94b307a5ba.hot-update.js b/.next/static/webpack/webpack.5733fa94b307a5ba.hot-update.js deleted file mode 100644 index 16d82dd..0000000 --- a/.next/static/webpack/webpack.5733fa94b307a5ba.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "efcc3aac418e8f7b"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.83e62d88b00e9127.hot-update.js b/.next/static/webpack/webpack.83e62d88b00e9127.hot-update.js deleted file mode 100644 index a889c5c..0000000 --- a/.next/static/webpack/webpack.83e62d88b00e9127.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "f9ea548d7b4340db"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.96a4c04f3af3cc7f.hot-update.js b/.next/static/webpack/webpack.96a4c04f3af3cc7f.hot-update.js deleted file mode 100644 index c6b5350..0000000 --- a/.next/static/webpack/webpack.96a4c04f3af3cc7f.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "385ea9265ba687b2"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.06cf6e708077e037.hot-update.js b/.next/static/webpack/webpack.9771b72cd14e6ad2.hot-update.js similarity index 91% rename from .next/static/webpack/webpack.06cf6e708077e037.hot-update.js rename to .next/static/webpack/webpack.9771b72cd14e6ad2.hot-update.js index 70107c3..593e253 100644 --- a/.next/static/webpack/webpack.06cf6e708077e037.hot-update.js +++ b/.next/static/webpack/webpack.9771b72cd14e6ad2.hot-update.js @@ -11,7 +11,7 @@ self["webpackHotUpdate_N_E"]("webpack",{}, /******/ function(__webpack_require__) { // webpackRuntimeModules /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "a73da2d4cd917396"; } +/******/ __webpack_require__.h = function() { return "e3d46f4ba3a2dd37"; } /******/ }(); /******/ /******/ } diff --git a/.next/static/webpack/webpack.a73da2d4cd917396.hot-update.js b/.next/static/webpack/webpack.a73da2d4cd917396.hot-update.js deleted file mode 100644 index 6dc0b73..0000000 --- a/.next/static/webpack/webpack.a73da2d4cd917396.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "cd76be92af930a77"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.2f74deb0913397a7.hot-update.js b/.next/static/webpack/webpack.b7fbe4ccfef3faff.hot-update.js similarity index 91% rename from .next/static/webpack/webpack.2f74deb0913397a7.hot-update.js rename to .next/static/webpack/webpack.b7fbe4ccfef3faff.hot-update.js index 69de708..0ad9eb0 100644 --- a/.next/static/webpack/webpack.2f74deb0913397a7.hot-update.js +++ b/.next/static/webpack/webpack.b7fbe4ccfef3faff.hot-update.js @@ -11,7 +11,7 @@ self["webpackHotUpdate_N_E"]("webpack",{}, /******/ function(__webpack_require__) { // webpackRuntimeModules /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "ddd29a4d8ee37726"; } +/******/ __webpack_require__.h = function() { return "5b1ab9cb930747d7"; } /******/ }(); /******/ /******/ } diff --git a/.next/static/webpack/webpack.cd76be92af930a77.hot-update.js b/.next/static/webpack/webpack.cd76be92af930a77.hot-update.js deleted file mode 100644 index 27f74b8..0000000 --- a/.next/static/webpack/webpack.cd76be92af930a77.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "32693299354f3264"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.32693299354f3264.hot-update.js b/.next/static/webpack/webpack.d652b55a3b2a7c68.hot-update.js similarity index 91% rename from .next/static/webpack/webpack.32693299354f3264.hot-update.js rename to .next/static/webpack/webpack.d652b55a3b2a7c68.hot-update.js index e19f7d6..14cc560 100644 --- a/.next/static/webpack/webpack.32693299354f3264.hot-update.js +++ b/.next/static/webpack/webpack.d652b55a3b2a7c68.hot-update.js @@ -11,7 +11,7 @@ self["webpackHotUpdate_N_E"]("webpack",{}, /******/ function(__webpack_require__) { // webpackRuntimeModules /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "4528b572b2c1fb3a"; } +/******/ __webpack_require__.h = function() { return "b7fbe4ccfef3faff"; } /******/ }(); /******/ /******/ } diff --git a/.next/static/webpack/webpack.ddd29a4d8ee37726.hot-update.js b/.next/static/webpack/webpack.ddd29a4d8ee37726.hot-update.js deleted file mode 100644 index cd5ba9d..0000000 --- a/.next/static/webpack/webpack.ddd29a4d8ee37726.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "505dd85efd94f5a1"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.385ea9265ba687b2.hot-update.js b/.next/static/webpack/webpack.e3d46f4ba3a2dd37.hot-update.js similarity index 91% rename from .next/static/webpack/webpack.385ea9265ba687b2.hot-update.js rename to .next/static/webpack/webpack.e3d46f4ba3a2dd37.hot-update.js index 87db603..586d727 100644 --- a/.next/static/webpack/webpack.385ea9265ba687b2.hot-update.js +++ b/.next/static/webpack/webpack.e3d46f4ba3a2dd37.hot-update.js @@ -11,7 +11,7 @@ self["webpackHotUpdate_N_E"]("webpack",{}, /******/ function(__webpack_require__) { // webpackRuntimeModules /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "b05ead14ffc790b9"; } +/******/ __webpack_require__.h = function() { return "d652b55a3b2a7c68"; } /******/ }(); /******/ /******/ } diff --git a/.next/static/webpack/webpack.e621a4bd458e1eac.hot-update.js b/.next/static/webpack/webpack.e621a4bd458e1eac.hot-update.js deleted file mode 100644 index 992bfb7..0000000 --- a/.next/static/webpack/webpack.e621a4bd458e1eac.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "3e0083886b2f1753"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.efcc3aac418e8f7b.hot-update.js b/.next/static/webpack/webpack.efcc3aac418e8f7b.hot-update.js deleted file mode 100644 index ea2d7fb..0000000 --- a/.next/static/webpack/webpack.efcc3aac418e8f7b.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "ff3c747b2702e8ac"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.f1420e1828c7aaab.hot-update.js b/.next/static/webpack/webpack.f1420e1828c7aaab.hot-update.js deleted file mode 100644 index 49b5b83..0000000 --- a/.next/static/webpack/webpack.f1420e1828c7aaab.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "83e62d88b00e9127"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.f9ea548d7b4340db.hot-update.js b/.next/static/webpack/webpack.f9ea548d7b4340db.hot-update.js deleted file mode 100644 index 949dbd4..0000000 --- a/.next/static/webpack/webpack.f9ea548d7b4340db.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "e621a4bd458e1eac"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.fde218b3e94bb955.hot-update.js b/.next/static/webpack/webpack.fde218b3e94bb955.hot-update.js deleted file mode 100644 index a100798..0000000 --- a/.next/static/webpack/webpack.fde218b3e94bb955.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "06cf6e708077e037"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/static/webpack/webpack.ff3c747b2702e8ac.hot-update.js b/.next/static/webpack/webpack.ff3c747b2702e8ac.hot-update.js deleted file mode 100644 index a75a61f..0000000 --- a/.next/static/webpack/webpack.ff3c747b2702e8ac.hot-update.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -self["webpackHotUpdate_N_E"]("webpack",{}, -/******/ function(__webpack_require__) { // webpackRuntimeModules -/******/ /* webpack/runtime/getFullHash */ -/******/ !function() { -/******/ __webpack_require__.h = function() { return "f1420e1828c7aaab"; } -/******/ }(); -/******/ -/******/ } -); \ No newline at end of file diff --git a/.next/trace b/.next/trace index dd69773..4ba540f 100644 --- a/.next/trace +++ b/.next/trace @@ -1,25 +1,7 @@ -[{"name":"hot-reloader","duration":23,"timestamp":919788917861,"id":3,"tags":{"version":"14.2.3","isTurbopack":false},"startTime":1764552432546,"traceId":"45f4427c68eca367"},{"name":"start","duration":0,"timestamp":919788918227,"id":4,"parentId":3,"tags":{},"startTime":1764552432546,"traceId":"45f4427c68eca367"},{"name":"get-version-info","duration":436329,"timestamp":919788918307,"id":5,"parentId":4,"tags":{},"startTime":1764552432546,"traceId":"45f4427c68eca367"},{"name":"clean","duration":5104,"timestamp":919789354706,"id":6,"parentId":4,"tags":{},"startTime":1764552432983,"traceId":"45f4427c68eca367"},{"name":"create-pages-mapping","duration":150,"timestamp":919789360499,"id":8,"parentId":7,"tags":{},"startTime":1764552432988,"traceId":"45f4427c68eca367"},{"name":"create-entrypoints","duration":16809,"timestamp":919789360663,"id":9,"parentId":7,"tags":{},"startTime":1764552432989,"traceId":"45f4427c68eca367"},{"name":"generate-webpack-config","duration":54127,"timestamp":919789377523,"id":10,"parentId":7,"tags":{},"startTime":1764552433005,"traceId":"45f4427c68eca367"},{"name":"get-webpack-config","duration":71231,"timestamp":919789360429,"id":7,"parentId":4,"tags":{},"startTime":1764552432988,"traceId":"45f4427c68eca367"},{"name":"make","duration":431,"timestamp":919789468106,"id":12,"parentId":11,"tags":{},"startTime":1764552433096,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":339,"timestamp":919789469341,"id":14,"parentId":13,"tags":{},"startTime":1764552433097,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":10,"timestamp":919789469716,"id":16,"parentId":13,"tags":{},"startTime":1764552433098,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":61,"timestamp":919789469768,"id":17,"parentId":13,"tags":{},"startTime":1764552433098,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":9,"timestamp":919789469851,"id":18,"parentId":13,"tags":{},"startTime":1764552433098,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":5,"timestamp":919789469929,"id":19,"parentId":13,"tags":{},"startTime":1764552433098,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":276,"timestamp":919789469707,"id":15,"parentId":13,"tags":{},"startTime":1764552433098,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":46,"timestamp":919789470240,"id":20,"parentId":13,"tags":{},"startTime":1764552433098,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":77,"timestamp":919789470295,"id":21,"parentId":13,"tags":{},"startTime":1764552433098,"traceId":"45f4427c68eca367"},{"name":"hash","duration":199,"timestamp":919789470489,"id":22,"parentId":13,"tags":{},"startTime":1764552433098,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":24,"timestamp":919789470688,"id":23,"parentId":13,"tags":{},"startTime":1764552433099,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":33,"timestamp":919789470702,"id":24,"parentId":13,"tags":{},"startTime":1764552433099,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":110,"timestamp":919789470739,"id":25,"parentId":13,"tags":{},"startTime":1764552433099,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":429,"timestamp":919789499816,"id":27,"parentId":11,"tags":{},"startTime":1764552433128,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":649,"timestamp":919789499604,"id":26,"parentId":11,"tags":{},"startTime":1764552433128,"traceId":"45f4427c68eca367"},{"name":"seal","duration":31483,"timestamp":919789469264,"id":13,"parentId":11,"tags":{},"startTime":1764552433097,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":34122,"timestamp":919789466792,"id":11,"parentId":3,"tags":{"name":"client"},"startTime":1764552433095,"traceId":"45f4427c68eca367"},{"name":"emit","duration":4579,"timestamp":919789501112,"id":28,"parentId":3,"tags":{},"startTime":1764552433129,"traceId":"45f4427c68eca367"},{"name":"make","duration":654,"timestamp":919789509403,"id":30,"parentId":29,"tags":{},"startTime":1764552433137,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":14,"timestamp":919789510230,"id":32,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":1,"timestamp":919789510251,"id":34,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":19,"timestamp":919789510278,"id":35,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":2,"timestamp":919789510302,"id":36,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":919789510314,"id":37,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":74,"timestamp":919789510249,"id":33,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":3,"timestamp":919789510374,"id":38,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":6,"timestamp":919789510381,"id":39,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"hash","duration":23,"timestamp":919789510401,"id":40,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":9,"timestamp":919789510424,"id":41,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":6,"timestamp":919789510431,"id":42,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":7,"timestamp":919789510441,"id":43,"parentId":31,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"seal","duration":533,"timestamp":919789510217,"id":31,"parentId":29,"tags":{},"startTime":1764552433138,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":1896,"timestamp":919789508906,"id":29,"parentId":3,"tags":{"name":"server"},"startTime":1764552433137,"traceId":"45f4427c68eca367"},{"name":"emit","duration":825,"timestamp":919789510818,"id":44,"parentId":3,"tags":{},"startTime":1764552433139,"traceId":"45f4427c68eca367"},{"name":"make","duration":63,"timestamp":919789513134,"id":46,"parentId":45,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":9,"timestamp":919789513418,"id":48,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":4,"timestamp":919789513434,"id":50,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":3,"timestamp":919789513445,"id":51,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":2,"timestamp":919789513454,"id":52,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":919789513464,"id":53,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":43,"timestamp":919789513431,"id":49,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":4,"timestamp":919789513521,"id":54,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":2,"timestamp":919789513530,"id":55,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"hash","duration":20,"timestamp":919789513548,"id":56,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":12,"timestamp":919789513569,"id":57,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":4,"timestamp":919789513578,"id":58,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":6,"timestamp":919789513585,"id":59,"parentId":47,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"seal","duration":397,"timestamp":919789513408,"id":47,"parentId":45,"tags":{},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":1188,"timestamp":919789512630,"id":45,"parentId":3,"tags":{"name":"edge-server"},"startTime":1764552433141,"traceId":"45f4427c68eca367"},{"name":"emit","duration":507,"timestamp":919789513831,"id":60,"parentId":3,"tags":{},"startTime":1764552433142,"traceId":"45f4427c68eca367"}] -[{"name":"make","duration":140,"timestamp":919789731490,"id":65,"parentId":64,"tags":{},"startTime":1764552433359,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":15,"timestamp":919789731727,"id":67,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":919789731756,"id":69,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":5,"timestamp":919789731766,"id":70,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":919789731777,"id":71,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":919789731792,"id":72,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":58,"timestamp":919789731753,"id":68,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":5,"timestamp":919789731860,"id":73,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":4,"timestamp":919789731869,"id":74,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"hash","duration":31,"timestamp":919789731890,"id":75,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":9,"timestamp":919789731921,"id":76,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":4,"timestamp":919789731928,"id":77,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":7,"timestamp":919789731935,"id":78,"parentId":66,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":70,"timestamp":919789732042,"id":80,"parentId":64,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":99,"timestamp":919789732015,"id":79,"parentId":64,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"seal","duration":472,"timestamp":919789731710,"id":66,"parentId":64,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":1212,"timestamp":919789730985,"id":64,"parentId":61,"tags":{"name":"client"},"startTime":1764552433359,"traceId":"45f4427c68eca367"},{"name":"setup-dev-bundler","duration":931192,"timestamp":919788830044,"id":2,"parentId":1,"tags":{},"startTime":1764552432458,"traceId":"45f4427c68eca367"},{"name":"run-instrumentation-hook","duration":27,"timestamp":919789773036,"id":82,"parentId":1,"tags":{},"startTime":1764552433401,"traceId":"45f4427c68eca367"},{"name":"emit","duration":41256,"timestamp":919789732217,"id":81,"parentId":61,"tags":{},"startTime":1764552433360,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":46869,"timestamp":919789727116,"id":61,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552433355,"traceId":"45f4427c68eca367"},{"name":"make","duration":113,"timestamp":919789775172,"id":84,"parentId":83,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":16,"timestamp":919789775381,"id":86,"parentId":85,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":1,"timestamp":919789775407,"id":88,"parentId":85,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":26,"timestamp":919789775418,"id":89,"parentId":85,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":2,"timestamp":919789775468,"id":90,"parentId":85,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":919789775480,"id":91,"parentId":85,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":90,"timestamp":919789775404,"id":87,"parentId":85,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":4,"timestamp":919789775553,"id":92,"parentId":85,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":3,"timestamp":919789775562,"id":93,"parentId":85,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"hash","duration":21,"timestamp":919789775582,"id":94,"parentId":85,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":8,"timestamp":919789775603,"id":95,"parentId":85,"tags":{},"startTime":1764552433404,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":3,"timestamp":919789775609,"id":96,"parentId":85,"tags":{},"startTime":1764552433404,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":10,"timestamp":919789775615,"id":97,"parentId":85,"tags":{},"startTime":1764552433404,"traceId":"45f4427c68eca367"},{"name":"seal","duration":374,"timestamp":919789775365,"id":85,"parentId":83,"tags":{},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":940,"timestamp":919789774822,"id":83,"parentId":62,"tags":{"name":"server"},"startTime":1764552433403,"traceId":"45f4427c68eca367"},{"name":"start-dev-server","duration":1097126,"timestamp":919788680229,"id":1,"tags":{"cpus":"16","platform":"darwin","memory.freeMem":"1711685632","memory.totalMem":"68719476736","memory.heapSizeLimit":"34561064960","isTurbopack":false,"memory.rss":"247349248","memory.heapTotal":"103923712","memory.heapUsed":"88466408"},"startTime":1764552432308,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2027,"timestamp":919789775772,"id":98,"parentId":62,"tags":{},"startTime":1764552433404,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":50783,"timestamp":919789727216,"id":62,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552433355,"traceId":"45f4427c68eca367"},{"name":"make","duration":82,"timestamp":919789778972,"id":100,"parentId":99,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":15,"timestamp":919789779146,"id":102,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":4,"timestamp":919789779170,"id":104,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":4,"timestamp":919789779181,"id":105,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":2,"timestamp":919789779193,"id":106,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":919789779204,"id":107,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":51,"timestamp":919789779166,"id":103,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":3,"timestamp":919789779287,"id":108,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":4,"timestamp":919789779294,"id":109,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"hash","duration":25,"timestamp":919789779313,"id":110,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":9,"timestamp":919789779338,"id":111,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":5,"timestamp":919789779343,"id":112,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":6,"timestamp":919789779351,"id":113,"parentId":101,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"seal","duration":332,"timestamp":919789779128,"id":101,"parentId":99,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":773,"timestamp":919789778702,"id":99,"parentId":63,"tags":{"name":"edge-server"},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1937,"timestamp":919789779489,"id":114,"parentId":63,"tags":{},"startTime":1764552433407,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-edge-server","duration":54544,"timestamp":919789727236,"id":63,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552433355,"traceId":"45f4427c68eca367"}] -[{"name":"next-swc-transform","duration":16457,"timestamp":919792312140,"id":123,"parentId":122,"tags":{},"startTime":1764552435940,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":16917,"timestamp":919792311697,"id":122,"parentId":121,"tags":{},"startTime":1764552435940,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":23243,"timestamp":919792310114,"id":121,"parentId":118,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx","layer":"rsc"},"startTime":1764552435938,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":102947,"timestamp":919792243769,"id":120,"parentId":119,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552435872,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2590,"timestamp":919792360684,"id":130,"parentId":129,"tags":{},"startTime":1764552435989,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2770,"timestamp":919792360509,"id":129,"parentId":128,"tags":{},"startTime":1764552435988,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":9582,"timestamp":919792359995,"id":128,"parentId":118,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx","layer":"ssr"},"startTime":1764552435988,"traceId":"45f4427c68eca367"},{"name":"make","duration":154263,"timestamp":919792240467,"id":119,"parentId":118,"tags":{},"startTime":1764552435868,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":2607,"timestamp":919792399175,"id":132,"parentId":131,"tags":{},"startTime":1764552436027,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":7,"timestamp":919792401802,"id":134,"parentId":131,"tags":{},"startTime":1764552436030,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1665,"timestamp":919792401824,"id":135,"parentId":131,"tags":{},"startTime":1764552436030,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":919792403507,"id":136,"parentId":131,"tags":{},"startTime":1764552436031,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":919792403519,"id":137,"parentId":131,"tags":{},"startTime":1764552436031,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":2022,"timestamp":919792401796,"id":133,"parentId":131,"tags":{},"startTime":1764552436030,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":3200,"timestamp":919792405481,"id":138,"parentId":131,"tags":{},"startTime":1764552436033,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":2925,"timestamp":919792408694,"id":139,"parentId":131,"tags":{},"startTime":1764552436037,"traceId":"45f4427c68eca367"},{"name":"hash","duration":2350,"timestamp":919792413372,"id":140,"parentId":131,"tags":{},"startTime":1764552436041,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":93,"timestamp":919792415721,"id":141,"parentId":131,"tags":{},"startTime":1764552436044,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":78,"timestamp":919792415805,"id":142,"parentId":131,"tags":{},"startTime":1764552436044,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":11701,"timestamp":919792415887,"id":143,"parentId":131,"tags":{},"startTime":1764552436044,"traceId":"45f4427c68eca367"},{"name":"seal","duration":30255,"timestamp":919792398762,"id":131,"parentId":118,"tags":{},"startTime":1764552436027,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":190377,"timestamp":919792239481,"id":118,"parentId":116,"tags":{"name":"server"},"startTime":1764552435867,"traceId":"45f4427c68eca367"},{"name":"emit","duration":6353,"timestamp":919792429873,"id":144,"parentId":116,"tags":{},"startTime":1764552436058,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":199824,"timestamp":919792236866,"id":116,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552435865,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2614,"timestamp":919792452349,"id":154,"parentId":153,"tags":{},"startTime":1764552436080,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2778,"timestamp":919792452192,"id":153,"parentId":152,"tags":{},"startTime":1764552436080,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":9872,"timestamp":919792451320,"id":152,"parentId":145,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx","layer":"app-pages-browser"},"startTime":1764552436079,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":68875,"timestamp":919792441569,"id":147,"parentId":146,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764552436069,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":97736,"timestamp":919792441627,"id":149,"parentId":146,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552436070,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":103105,"timestamp":919792441654,"id":151,"parentId":146,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552436070,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":107496,"timestamp":919792441607,"id":148,"parentId":146,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764552436069,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":226,"timestamp":919792553564,"id":157,"parentId":156,"tags":{},"startTime":1764552436181,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":133894,"timestamp":919792645170,"id":159,"parentId":158,"tags":{},"startTime":1764552436273,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":225907,"timestamp":919792553868,"id":158,"parentId":156,"tags":{},"startTime":1764552436182,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":14079,"timestamp":919792779893,"id":160,"parentId":156,"tags":{"astUsed":"true"},"startTime":1764552436408,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":243525,"timestamp":919792552168,"id":156,"parentId":155,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764552436180,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":259047,"timestamp":919792545764,"id":155,"parentId":145,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764552436174,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":45,"timestamp":919792805027,"id":161,"parentId":155,"tags":{},"startTime":1764552436433,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":363459,"timestamp":919792441644,"id":150,"parentId":146,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552436070,"traceId":"45f4427c68eca367"},{"name":"make","duration":366927,"timestamp":919792438210,"id":146,"parentId":145,"tags":{},"startTime":1764552436066,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1162,"timestamp":919792807220,"id":163,"parentId":162,"tags":{},"startTime":1764552436435,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":919792808395,"id":165,"parentId":162,"tags":{},"startTime":1764552436436,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":32,"timestamp":919792808427,"id":166,"parentId":162,"tags":{},"startTime":1764552436436,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":919792808468,"id":167,"parentId":162,"tags":{},"startTime":1764552436436,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":919792808482,"id":168,"parentId":162,"tags":{},"startTime":1764552436436,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":303,"timestamp":919792808391,"id":164,"parentId":162,"tags":{},"startTime":1764552436436,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":2146,"timestamp":919792809709,"id":169,"parentId":162,"tags":{},"startTime":1764552436438,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1194,"timestamp":919792811864,"id":170,"parentId":162,"tags":{},"startTime":1764552436440,"traceId":"45f4427c68eca367"},{"name":"hash","duration":4039,"timestamp":919792814022,"id":171,"parentId":162,"tags":{},"startTime":1764552436442,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":158,"timestamp":919792818055,"id":172,"parentId":162,"tags":{},"startTime":1764552436446,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":66,"timestamp":919792818197,"id":173,"parentId":162,"tags":{},"startTime":1764552436446,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":4510,"timestamp":919792818267,"id":174,"parentId":162,"tags":{},"startTime":1764552436446,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":238,"timestamp":919792823949,"id":176,"parentId":145,"tags":{},"startTime":1764552436452,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":551,"timestamp":919792823641,"id":175,"parentId":145,"tags":{},"startTime":1764552436452,"traceId":"45f4427c68eca367"},{"name":"seal","duration":19021,"timestamp":919792806976,"id":162,"parentId":145,"tags":{},"startTime":1764552436435,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":388061,"timestamp":919792437960,"id":145,"parentId":127,"tags":{"name":"client"},"startTime":1764552436066,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2493,"timestamp":919792826041,"id":177,"parentId":127,"tags":{},"startTime":1764552436454,"traceId":"45f4427c68eca367"},{"name":"compile-path","duration":592321,"timestamp":919792236943,"id":117,"tags":{"trigger":"/gunbuilder/[categoryId]/[partId]","isTurbopack":false},"startTime":1764552435865,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":474823,"timestamp":919792354766,"id":127,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552435983,"traceId":"45f4427c68eca367"}] -[{"name":"handle-request","duration":792363,"timestamp":919792225172,"id":115,"tags":{"url":"/gunbuilder/barrel/undefined","isTurbopack":false},"startTime":1764552435853,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":919793017573,"id":178,"parentId":115,"tags":{"url":"/gunbuilder/barrel/undefined","memory.rss":"562970624","memory.heapUsed":"169670656","memory.heapTotal":"286982144"},"startTime":1764552436645,"traceId":"45f4427c68eca367"},{"name":"client-success","duration":8,"timestamp":919793214718,"id":179,"parentId":3,"tags":{},"startTime":1764552436843,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":26162,"timestamp":919793861026,"id":186,"parentId":184,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552437489,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":26338,"timestamp":919793860946,"id":185,"parentId":184,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552437489,"traceId":"45f4427c68eca367"},{"name":"make","duration":57104,"timestamp":919793834586,"id":184,"parentId":183,"tags":{},"startTime":1764552437462,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":956,"timestamp":919793892984,"id":195,"parentId":194,"tags":{},"startTime":1764552437521,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":919793893952,"id":197,"parentId":194,"tags":{},"startTime":1764552437522,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1064,"timestamp":919793893992,"id":198,"parentId":194,"tags":{},"startTime":1764552437522,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":919793895068,"id":199,"parentId":194,"tags":{},"startTime":1764552437523,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":919793895079,"id":200,"parentId":194,"tags":{},"startTime":1764552437523,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1313,"timestamp":919793893948,"id":196,"parentId":194,"tags":{},"startTime":1764552437522,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":312,"timestamp":919793895930,"id":201,"parentId":194,"tags":{},"startTime":1764552437524,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":452,"timestamp":919793896248,"id":202,"parentId":194,"tags":{},"startTime":1764552437524,"traceId":"45f4427c68eca367"},{"name":"hash","duration":835,"timestamp":919793897336,"id":203,"parentId":194,"tags":{},"startTime":1764552437525,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":54,"timestamp":919793898171,"id":204,"parentId":194,"tags":{},"startTime":1764552437526,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":35,"timestamp":919793898220,"id":205,"parentId":194,"tags":{},"startTime":1764552437526,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":200,"timestamp":919793898259,"id":206,"parentId":194,"tags":{},"startTime":1764552437526,"traceId":"45f4427c68eca367"},{"name":"seal","duration":6501,"timestamp":919793892816,"id":194,"parentId":183,"tags":{},"startTime":1764552437521,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":67045,"timestamp":919793833281,"id":183,"parentId":181,"tags":{"name":"server"},"startTime":1764552437461,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1092,"timestamp":919793900339,"id":207,"parentId":181,"tags":{},"startTime":1764552437528,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":77962,"timestamp":919793823786,"id":181,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552437452,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2397,"timestamp":919793907129,"id":210,"parentId":209,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764552437535,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3976,"timestamp":919793907170,"id":214,"parentId":209,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552437535,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":753,"timestamp":919793910404,"id":218,"parentId":217,"tags":{},"startTime":1764552437538,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":8342,"timestamp":919793911182,"id":220,"parentId":219,"tags":{},"startTime":1764552437539,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":8568,"timestamp":919793911171,"id":219,"parentId":217,"tags":{},"startTime":1764552437539,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":2129,"timestamp":919793919750,"id":221,"parentId":217,"tags":{"astUsed":"true"},"startTime":1764552437548,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":12455,"timestamp":919793910333,"id":217,"parentId":216,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764552437538,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15833,"timestamp":919793907154,"id":211,"parentId":209,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764552437535,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15836,"timestamp":919793907161,"id":212,"parentId":209,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552437535,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":15558,"timestamp":919793908664,"id":216,"parentId":208,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764552437537,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":16,"timestamp":919793924291,"id":222,"parentId":216,"tags":{},"startTime":1764552437552,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":17153,"timestamp":919793907165,"id":213,"parentId":209,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552437535,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":40461,"timestamp":919793907174,"id":215,"parentId":209,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552437535,"traceId":"45f4427c68eca367"},{"name":"make","duration":43369,"timestamp":919793904287,"id":209,"parentId":208,"tags":{},"startTime":1764552437532,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":943,"timestamp":919793948976,"id":224,"parentId":223,"tags":{},"startTime":1764552437577,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":919793949932,"id":226,"parentId":223,"tags":{},"startTime":1764552437578,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":33,"timestamp":919793949966,"id":227,"parentId":223,"tags":{},"startTime":1764552437578,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":919793950014,"id":228,"parentId":223,"tags":{},"startTime":1764552437578,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":919793950026,"id":229,"parentId":223,"tags":{},"startTime":1764552437578,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":395,"timestamp":919793949928,"id":225,"parentId":223,"tags":{},"startTime":1764552437578,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":335,"timestamp":919793950957,"id":230,"parentId":223,"tags":{},"startTime":1764552437579,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":643,"timestamp":919793951299,"id":231,"parentId":223,"tags":{},"startTime":1764552437579,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1471,"timestamp":919793952633,"id":232,"parentId":223,"tags":{},"startTime":1764552437581,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":76,"timestamp":919793954104,"id":233,"parentId":223,"tags":{},"startTime":1764552437582,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":52,"timestamp":919793954158,"id":234,"parentId":223,"tags":{},"startTime":1764552437582,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1222,"timestamp":919793954214,"id":235,"parentId":223,"tags":{},"startTime":1764552437582,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":59,"timestamp":919793956218,"id":237,"parentId":208,"tags":{},"startTime":1764552437584,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":140,"timestamp":919793956140,"id":236,"parentId":208,"tags":{},"startTime":1764552437584,"traceId":"45f4427c68eca367"},{"name":"seal","duration":8575,"timestamp":919793948625,"id":223,"parentId":208,"tags":{},"startTime":1764552437577,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":53617,"timestamp":919793903616,"id":208,"parentId":193,"tags":{"name":"client"},"startTime":1764552437532,"traceId":"45f4427c68eca367"},{"name":"emit","duration":5807,"timestamp":919793957251,"id":238,"parentId":193,"tags":{},"startTime":1764552437585,"traceId":"45f4427c68eca367"},{"name":"compile-path","duration":139562,"timestamp":919793823991,"id":182,"tags":{"trigger":"/gunbuilder","isTurbopack":false},"startTime":1764552437452,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":75284,"timestamp":919793888453,"id":193,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552437516,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":4,"timestamp":919793964777,"id":239,"parentId":3,"tags":{},"startTime":1764552437593,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":155610,"timestamp":919793816340,"id":180,"tags":{"url":"/gunbuilder?_rsc=yz77c","isTurbopack":false},"startTime":1764552437444,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":919793971983,"id":240,"parentId":180,"tags":{"url":"/gunbuilder?_rsc=yz77c","memory.rss":"598540288","memory.heapUsed":"154410056","memory.heapTotal":"294682624"},"startTime":1764552437600,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":89000,"timestamp":919793889511,"id":242,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/barrel/undefined","isPageHidden":false},"startTime":1764552437606,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":5442,"timestamp":919793975204,"id":241,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764552437603,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":919793980677,"id":243,"parentId":241,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"598638592","memory.heapUsed":"155531008","memory.heapTotal":"294682624"},"startTime":1764552437609,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":24714,"timestamp":919795455058,"id":251,"parentId":248,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552439083,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":27289,"timestamp":919795455043,"id":250,"parentId":248,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552439083,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":27567,"timestamp":919795454930,"id":249,"parentId":248,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552439083,"traceId":"45f4427c68eca367"},{"name":"make","duration":36943,"timestamp":919795452375,"id":248,"parentId":247,"tags":{},"startTime":1764552439080,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1652,"timestamp":919795490602,"id":263,"parentId":262,"tags":{},"startTime":1764552439118,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":4,"timestamp":919795492293,"id":265,"parentId":262,"tags":{},"startTime":1764552439120,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1101,"timestamp":919795492316,"id":266,"parentId":262,"tags":{},"startTime":1764552439120,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":919795493438,"id":267,"parentId":262,"tags":{},"startTime":1764552439121,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":7,"timestamp":919795493456,"id":268,"parentId":262,"tags":{},"startTime":1764552439121,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1507,"timestamp":919795492279,"id":264,"parentId":262,"tags":{},"startTime":1764552439120,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":425,"timestamp":919795494408,"id":269,"parentId":262,"tags":{},"startTime":1764552439122,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":586,"timestamp":919795494839,"id":270,"parentId":262,"tags":{},"startTime":1764552439123,"traceId":"45f4427c68eca367"},{"name":"hash","duration":649,"timestamp":919795496073,"id":271,"parentId":262,"tags":{},"startTime":1764552439124,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":61,"timestamp":919795496722,"id":272,"parentId":262,"tags":{},"startTime":1764552439125,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":57,"timestamp":919795496777,"id":273,"parentId":262,"tags":{},"startTime":1764552439125,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":246,"timestamp":919795496838,"id":274,"parentId":262,"tags":{},"startTime":1764552439125,"traceId":"45f4427c68eca367"},{"name":"seal","duration":12349,"timestamp":919795490345,"id":262,"parentId":247,"tags":{},"startTime":1764552439118,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":52921,"timestamp":919795451384,"id":247,"parentId":245,"tags":{"name":"server"},"startTime":1764552439079,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1220,"timestamp":919795504336,"id":275,"parentId":245,"tags":{},"startTime":1764552439132,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":61117,"timestamp":919795444761,"id":245,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552439073,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2009,"timestamp":919795509510,"id":278,"parentId":277,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764552439137,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2745,"timestamp":919795509569,"id":283,"parentId":277,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552439137,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2760,"timestamp":919795509560,"id":281,"parentId":277,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552439137,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4193,"timestamp":919795509567,"id":282,"parentId":277,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552439137,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4308,"timestamp":919795509543,"id":279,"parentId":277,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764552439137,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4298,"timestamp":919795509557,"id":280,"parentId":277,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552439137,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":7461,"timestamp":919795509571,"id":284,"parentId":277,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552439137,"traceId":"45f4427c68eca367"},{"name":"make","duration":10018,"timestamp":919795507036,"id":277,"parentId":276,"tags":{},"startTime":1764552439135,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":718,"timestamp":919795517968,"id":286,"parentId":285,"tags":{},"startTime":1764552439146,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":919795518700,"id":288,"parentId":285,"tags":{},"startTime":1764552439147,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":25,"timestamp":919795518711,"id":289,"parentId":285,"tags":{},"startTime":1764552439147,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":919795518744,"id":290,"parentId":285,"tags":{},"startTime":1764552439147,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":919795518755,"id":291,"parentId":285,"tags":{},"startTime":1764552439147,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":311,"timestamp":919795518696,"id":287,"parentId":285,"tags":{},"startTime":1764552439147,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":239,"timestamp":919795519454,"id":292,"parentId":285,"tags":{},"startTime":1764552439147,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":490,"timestamp":919795519701,"id":293,"parentId":285,"tags":{},"startTime":1764552439148,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1419,"timestamp":919795521013,"id":294,"parentId":285,"tags":{},"startTime":1764552439149,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":69,"timestamp":919795522432,"id":295,"parentId":285,"tags":{},"startTime":1764552439150,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":34,"timestamp":919795522497,"id":296,"parentId":285,"tags":{},"startTime":1764552439150,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":916,"timestamp":919795522534,"id":297,"parentId":285,"tags":{},"startTime":1764552439150,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":41,"timestamp":919795523900,"id":299,"parentId":276,"tags":{},"startTime":1764552439152,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":80,"timestamp":919795523865,"id":298,"parentId":276,"tags":{},"startTime":1764552439152,"traceId":"45f4427c68eca367"},{"name":"seal","duration":7131,"timestamp":919795517738,"id":285,"parentId":276,"tags":{},"startTime":1764552439146,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":18152,"timestamp":919795506731,"id":276,"parentId":261,"tags":{"name":"client"},"startTime":1764552439135,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1898,"timestamp":919795524894,"id":300,"parentId":261,"tags":{},"startTime":1764552439153,"traceId":"45f4427c68eca367"},{"name":"compile-path","duration":82225,"timestamp":919795444834,"id":246,"tags":{"trigger":"/gunbuilder/[categoryId]","isTurbopack":false},"startTime":1764552439073,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":43203,"timestamp":919795484116,"id":261,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552439112,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":4,"timestamp":919795535786,"id":301,"parentId":3,"tags":{},"startTime":1764552439164,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":60000,"timestamp":919795484393,"id":302,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":false},"startTime":1764552439172,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":212915,"timestamp":919795441048,"id":244,"tags":{"url":"/gunbuilder/handguard?_rsc=1acsq","isTurbopack":false},"startTime":1764552439069,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":919795653995,"id":303,"parentId":244,"tags":{"url":"/gunbuilder/handguard?_rsc=1acsq","memory.rss":"599670784","memory.heapUsed":"152564152","memory.heapTotal":"290455552"},"startTime":1764552439282,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":5877,"timestamp":919795658452,"id":304,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","isTurbopack":false},"startTime":1764552439286,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":919795664346,"id":305,"parentId":304,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","memory.rss":"599736320","memory.heapUsed":"153451152","memory.heapTotal":"290455552"},"startTime":1764552439292,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":18640,"timestamp":919797780339,"id":306,"tags":{"url":"/gunbuilder/handguard/undefined?_rsc=1wjnh","isTurbopack":false},"startTime":1764552441408,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":919797799082,"id":307,"parentId":306,"tags":{"url":"/gunbuilder/handguard/undefined?_rsc=1wjnh","memory.rss":"600309760","memory.heapUsed":"155041328","memory.heapTotal":"290947072"},"startTime":1764552441427,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":6780,"timestamp":919797807017,"id":308,"tags":{"url":"/gunbuilder/handguard/undefined?_rsc=6ny83","isTurbopack":false},"startTime":1764552441435,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":919797813837,"id":309,"parentId":308,"tags":{"url":"/gunbuilder/handguard/undefined?_rsc=6ny83","memory.rss":"600309760","memory.heapUsed":"156021776","memory.heapTotal":"290947072"},"startTime":1764552441442,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":17806,"timestamp":919957336416,"id":320,"parentId":313,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552600964,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":18537,"timestamp":919957336245,"id":314,"parentId":313,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764552600964,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":5110,"timestamp":919957352517,"id":324,"parentId":323,"tags":{},"startTime":1764552600980,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":5821,"timestamp":919957351819,"id":323,"parentId":322,"tags":{},"startTime":1764552600979,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":16869,"timestamp":919957351386,"id":322,"parentId":312,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764552600979,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":36992,"timestamp":919957336399,"id":318,"parentId":313,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552600964,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":37312,"timestamp":919957336383,"id":316,"parentId":313,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552600964,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":16380,"timestamp":919957357375,"id":326,"parentId":325,"tags":{},"startTime":1764552600985,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":43274,"timestamp":919957336409,"id":319,"parentId":313,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552600964,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":43515,"timestamp":919957336369,"id":315,"parentId":313,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764552600964,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":23261,"timestamp":919957373879,"id":328,"parentId":327,"tags":{},"startTime":1764552601001,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":23814,"timestamp":919957373836,"id":327,"parentId":325,"tags":{},"startTime":1764552601001,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":4091,"timestamp":919957397687,"id":329,"parentId":325,"tags":{"astUsed":"true"},"startTime":1764552601025,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":46078,"timestamp":919957357054,"id":325,"parentId":321,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764552600984,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":59192,"timestamp":919957348390,"id":321,"parentId":312,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764552600976,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":41,"timestamp":919957408470,"id":330,"parentId":321,"tags":{},"startTime":1764552601036,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":72142,"timestamp":919957336391,"id":317,"parentId":313,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552600964,"traceId":"45f4427c68eca367"},{"name":"make","duration":73527,"timestamp":919957335017,"id":313,"parentId":312,"tags":{},"startTime":1764552600962,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":844,"timestamp":919957429990,"id":332,"parentId":331,"tags":{},"startTime":1764552601057,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":8,"timestamp":919957430855,"id":334,"parentId":331,"tags":{},"startTime":1764552601058,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":35,"timestamp":919957430902,"id":335,"parentId":331,"tags":{},"startTime":1764552601058,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":5,"timestamp":919957430967,"id":336,"parentId":331,"tags":{},"startTime":1764552601058,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":919957431001,"id":337,"parentId":331,"tags":{},"startTime":1764552601058,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":483,"timestamp":919957430851,"id":333,"parentId":331,"tags":{},"startTime":1764552601058,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":293,"timestamp":919957431853,"id":338,"parentId":331,"tags":{},"startTime":1764552601059,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1346,"timestamp":919957432151,"id":339,"parentId":331,"tags":{},"startTime":1764552601060,"traceId":"45f4427c68eca367"},{"name":"hash","duration":2503,"timestamp":919957435008,"id":340,"parentId":331,"tags":{},"startTime":1764552601062,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":98,"timestamp":919957437511,"id":341,"parentId":331,"tags":{},"startTime":1764552601065,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":59,"timestamp":919957437602,"id":342,"parentId":331,"tags":{},"startTime":1764552601065,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":3724,"timestamp":919957437663,"id":343,"parentId":331,"tags":{},"startTime":1764552601065,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":231,"timestamp":919957442396,"id":345,"parentId":312,"tags":{},"startTime":1764552601070,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":395,"timestamp":919957442239,"id":344,"parentId":312,"tags":{},"startTime":1764552601070,"traceId":"45f4427c68eca367"},{"name":"seal","duration":13948,"timestamp":919957429662,"id":331,"parentId":312,"tags":{},"startTime":1764552601057,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":111031,"timestamp":919957332599,"id":312,"parentId":310,"tags":{"name":"client"},"startTime":1764552600960,"traceId":"45f4427c68eca367"},{"name":"emit","duration":3699,"timestamp":919957443648,"id":346,"parentId":310,"tags":{},"startTime":1764552601071,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":128422,"timestamp":919957319696,"id":310,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764552600947,"traceId":"45f4427c68eca367"},{"name":"client-success","duration":3,"timestamp":919957451358,"id":349,"parentId":3,"tags":{},"startTime":1764552601079,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3086,"timestamp":919957453192,"id":350,"parentId":348,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552601081,"traceId":"45f4427c68eca367"},{"name":"make","duration":8209,"timestamp":919957450527,"id":348,"parentId":347,"tags":{},"startTime":1764552601078,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":563,"timestamp":919957465177,"id":355,"parentId":354,"tags":{},"startTime":1764552601093,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":919957465757,"id":357,"parentId":354,"tags":{},"startTime":1764552601093,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":660,"timestamp":919957465807,"id":358,"parentId":354,"tags":{},"startTime":1764552601093,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":919957466484,"id":359,"parentId":354,"tags":{},"startTime":1764552601094,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":919957466498,"id":360,"parentId":354,"tags":{},"startTime":1764552601094,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":930,"timestamp":919957465753,"id":356,"parentId":354,"tags":{},"startTime":1764552601093,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":173,"timestamp":919957467259,"id":361,"parentId":354,"tags":{},"startTime":1764552601095,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":550,"timestamp":919957467438,"id":362,"parentId":354,"tags":{},"startTime":1764552601095,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1200,"timestamp":919957468510,"id":363,"parentId":354,"tags":{},"startTime":1764552601096,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":83,"timestamp":919957469710,"id":364,"parentId":354,"tags":{},"startTime":1764552601097,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":96,"timestamp":919957469787,"id":365,"parentId":354,"tags":{},"startTime":1764552601097,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":292,"timestamp":919957469886,"id":366,"parentId":354,"tags":{},"startTime":1764552601097,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":142000,"timestamp":919957320714,"id":367,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder/handguard","isPageHidden":true},"startTime":1764552601098,"traceId":"45f4427c68eca367"},{"name":"seal","duration":6311,"timestamp":919957464931,"id":354,"parentId":347,"tags":{},"startTime":1764552601092,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":21862,"timestamp":919957450165,"id":347,"parentId":311,"tags":{"name":"server"},"startTime":1764552601078,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1020,"timestamp":919957472041,"id":368,"parentId":311,"tags":{},"startTime":1764552601099,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":153141,"timestamp":919957320826,"id":311,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764552600948,"traceId":"45f4427c68eca367"}] -[{"name":"handle-request","duration":22016,"timestamp":919957483858,"id":369,"tags":{"url":"/gunbuilder/handguard?_rsc=16ivs","isTurbopack":false},"startTime":1764552601111,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":919957505910,"id":370,"parentId":369,"tags":{"url":"/gunbuilder/handguard?_rsc=16ivs","memory.rss":"429719552","memory.heapUsed":"145383832","memory.heapTotal":"175783936"},"startTime":1764552601133,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2750,"timestamp":920059355213,"id":378,"parentId":377,"tags":{},"startTime":1764552702982,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":3551,"timestamp":920059354454,"id":377,"parentId":376,"tags":{},"startTime":1764552702982,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":8856,"timestamp":920059352996,"id":376,"parentId":373,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764552702980,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":23996,"timestamp":920059338623,"id":375,"parentId":374,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552702966,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":4039,"timestamp":920059364394,"id":384,"parentId":383,"tags":{},"startTime":1764552702991,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":4268,"timestamp":920059364171,"id":383,"parentId":382,"tags":{},"startTime":1764552702991,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":15163,"timestamp":920059363896,"id":382,"parentId":373,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764552702991,"traceId":"45f4427c68eca367"},{"name":"make","duration":45762,"timestamp":920059334542,"id":374,"parentId":373,"tags":{},"startTime":1764552702962,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":690,"timestamp":920059402218,"id":386,"parentId":385,"tags":{},"startTime":1764552703029,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":920059402925,"id":388,"parentId":385,"tags":{},"startTime":1764552703030,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1062,"timestamp":920059402968,"id":389,"parentId":385,"tags":{},"startTime":1764552703030,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":7,"timestamp":920059404072,"id":390,"parentId":385,"tags":{},"startTime":1764552703031,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":4,"timestamp":920059404106,"id":391,"parentId":385,"tags":{},"startTime":1764552703031,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1393,"timestamp":920059402921,"id":387,"parentId":385,"tags":{},"startTime":1764552703030,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":264,"timestamp":920059404828,"id":392,"parentId":385,"tags":{},"startTime":1764552703032,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1882,"timestamp":920059405099,"id":393,"parentId":385,"tags":{},"startTime":1764552703032,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1034,"timestamp":920059407773,"id":394,"parentId":385,"tags":{},"startTime":1764552703035,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":66,"timestamp":920059408808,"id":395,"parentId":385,"tags":{},"startTime":1764552703036,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":36,"timestamp":920059408869,"id":396,"parentId":385,"tags":{},"startTime":1764552703036,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1990,"timestamp":920059408909,"id":397,"parentId":385,"tags":{},"startTime":1764552703036,"traceId":"45f4427c68eca367"},{"name":"seal","duration":9621,"timestamp":920059401959,"id":385,"parentId":373,"tags":{},"startTime":1764552703029,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":79395,"timestamp":920059332723,"id":373,"parentId":371,"tags":{"name":"server"},"startTime":1764552702960,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1079,"timestamp":920059412128,"id":398,"parentId":371,"tags":{},"startTime":1764552703039,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":96278,"timestamp":920059317274,"id":371,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764552702944,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3321,"timestamp":920059417757,"id":401,"parentId":400,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764552703045,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3995,"timestamp":920059417788,"id":406,"parentId":400,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552703045,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5007,"timestamp":920059417786,"id":405,"parentId":400,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552703045,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":793,"timestamp":920059422014,"id":413,"parentId":412,"tags":{},"startTime":1764552703049,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":9209,"timestamp":920059417777,"id":402,"parentId":400,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764552703045,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":9208,"timestamp":920059417782,"id":403,"parentId":400,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552703045,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":6791,"timestamp":920059420285,"id":411,"parentId":410,"tags":{},"startTime":1764552703047,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":6902,"timestamp":920059420175,"id":410,"parentId":409,"tags":{},"startTime":1764552703047,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":12149,"timestamp":920059420103,"id":409,"parentId":399,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764552703047,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15269,"timestamp":920059417789,"id":407,"parentId":400,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552703045,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":22584,"timestamp":920059422846,"id":415,"parentId":414,"tags":{},"startTime":1764552703050,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":22923,"timestamp":920059422826,"id":414,"parentId":412,"tags":{},"startTime":1764552703050,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":3170,"timestamp":920059445772,"id":416,"parentId":412,"tags":{"astUsed":"true"},"startTime":1764552703073,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":28377,"timestamp":920059421878,"id":412,"parentId":408,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764552703049,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":33583,"timestamp":920059419534,"id":408,"parentId":399,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764552703047,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":36,"timestamp":920059453743,"id":417,"parentId":408,"tags":{},"startTime":1764552703081,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":36017,"timestamp":920059417784,"id":404,"parentId":400,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552703045,"traceId":"45f4427c68eca367"},{"name":"make","duration":38566,"timestamp":920059415244,"id":400,"parentId":399,"tags":{},"startTime":1764552703042,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":748,"timestamp":920059459228,"id":419,"parentId":418,"tags":{},"startTime":1764552703086,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":920059459989,"id":421,"parentId":418,"tags":{},"startTime":1764552703087,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":20,"timestamp":920059460024,"id":422,"parentId":418,"tags":{},"startTime":1764552703087,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":920059460054,"id":423,"parentId":418,"tags":{},"startTime":1764552703087,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":920059460067,"id":424,"parentId":418,"tags":{},"startTime":1764552703087,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":355,"timestamp":920059459985,"id":420,"parentId":418,"tags":{},"startTime":1764552703087,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":269,"timestamp":920059460842,"id":425,"parentId":418,"tags":{},"startTime":1764552703088,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1198,"timestamp":920059461116,"id":426,"parentId":418,"tags":{},"startTime":1764552703088,"traceId":"45f4427c68eca367"},{"name":"hash","duration":2410,"timestamp":920059463121,"id":427,"parentId":418,"tags":{},"startTime":1764552703090,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":90,"timestamp":920059465531,"id":428,"parentId":418,"tags":{},"startTime":1764552703093,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":46,"timestamp":920059465594,"id":429,"parentId":418,"tags":{},"startTime":1764552703093,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":2820,"timestamp":920059465644,"id":430,"parentId":418,"tags":{},"startTime":1764552703093,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":218,"timestamp":920059469398,"id":432,"parentId":399,"tags":{},"startTime":1764552703096,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":360,"timestamp":920059469260,"id":431,"parentId":399,"tags":{},"startTime":1764552703096,"traceId":"45f4427c68eca367"},{"name":"seal","duration":11584,"timestamp":920059458991,"id":418,"parentId":399,"tags":{},"startTime":1764552703086,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":55932,"timestamp":920059414656,"id":399,"parentId":372,"tags":{"name":"client"},"startTime":1764552703042,"traceId":"45f4427c68eca367"},{"name":"emit","duration":4762,"timestamp":920059470596,"id":433,"parentId":372,"tags":{},"startTime":1764552703098,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":158551,"timestamp":920059317829,"id":372,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764552702945,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":7,"timestamp":920059478750,"id":434,"parentId":3,"tags":{},"startTime":1764552703106,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":21538,"timestamp":920059480670,"id":435,"tags":{"url":"/gunbuilder/handguard?_rsc=2s8v8","isTurbopack":false},"startTime":1764552703108,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":920059502251,"id":436,"parentId":435,"tags":{"url":"/gunbuilder/handguard?_rsc=2s8v8","memory.rss":"415039488","memory.heapUsed":"148575784","memory.heapTotal":"168214528"},"startTime":1764552703129,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":195000,"timestamp":920059319397,"id":437,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder/handguard","isPageHidden":true},"startTime":1764552703141,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":19106,"timestamp":920312689202,"id":442,"parentId":441,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764552956315,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":20809,"timestamp":920312689401,"id":447,"parentId":441,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552956316,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":6978,"timestamp":920312704128,"id":452,"parentId":451,"tags":{},"startTime":1764552956330,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":7998,"timestamp":920312703115,"id":451,"parentId":450,"tags":{},"startTime":1764552956329,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":21526,"timestamp":920312702701,"id":450,"parentId":440,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764552956329,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":37490,"timestamp":920312689389,"id":446,"parentId":441,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552956316,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":37474,"timestamp":920312689411,"id":448,"parentId":441,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552956316,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":37570,"timestamp":920312689365,"id":444,"parentId":441,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552956316,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":16149,"timestamp":920312710815,"id":454,"parentId":453,"tags":{},"startTime":1764552956337,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":43824,"timestamp":920312689347,"id":443,"parentId":441,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764552956316,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":24315,"timestamp":920312727060,"id":456,"parentId":455,"tags":{},"startTime":1764552956353,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":24846,"timestamp":920312727009,"id":455,"parentId":453,"tags":{},"startTime":1764552956353,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":4799,"timestamp":920312751890,"id":457,"parentId":453,"tags":{"astUsed":"true"},"startTime":1764552956378,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":47981,"timestamp":920312710478,"id":453,"parentId":449,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764552956337,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":61857,"timestamp":920312700464,"id":449,"parentId":440,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764552956327,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":35,"timestamp":920312762459,"id":458,"parentId":449,"tags":{},"startTime":1764552956389,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":73143,"timestamp":920312689376,"id":445,"parentId":441,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764552956316,"traceId":"45f4427c68eca367"},{"name":"make","duration":74758,"timestamp":920312687775,"id":441,"parentId":440,"tags":{},"startTime":1764552956314,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":709,"timestamp":920312783370,"id":460,"parentId":459,"tags":{},"startTime":1764552956410,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":920312784094,"id":462,"parentId":459,"tags":{},"startTime":1764552956410,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":34,"timestamp":920312784130,"id":463,"parentId":459,"tags":{},"startTime":1764552956410,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":5,"timestamp":920312784192,"id":464,"parentId":459,"tags":{},"startTime":1764552956410,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":920312784224,"id":465,"parentId":459,"tags":{},"startTime":1764552956410,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":375,"timestamp":920312784090,"id":461,"parentId":459,"tags":{},"startTime":1764552956410,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":248,"timestamp":920312784903,"id":466,"parentId":459,"tags":{},"startTime":1764552956411,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1251,"timestamp":920312785158,"id":467,"parentId":459,"tags":{},"startTime":1764552956411,"traceId":"45f4427c68eca367"},{"name":"hash","duration":2594,"timestamp":920312787164,"id":468,"parentId":459,"tags":{},"startTime":1764552956413,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":74,"timestamp":920312789758,"id":469,"parentId":459,"tags":{},"startTime":1764552956416,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":31,"timestamp":920312789827,"id":470,"parentId":459,"tags":{},"startTime":1764552956416,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":2803,"timestamp":920312789861,"id":471,"parentId":459,"tags":{},"startTime":1764552956416,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":192,"timestamp":920312793518,"id":473,"parentId":440,"tags":{},"startTime":1764552956420,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":350,"timestamp":920312793363,"id":472,"parentId":440,"tags":{},"startTime":1764552956420,"traceId":"45f4427c68eca367"},{"name":"seal","duration":11383,"timestamp":920312783109,"id":459,"parentId":440,"tags":{},"startTime":1764552956409,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":109412,"timestamp":920312685093,"id":440,"parentId":438,"tags":{"name":"client"},"startTime":1764552956311,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2457,"timestamp":920312794514,"id":474,"parentId":438,"tags":{},"startTime":1764552956421,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":124063,"timestamp":920312673454,"id":438,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764552956300,"traceId":"45f4427c68eca367"},{"name":"client-success","duration":2,"timestamp":920312799797,"id":477,"parentId":3,"tags":{},"startTime":1764552956426,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":1237,"timestamp":920312803784,"id":481,"parentId":480,"tags":{},"startTime":1764552956430,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":1366,"timestamp":920312803657,"id":480,"parentId":479,"tags":{},"startTime":1764552956430,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":2473,"timestamp":920312803468,"id":479,"parentId":475,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764552956430,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5254,"timestamp":920312801419,"id":478,"parentId":476,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552956428,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2291,"timestamp":920312807599,"id":487,"parentId":486,"tags":{},"startTime":1764552956434,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2373,"timestamp":920312807521,"id":486,"parentId":485,"tags":{},"startTime":1764552956434,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":6368,"timestamp":920312807420,"id":485,"parentId":475,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764552956434,"traceId":"45f4427c68eca367"},{"name":"make","duration":15404,"timestamp":920312799152,"id":476,"parentId":475,"tags":{},"startTime":1764552956425,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":642,"timestamp":920312819752,"id":489,"parentId":488,"tags":{},"startTime":1764552956446,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":920312820410,"id":491,"parentId":488,"tags":{},"startTime":1764552956447,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":643,"timestamp":920312820460,"id":492,"parentId":488,"tags":{},"startTime":1764552956447,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":5,"timestamp":920312821118,"id":493,"parentId":488,"tags":{},"startTime":1764552956447,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":5,"timestamp":920312821135,"id":494,"parentId":488,"tags":{},"startTime":1764552956447,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":930,"timestamp":920312820404,"id":490,"parentId":488,"tags":{},"startTime":1764552956447,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":274,"timestamp":920312821914,"id":495,"parentId":488,"tags":{},"startTime":1764552956448,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1053,"timestamp":920312822194,"id":496,"parentId":488,"tags":{},"startTime":1764552956448,"traceId":"45f4427c68eca367"},{"name":"hash","duration":831,"timestamp":920312823828,"id":497,"parentId":488,"tags":{},"startTime":1764552956450,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":49,"timestamp":920312824659,"id":498,"parentId":488,"tags":{},"startTime":1764552956451,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":27,"timestamp":920312824703,"id":499,"parentId":488,"tags":{},"startTime":1764552956451,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1916,"timestamp":920312824733,"id":500,"parentId":488,"tags":{},"startTime":1764552956451,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":141000,"timestamp":920312674238,"id":501,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder/handguard","isPageHidden":true},"startTime":1764552956454,"traceId":"45f4427c68eca367"},{"name":"seal","duration":8242,"timestamp":920312819528,"id":488,"parentId":475,"tags":{},"startTime":1764552956446,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":29741,"timestamp":920312798799,"id":475,"parentId":439,"tags":{"name":"server"},"startTime":1764552956425,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1355,"timestamp":920312828554,"id":502,"parentId":439,"tags":{},"startTime":1764552956455,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":155692,"timestamp":920312675083,"id":439,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764552956301,"traceId":"45f4427c68eca367"}] -[{"name":"handle-request","duration":21007,"timestamp":920312838974,"id":503,"tags":{"url":"/gunbuilder/handguard?_rsc=2s8v8","isTurbopack":false},"startTime":1764552956465,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":920312860022,"id":504,"parentId":503,"tags":{"url":"/gunbuilder/handguard?_rsc=2s8v8","memory.rss":"435535872","memory.heapUsed":"144645464","memory.heapTotal":"173015040"},"startTime":1764552956486,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":69770,"timestamp":920331185805,"id":505,"tags":{"url":"/gunbuilder/handguard","isTurbopack":false},"startTime":1764552974812,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":920331255609,"id":506,"parentId":505,"tags":{"url":"/gunbuilder/handguard","memory.rss":"436125696","memory.heapUsed":"148884456","memory.heapTotal":"173801472"},"startTime":1764552974882,"traceId":"45f4427c68eca367"},{"name":"client-success","duration":3,"timestamp":920331466804,"id":507,"parentId":3,"tags":{},"startTime":1764552975093,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":13981,"timestamp":920333254295,"id":514,"parentId":512,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552976880,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15455,"timestamp":920333254187,"id":513,"parentId":512,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552976880,"traceId":"45f4427c68eca367"},{"name":"make","duration":22664,"timestamp":920333252110,"id":512,"parentId":511,"tags":{},"startTime":1764552976878,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1461,"timestamp":920333288808,"id":522,"parentId":521,"tags":{},"startTime":1764552976915,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":6,"timestamp":920333290297,"id":524,"parentId":521,"tags":{},"startTime":1764552976917,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1294,"timestamp":920333290321,"id":525,"parentId":521,"tags":{},"startTime":1764552976917,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":8,"timestamp":920333291637,"id":526,"parentId":521,"tags":{},"startTime":1764552976918,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":13,"timestamp":920333291659,"id":527,"parentId":521,"tags":{},"startTime":1764552976918,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1568,"timestamp":920333290285,"id":523,"parentId":521,"tags":{},"startTime":1764552976916,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":405,"timestamp":920333292750,"id":528,"parentId":521,"tags":{},"startTime":1764552976919,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":783,"timestamp":920333293169,"id":529,"parentId":521,"tags":{},"startTime":1764552976919,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1138,"timestamp":920333294756,"id":530,"parentId":521,"tags":{},"startTime":1764552976921,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":126,"timestamp":920333295894,"id":531,"parentId":521,"tags":{},"startTime":1764552976922,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":42,"timestamp":920333296011,"id":532,"parentId":521,"tags":{},"startTime":1764552976922,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":247,"timestamp":920333296058,"id":533,"parentId":521,"tags":{},"startTime":1764552976922,"traceId":"45f4427c68eca367"},{"name":"seal","duration":8936,"timestamp":920333288403,"id":521,"parentId":511,"tags":{},"startTime":1764552976915,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":47730,"timestamp":920333251172,"id":511,"parentId":509,"tags":{"name":"server"},"startTime":1764552976877,"traceId":"45f4427c68eca367"},{"name":"emit","duration":11465,"timestamp":920333298916,"id":534,"parentId":509,"tags":{},"startTime":1764552976925,"traceId":"45f4427c68eca367"},{"name":"compile-path","duration":64275,"timestamp":920333246607,"id":510,"tags":{"trigger":"/gunbuilder/[categoryId]/[partId]","isTurbopack":false},"startTime":1764552976873,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":64633,"timestamp":920333246343,"id":509,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552976873,"traceId":"45f4427c68eca367"}] -[{"name":"handle-request","duration":79311,"timestamp":920333242250,"id":508,"tags":{"url":"/gunbuilder/handguard/20?_rsc=3octl","isTurbopack":false},"startTime":1764552976868,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":920333321594,"id":535,"parentId":508,"tags":{"url":"/gunbuilder/handguard/20?_rsc=3octl","memory.rss":"446644224","memory.heapUsed":"149073632","memory.heapTotal":"187760640"},"startTime":1764552976948,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":5214,"timestamp":920333328642,"id":536,"tags":{"url":"/gunbuilder/handguard/20?_rsc=l6jpd","isTurbopack":false},"startTime":1764552976955,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":920333333877,"id":537,"parentId":536,"tags":{"url":"/gunbuilder/handguard/20?_rsc=l6jpd","memory.rss":"446644224","memory.heapUsed":"150073016","memory.heapTotal":"187760640"},"startTime":1764552976960,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":12484,"timestamp":920335640957,"id":545,"parentId":542,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552979267,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":17837,"timestamp":920335640774,"id":543,"parentId":542,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552979267,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":1518,"timestamp":920335670024,"id":548,"parentId":547,"tags":{},"startTime":1764552979296,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":1868,"timestamp":920335669683,"id":547,"parentId":546,"tags":{},"startTime":1764552979296,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":4176,"timestamp":920335669229,"id":546,"parentId":541,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764552979295,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":32796,"timestamp":920335640942,"id":544,"parentId":542,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764552979267,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":8844,"timestamp":920335679151,"id":560,"parentId":559,"tags":{},"startTime":1764552979305,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":9064,"timestamp":920335678959,"id":559,"parentId":558,"tags":{},"startTime":1764552979305,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":14115,"timestamp":920335678658,"id":558,"parentId":541,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764552979305,"traceId":"45f4427c68eca367"},{"name":"make","duration":55802,"timestamp":920335638226,"id":542,"parentId":541,"tags":{},"startTime":1764552979264,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":889,"timestamp":920335694955,"id":562,"parentId":561,"tags":{},"startTime":1764552979321,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":920335695856,"id":564,"parentId":561,"tags":{},"startTime":1764552979322,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":704,"timestamp":920335695866,"id":565,"parentId":561,"tags":{},"startTime":1764552979322,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":920335696578,"id":566,"parentId":561,"tags":{},"startTime":1764552979323,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":920335696590,"id":567,"parentId":561,"tags":{},"startTime":1764552979323,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":980,"timestamp":920335695853,"id":563,"parentId":561,"tags":{},"startTime":1764552979322,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":208,"timestamp":920335697197,"id":568,"parentId":561,"tags":{},"startTime":1764552979323,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":759,"timestamp":920335697410,"id":569,"parentId":561,"tags":{},"startTime":1764552979324,"traceId":"45f4427c68eca367"},{"name":"hash","duration":608,"timestamp":920335698555,"id":570,"parentId":561,"tags":{},"startTime":1764552979325,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":36,"timestamp":920335699163,"id":571,"parentId":561,"tags":{},"startTime":1764552979325,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":19,"timestamp":920335699197,"id":572,"parentId":561,"tags":{},"startTime":1764552979325,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1450,"timestamp":920335699219,"id":573,"parentId":561,"tags":{},"startTime":1764552979325,"traceId":"45f4427c68eca367"},{"name":"seal","duration":6510,"timestamp":920335694816,"id":561,"parentId":541,"tags":{},"startTime":1764552979321,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":65205,"timestamp":920335637522,"id":541,"parentId":539,"tags":{"name":"server"},"startTime":1764552979264,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1175,"timestamp":920335702742,"id":574,"parentId":539,"tags":{},"startTime":1764552979329,"traceId":"45f4427c68eca367"},{"name":"compile-path","duration":73134,"timestamp":920335631141,"id":540,"tags":{"trigger":"/gunbuilder","isTurbopack":false},"startTime":1764552979257,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":73259,"timestamp":920335631086,"id":539,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764552979257,"traceId":"45f4427c68eca367"}] -[{"name":"handle-request","duration":87327,"timestamp":920335626126,"id":538,"tags":{"url":"/gunbuilder?select=handguard%3A20&_rsc=10x91","isTurbopack":false},"startTime":1764552979252,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":920335713477,"id":575,"parentId":538,"tags":{"url":"/gunbuilder?select=handguard%3A20&_rsc=10x91","memory.rss":"451231744","memory.heapUsed":"159135208","memory.heapTotal":"192135168"},"startTime":1764552979340,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":4875,"timestamp":920335718770,"id":576,"tags":{"url":"/gunbuilder?select=handguard%3A20&_rsc=fp5yz","isTurbopack":false},"startTime":1764552979345,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":920335723659,"id":577,"parentId":576,"tags":{"url":"/gunbuilder?select=handguard%3A20&_rsc=fp5yz","memory.rss":"451231744","memory.heapUsed":"159857456","memory.heapTotal":"192135168"},"startTime":1764552979350,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":4724,"timestamp":920335752071,"id":578,"tags":{"url":"/gunbuilder?_rsc=15cxw","isTurbopack":false},"startTime":1764552979378,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":920335756821,"id":579,"parentId":578,"tags":{"url":"/gunbuilder?_rsc=15cxw","memory.rss":"451231744","memory.heapUsed":"160577656","memory.heapTotal":"192135168"},"startTime":1764552979383,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":5898,"timestamp":920335759002,"id":580,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764552979385,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":920335764926,"id":581,"parentId":580,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"451231744","memory.heapUsed":"161235608","memory.heapTotal":"192135168"},"startTime":1764552979391,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":15802,"timestamp":920337689424,"id":582,"tags":{"url":"/gunbuilder/barrel?_rsc=1jn8g","isTurbopack":false},"startTime":1764552981316,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":920337705314,"id":583,"parentId":582,"tags":{"url":"/gunbuilder/barrel?_rsc=1jn8g","memory.rss":"451461120","memory.heapUsed":"162680120","memory.heapTotal":"192364544"},"startTime":1764552981332,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":10997,"timestamp":920337709561,"id":584,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","isTurbopack":false},"startTime":1764552981336,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":920337720595,"id":585,"parentId":584,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","memory.rss":"451739648","memory.heapUsed":"163388448","memory.heapTotal":"192626688"},"startTime":1764552981347,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":14821,"timestamp":920339305803,"id":586,"tags":{"url":"/gunbuilder?select=barrel%3A15&_rsc=2t5kv","isTurbopack":false},"startTime":1764552982932,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":920339320702,"id":587,"parentId":586,"tags":{"url":"/gunbuilder?select=barrel%3A15&_rsc=2t5kv","memory.rss":"451002368","memory.heapUsed":"145965384","memory.heapTotal":"191774720"},"startTime":1764552982947,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":11088,"timestamp":920339323874,"id":588,"tags":{"url":"/gunbuilder?select=barrel%3A15&_rsc=1s5uq","isTurbopack":false},"startTime":1764552982950,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":920339335037,"id":589,"parentId":588,"tags":{"url":"/gunbuilder?select=barrel%3A15&_rsc=1s5uq","memory.rss":"451002368","memory.heapUsed":"146616344","memory.heapTotal":"191774720"},"startTime":1764552982961,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":14922,"timestamp":920341990310,"id":590,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","isTurbopack":false},"startTime":1764552985616,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":920342005297,"id":591,"parentId":590,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","memory.rss":"451035136","memory.heapUsed":"147490536","memory.heapTotal":"191774720"},"startTime":1764552985631,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":11023,"timestamp":920342009308,"id":592,"tags":{"url":"/gunbuilder/upper?_rsc=17gjd","isTurbopack":false},"startTime":1764552985635,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":920342020387,"id":593,"parentId":592,"tags":{"url":"/gunbuilder/upper?_rsc=17gjd","memory.rss":"451067904","memory.heapUsed":"148361432","memory.heapTotal":"191774720"},"startTime":1764552985647,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":14361,"timestamp":920343165099,"id":594,"tags":{"url":"/gunbuilder/upper/4?_rsc=1d33p","isTurbopack":false},"startTime":1764552986791,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":920343179542,"id":595,"parentId":594,"tags":{"url":"/gunbuilder/upper/4?_rsc=1d33p","memory.rss":"451313664","memory.heapUsed":"149524856","memory.heapTotal":"192004096"},"startTime":1764552986806,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":11957,"timestamp":920343183823,"id":596,"tags":{"url":"/gunbuilder/upper/4?_rsc=3l5ze","isTurbopack":false},"startTime":1764552986810,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":920343195839,"id":597,"parentId":596,"tags":{"url":"/gunbuilder/upper/4?_rsc=3l5ze","memory.rss":"451362816","memory.heapUsed":"150491656","memory.heapTotal":"192004096"},"startTime":1764552986822,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":32509,"timestamp":920569295676,"id":610,"parentId":603,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764553212921,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":33093,"timestamp":920569295576,"id":604,"parentId":603,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764553212921,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":34141,"timestamp":920569295672,"id":609,"parentId":603,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764553212921,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":34166,"timestamp":920569295655,"id":607,"parentId":603,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764553212921,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":50145,"timestamp":920569295659,"id":608,"parentId":603,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764553212921,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":51695,"timestamp":920569295651,"id":606,"parentId":603,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764553212921,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":51836,"timestamp":920569295644,"id":605,"parentId":603,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764553212921,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":74615,"timestamp":920569295680,"id":611,"parentId":603,"tags":{"request":"next-client-pages-loader?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!"},"startTime":1764553212921,"traceId":"45f4427c68eca367"},{"name":"make","duration":75860,"timestamp":920569294466,"id":603,"parentId":602,"tags":{},"startTime":1764553212920,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":935,"timestamp":920569371480,"id":613,"parentId":612,"tags":{},"startTime":1764553212997,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":920569372424,"id":615,"parentId":612,"tags":{},"startTime":1764553212998,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":29,"timestamp":920569372461,"id":616,"parentId":612,"tags":{},"startTime":1764553212998,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":920569372509,"id":617,"parentId":612,"tags":{},"startTime":1764553212998,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":5,"timestamp":920569372536,"id":618,"parentId":612,"tags":{},"startTime":1764553212998,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":415,"timestamp":920569372421,"id":614,"parentId":612,"tags":{},"startTime":1764553212998,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":223,"timestamp":920569373343,"id":619,"parentId":612,"tags":{},"startTime":1764553212999,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":522,"timestamp":920569373572,"id":620,"parentId":612,"tags":{},"startTime":1764553212999,"traceId":"45f4427c68eca367"},{"name":"hash","duration":2634,"timestamp":920569375499,"id":621,"parentId":612,"tags":{},"startTime":1764553213001,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":86,"timestamp":920569378132,"id":622,"parentId":612,"tags":{},"startTime":1764553213004,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":33,"timestamp":920569378214,"id":623,"parentId":612,"tags":{},"startTime":1764553213004,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1662,"timestamp":920569378249,"id":624,"parentId":612,"tags":{},"startTime":1764553213004,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":225,"timestamp":920569380884,"id":626,"parentId":602,"tags":{},"startTime":1764553213006,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":375,"timestamp":920569380737,"id":625,"parentId":602,"tags":{},"startTime":1764553213006,"traceId":"45f4427c68eca367"},{"name":"seal","duration":10859,"timestamp":920569371234,"id":612,"parentId":602,"tags":{},"startTime":1764553212997,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":88859,"timestamp":920569293258,"id":602,"parentId":599,"tags":{"name":"client"},"startTime":1764553212919,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2354,"timestamp":920569382137,"id":627,"parentId":599,"tags":{},"startTime":1764553213008,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":95061,"timestamp":920569290138,"id":599,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764553212916,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":18393,"timestamp":920569389221,"id":632,"parentId":629,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764553213015,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":18403,"timestamp":920569389223,"id":633,"parentId":629,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764553213015,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":18758,"timestamp":920569389218,"id":631,"parentId":629,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764553213015,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":23600,"timestamp":920569389191,"id":630,"parentId":629,"tags":{"request":"next-app-loader?name=app%2F_not-found%2Fpage&page=%2F_not-found%2Fpage&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764553213015,"traceId":"45f4427c68eca367"},{"name":"make","duration":29345,"timestamp":920569386919,"id":629,"parentId":628,"tags":{},"startTime":1764553213012,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1034,"timestamp":920569417569,"id":646,"parentId":645,"tags":{},"startTime":1764553213043,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":920569418613,"id":648,"parentId":645,"tags":{},"startTime":1764553213044,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1038,"timestamp":920569418649,"id":649,"parentId":645,"tags":{},"startTime":1764553213044,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":920569419698,"id":650,"parentId":645,"tags":{},"startTime":1764553213045,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":1,"timestamp":920569419709,"id":651,"parentId":645,"tags":{},"startTime":1764553213045,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1263,"timestamp":920569418610,"id":647,"parentId":645,"tags":{},"startTime":1764553213044,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":159,"timestamp":920569420273,"id":652,"parentId":645,"tags":{},"startTime":1764553213046,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":374,"timestamp":920569420443,"id":653,"parentId":645,"tags":{},"startTime":1764553213046,"traceId":"45f4427c68eca367"},{"name":"hash","duration":873,"timestamp":920569421263,"id":654,"parentId":645,"tags":{},"startTime":1764553213047,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":53,"timestamp":920569422136,"id":655,"parentId":645,"tags":{},"startTime":1764553213048,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":24,"timestamp":920569422185,"id":656,"parentId":645,"tags":{},"startTime":1764553213048,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":167,"timestamp":920569422212,"id":657,"parentId":645,"tags":{},"startTime":1764553213048,"traceId":"45f4427c68eca367"},{"name":"seal","duration":6255,"timestamp":920569417389,"id":645,"parentId":628,"tags":{},"startTime":1764553213043,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":39484,"timestamp":920569386595,"id":628,"parentId":601,"tags":{"name":"server"},"startTime":1764553213012,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2178,"timestamp":920569426113,"id":658,"parentId":601,"tags":{},"startTime":1764553213052,"traceId":"45f4427c68eca367"},{"name":"compile-path","duration":138613,"timestamp":920569290192,"id":600,"tags":{"trigger":"/_not-found","isTurbopack":false},"startTime":1764553212916,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":138332,"timestamp":920569290797,"id":601,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764553212916,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":33,"timestamp":920569727310,"id":659,"parentId":3,"tags":{},"startTime":1764553213353,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":9000,"timestamp":920569726657,"id":660,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder/upper/4","isPageHidden":false},"startTime":1764553213361,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":12450,"timestamp":920575025789,"id":661,"tags":{"url":"/gunbuilder?select=upper%3A4&_rsc=1e1yf","isTurbopack":false},"startTime":1764553218651,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":920575038288,"id":662,"parentId":661,"tags":{"url":"/gunbuilder?select=upper%3A4&_rsc=1e1yf","memory.rss":"428032000","memory.heapUsed":"151679872","memory.heapTotal":"174145536"},"startTime":1764553218664,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":9165,"timestamp":920575040590,"id":663,"tags":{"url":"/gunbuilder?select=upper%3A4&_rsc=1ceyv","isTurbopack":false},"startTime":1764553218666,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":920575049800,"id":664,"parentId":663,"tags":{"url":"/gunbuilder?select=upper%3A4&_rsc=1ceyv","memory.rss":"428703744","memory.heapUsed":"152358800","memory.heapTotal":"175194112"},"startTime":1764553218675,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":9705,"timestamp":920575062967,"id":665,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764553218688,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":920575072712,"id":666,"parentId":665,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"429342720","memory.heapUsed":"153006152","memory.heapTotal":"175718400"},"startTime":1764553218698,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":16533,"timestamp":921458024238,"id":677,"parentId":670,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554101654,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":18003,"timestamp":921458024028,"id":671,"parentId":670,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764554101654,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":7177,"timestamp":921458039169,"id":681,"parentId":680,"tags":{},"startTime":1764554101669,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":8050,"timestamp":921458038316,"id":680,"parentId":679,"tags":{},"startTime":1764554101668,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":18496,"timestamp":921458037881,"id":679,"parentId":669,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764554101668,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":34553,"timestamp":921458024217,"id":675,"parentId":670,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554101654,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":34818,"timestamp":921458024197,"id":673,"parentId":670,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554101654,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":14554,"timestamp":921458044497,"id":683,"parentId":682,"tags":{},"startTime":1764554101674,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":39532,"timestamp":921458024229,"id":676,"parentId":670,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554101654,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":39746,"timestamp":921458024179,"id":672,"parentId":670,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764554101654,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":17887,"timestamp":921458059110,"id":685,"parentId":684,"tags":{},"startTime":1764554101689,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":18222,"timestamp":921458059088,"id":684,"parentId":682,"tags":{},"startTime":1764554101689,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":4047,"timestamp":921458077344,"id":686,"parentId":682,"tags":{"astUsed":"true"},"startTime":1764554101707,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":38975,"timestamp":921458044079,"id":682,"parentId":678,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764554101674,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":51426,"timestamp":921458034836,"id":678,"parentId":669,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764554101664,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":33,"timestamp":921458086412,"id":687,"parentId":678,"tags":{},"startTime":1764554101716,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":62259,"timestamp":921458024207,"id":674,"parentId":670,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554101654,"traceId":"45f4427c68eca367"},{"name":"make","duration":63424,"timestamp":921458023053,"id":670,"parentId":669,"tags":{},"startTime":1764554101653,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":849,"timestamp":921458109301,"id":689,"parentId":688,"tags":{},"startTime":1764554101739,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":5,"timestamp":921458110169,"id":691,"parentId":688,"tags":{},"startTime":1764554101740,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":36,"timestamp":921458110215,"id":692,"parentId":688,"tags":{},"startTime":1764554101740,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":5,"timestamp":921458110286,"id":693,"parentId":688,"tags":{},"startTime":1764554101740,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":921458110321,"id":694,"parentId":688,"tags":{},"startTime":1764554101740,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":463,"timestamp":921458110161,"id":690,"parentId":688,"tags":{},"startTime":1764554101740,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":347,"timestamp":921458111086,"id":695,"parentId":688,"tags":{},"startTime":1764554101741,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1601,"timestamp":921458111447,"id":696,"parentId":688,"tags":{},"startTime":1764554101741,"traceId":"45f4427c68eca367"},{"name":"hash","duration":3464,"timestamp":921458113909,"id":697,"parentId":688,"tags":{},"startTime":1764554101744,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":152,"timestamp":921458117372,"id":698,"parentId":688,"tags":{},"startTime":1764554101747,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":66,"timestamp":921458117517,"id":699,"parentId":688,"tags":{},"startTime":1764554101747,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":4142,"timestamp":921458117586,"id":700,"parentId":688,"tags":{},"startTime":1764554101747,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":224,"timestamp":921458122788,"id":702,"parentId":669,"tags":{},"startTime":1764554101752,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":397,"timestamp":921458122620,"id":701,"parentId":669,"tags":{},"startTime":1764554101752,"traceId":"45f4427c68eca367"},{"name":"seal","duration":14875,"timestamp":921458109059,"id":688,"parentId":669,"tags":{},"startTime":1764554101739,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":103161,"timestamp":921458020794,"id":669,"parentId":667,"tags":{"name":"client"},"startTime":1764554101650,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2672,"timestamp":921458123970,"id":703,"parentId":667,"tags":{},"startTime":1764554101754,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":116320,"timestamp":921458011051,"id":667,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764554101641,"traceId":"45f4427c68eca367"},{"name":"client-success","duration":3,"timestamp":921458130006,"id":706,"parentId":3,"tags":{},"startTime":1764554101760,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":6248,"timestamp":921458130839,"id":709,"parentId":705,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554101760,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":6769,"timestamp":921458130804,"id":707,"parentId":705,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554101760,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":1307,"timestamp":921458136605,"id":712,"parentId":711,"tags":{},"startTime":1764554101766,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":1468,"timestamp":921458136448,"id":711,"parentId":710,"tags":{},"startTime":1764554101766,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":3027,"timestamp":921458136141,"id":710,"parentId":704,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764554101766,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":9200,"timestamp":921458130836,"id":708,"parentId":705,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554101760,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2364,"timestamp":921458141803,"id":724,"parentId":723,"tags":{},"startTime":1764554101771,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2448,"timestamp":921458141726,"id":723,"parentId":722,"tags":{},"startTime":1764554101771,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":6606,"timestamp":921458141610,"id":722,"parentId":704,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764554101771,"traceId":"45f4427c68eca367"},{"name":"make","duration":20082,"timestamp":921458129259,"id":705,"parentId":704,"tags":{},"startTime":1764554101759,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":137000,"timestamp":921458011920,"id":725,"parentId":3,"tags":{"updatedModules":["[project]/node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&page=%2F_not-found%2Fpage!","[project]/node_modules/next/dist/client/components/not-found-error.js","[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764554101780,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1096,"timestamp":921458155616,"id":727,"parentId":726,"tags":{},"startTime":1764554101785,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":921458156728,"id":729,"parentId":726,"tags":{},"startTime":1764554101786,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":958,"timestamp":921458156805,"id":730,"parentId":726,"tags":{},"startTime":1764554101786,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":921458157781,"id":731,"parentId":726,"tags":{},"startTime":1764554101787,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":921458157794,"id":732,"parentId":726,"tags":{},"startTime":1764554101787,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1262,"timestamp":921458156724,"id":728,"parentId":726,"tags":{},"startTime":1764554101786,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":269,"timestamp":921458158488,"id":733,"parentId":726,"tags":{},"startTime":1764554101788,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1187,"timestamp":921458158764,"id":734,"parentId":726,"tags":{},"startTime":1764554101788,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1087,"timestamp":921458160733,"id":735,"parentId":726,"tags":{},"startTime":1764554101790,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":77,"timestamp":921458161820,"id":736,"parentId":726,"tags":{},"startTime":1764554101791,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":52,"timestamp":921458161892,"id":737,"parentId":726,"tags":{},"startTime":1764554101792,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1365,"timestamp":921458161947,"id":738,"parentId":726,"tags":{},"startTime":1764554101792,"traceId":"45f4427c68eca367"},{"name":"seal","duration":8977,"timestamp":921458155387,"id":726,"parentId":704,"tags":{},"startTime":1764554101785,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":45420,"timestamp":921458128935,"id":704,"parentId":668,"tags":{"name":"server"},"startTime":1764554101759,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2153,"timestamp":921458174385,"id":739,"parentId":668,"tags":{},"startTime":1764554101804,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":165592,"timestamp":921458012013,"id":668,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764554101642,"traceId":"45f4427c68eca367"}] -[{"name":"handle-request","duration":19818,"timestamp":921458180751,"id":740,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764554101810,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":921458200601,"id":741,"parentId":740,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"439648256","memory.heapUsed":"150287240","memory.heapTotal":"172277760"},"startTime":1764554101830,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":18334,"timestamp":921535414719,"id":752,"parentId":745,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554179044,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":19968,"timestamp":921535414586,"id":746,"parentId":745,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764554179044,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":5955,"timestamp":921535431499,"id":756,"parentId":755,"tags":{},"startTime":1764554179061,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":6874,"timestamp":921535430589,"id":755,"parentId":754,"tags":{},"startTime":1764554179060,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":19564,"timestamp":921535430138,"id":754,"parentId":744,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764554179060,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":36746,"timestamp":921535414708,"id":750,"parentId":745,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554179044,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":36813,"timestamp":921535414696,"id":748,"parentId":745,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554179044,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":14425,"timestamp":921535437108,"id":758,"parentId":757,"tags":{},"startTime":1764554179067,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":42000,"timestamp":921535414714,"id":751,"parentId":745,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554179044,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":42177,"timestamp":921535414687,"id":747,"parentId":745,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764554179044,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":19536,"timestamp":921535451578,"id":760,"parentId":759,"tags":{},"startTime":1764554179081,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":19922,"timestamp":921535451559,"id":759,"parentId":757,"tags":{},"startTime":1764554179081,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":4043,"timestamp":921535471519,"id":761,"parentId":757,"tags":{"astUsed":"true"},"startTime":1764554179101,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":40690,"timestamp":921535436632,"id":757,"parentId":753,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764554179066,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":53956,"timestamp":921535426938,"id":753,"parentId":744,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764554179056,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":40,"timestamp":921535481078,"id":762,"parentId":753,"tags":{},"startTime":1764554179111,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":66445,"timestamp":921535414702,"id":749,"parentId":745,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554179044,"traceId":"45f4427c68eca367"},{"name":"make","duration":67143,"timestamp":921535414016,"id":745,"parentId":744,"tags":{},"startTime":1764554179044,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":724,"timestamp":921535502792,"id":764,"parentId":763,"tags":{},"startTime":1764554179132,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":921535503531,"id":766,"parentId":763,"tags":{},"startTime":1764554179133,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":33,"timestamp":921535503569,"id":767,"parentId":763,"tags":{},"startTime":1764554179133,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":921535503630,"id":768,"parentId":763,"tags":{},"startTime":1764554179133,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":921535503657,"id":769,"parentId":763,"tags":{},"startTime":1764554179133,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":358,"timestamp":921535503528,"id":765,"parentId":763,"tags":{},"startTime":1764554179133,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":244,"timestamp":921535504278,"id":770,"parentId":763,"tags":{},"startTime":1764554179134,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1379,"timestamp":921535504526,"id":771,"parentId":763,"tags":{},"startTime":1764554179134,"traceId":"45f4427c68eca367"},{"name":"hash","duration":2836,"timestamp":921535507082,"id":772,"parentId":763,"tags":{},"startTime":1764554179137,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":118,"timestamp":921535509918,"id":773,"parentId":763,"tags":{},"startTime":1764554179139,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":49,"timestamp":921535510028,"id":774,"parentId":763,"tags":{},"startTime":1764554179140,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1956,"timestamp":921535510080,"id":775,"parentId":763,"tags":{},"startTime":1764554179140,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":249,"timestamp":921535513064,"id":777,"parentId":744,"tags":{},"startTime":1764554179143,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":412,"timestamp":921535512904,"id":776,"parentId":744,"tags":{},"startTime":1764554179142,"traceId":"45f4427c68eca367"},{"name":"seal","duration":11657,"timestamp":921535502554,"id":763,"parentId":744,"tags":{},"startTime":1764554179132,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":101663,"timestamp":921535412566,"id":744,"parentId":742,"tags":{"name":"client"},"startTime":1764554179042,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2150,"timestamp":921535514242,"id":778,"parentId":742,"tags":{},"startTime":1764554179144,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":114133,"timestamp":921535403064,"id":742,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764554179033,"traceId":"45f4427c68eca367"},{"name":"client-success","duration":13,"timestamp":921535520373,"id":781,"parentId":3,"tags":{},"startTime":1764554179150,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4235,"timestamp":921535522808,"id":783,"parentId":780,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554179152,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4240,"timestamp":921535522811,"id":784,"parentId":780,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554179152,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":1131,"timestamp":921535526676,"id":787,"parentId":786,"tags":{},"startTime":1764554179156,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":1274,"timestamp":921535526535,"id":786,"parentId":785,"tags":{},"startTime":1764554179156,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":2727,"timestamp":921535526289,"id":785,"parentId":779,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764554179156,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":125000,"timestamp":921535403337,"id":788,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764554179159,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":6609,"timestamp":921535522767,"id":782,"parentId":780,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554179152,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2424,"timestamp":921535530758,"id":800,"parentId":799,"tags":{},"startTime":1764554179160,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2510,"timestamp":921535530676,"id":799,"parentId":798,"tags":{},"startTime":1764554179160,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":6666,"timestamp":921535530544,"id":798,"parentId":779,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764554179160,"traceId":"45f4427c68eca367"},{"name":"make","duration":20030,"timestamp":921535518743,"id":780,"parentId":779,"tags":{},"startTime":1764554179148,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":980,"timestamp":921535560725,"id":802,"parentId":801,"tags":{},"startTime":1764554179190,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":921535561722,"id":804,"parentId":801,"tags":{},"startTime":1764554179191,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":847,"timestamp":921535561792,"id":805,"parentId":801,"tags":{},"startTime":1764554179191,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":921535562657,"id":806,"parentId":801,"tags":{},"startTime":1764554179192,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":6,"timestamp":921535562669,"id":807,"parentId":801,"tags":{},"startTime":1764554179192,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1165,"timestamp":921535561719,"id":803,"parentId":801,"tags":{},"startTime":1764554179191,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":251,"timestamp":921535563360,"id":808,"parentId":801,"tags":{},"startTime":1764554179193,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":476,"timestamp":921535563615,"id":809,"parentId":801,"tags":{},"startTime":1764554179193,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1006,"timestamp":921535564647,"id":810,"parentId":801,"tags":{},"startTime":1764554179194,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":51,"timestamp":921535565653,"id":811,"parentId":801,"tags":{},"startTime":1764554179195,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":48,"timestamp":921535565696,"id":812,"parentId":801,"tags":{},"startTime":1764554179195,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":89,"timestamp":921535565746,"id":813,"parentId":801,"tags":{},"startTime":1764554179195,"traceId":"45f4427c68eca367"},{"name":"seal","duration":6261,"timestamp":921535560525,"id":801,"parentId":779,"tags":{},"startTime":1764554179190,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":49365,"timestamp":921535518478,"id":779,"parentId":743,"tags":{"name":"server"},"startTime":1764554179148,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1653,"timestamp":921535567863,"id":814,"parentId":743,"tags":{},"startTime":1764554179197,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":166808,"timestamp":921535403583,"id":743,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764554179033,"traceId":"45f4427c68eca367"}] -[{"name":"handle-request","duration":19106,"timestamp":921535573773,"id":815,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764554179203,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":921535592906,"id":816,"parentId":815,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"441892864","memory.heapUsed":"147303880","memory.heapTotal":"168591360"},"startTime":1764554179222,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":22826,"timestamp":921542626107,"id":817,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","isTurbopack":false},"startTime":1764554186256,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":921542648985,"id":818,"parentId":817,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","memory.rss":"440745984","memory.heapUsed":"143689416","memory.heapTotal":"170835968"},"startTime":1764554186279,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":10488,"timestamp":921546291603,"id":819,"tags":{"url":"/gunbuilder?select=barrel%3A12&_rsc=2t5kv","isTurbopack":false},"startTime":1764554189921,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":921546302140,"id":820,"parentId":819,"tags":{"url":"/gunbuilder?select=barrel%3A12&_rsc=2t5kv","memory.rss":"440762368","memory.heapUsed":"144370432","memory.heapTotal":"171098112"},"startTime":1764554189932,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":9214,"timestamp":921546305548,"id":821,"tags":{"url":"/gunbuilder?select=barrel%3A12&_rsc=1il2k","isTurbopack":false},"startTime":1764554189935,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":921546314809,"id":822,"parentId":821,"tags":{"url":"/gunbuilder?select=barrel%3A12&_rsc=1il2k","memory.rss":"440762368","memory.heapUsed":"145020288","memory.heapTotal":"171098112"},"startTime":1764554189944,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":10354,"timestamp":921546325592,"id":823,"tags":{"url":"/gunbuilder?_rsc=1ylgw","isTurbopack":false},"startTime":1764554189955,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":921546336001,"id":824,"parentId":823,"tags":{"url":"/gunbuilder?_rsc=1ylgw","memory.rss":"440762368","memory.heapUsed":"145603864","memory.heapTotal":"171098112"},"startTime":1764554189966,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":14491,"timestamp":921548672023,"id":825,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","isTurbopack":false},"startTime":1764554192302,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":921548686576,"id":826,"parentId":825,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","memory.rss":"440762368","memory.heapUsed":"146429112","memory.heapTotal":"171098112"},"startTime":1764554192316,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":10919,"timestamp":921549628659,"id":827,"tags":{"url":"/gunbuilder?select=upper%3A4&_rsc=1d33p","isTurbopack":false},"startTime":1764554193258,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":921549639648,"id":828,"parentId":827,"tags":{"url":"/gunbuilder?select=upper%3A4&_rsc=1d33p","memory.rss":"440762368","memory.heapUsed":"147061080","memory.heapTotal":"171098112"},"startTime":1764554193269,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":14270,"timestamp":921552096588,"id":829,"tags":{"url":"/gunbuilder/handguard?_rsc=1jn8g","isTurbopack":false},"startTime":1764554195726,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":3,"timestamp":921552110954,"id":830,"parentId":829,"tags":{"url":"/gunbuilder/handguard?_rsc=1jn8g","memory.rss":"440762368","memory.heapUsed":"147862320","memory.heapTotal":"171098112"},"startTime":1764554195740,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":11794,"timestamp":921553112169,"id":831,"tags":{"url":"/gunbuilder?select=handguard%3A20&_rsc=1wjnh","isTurbopack":false},"startTime":1764554196742,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":921553124006,"id":832,"parentId":831,"tags":{"url":"/gunbuilder?select=handguard%3A20&_rsc=1wjnh","memory.rss":"440778752","memory.heapUsed":"148493264","memory.heapTotal":"171098112"},"startTime":1764554196754,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15183,"timestamp":921678810282,"id":838,"parentId":836,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554322440,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":16468,"timestamp":921678810160,"id":837,"parentId":836,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554322439,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2180,"timestamp":921678824684,"id":842,"parentId":841,"tags":{},"startTime":1764554322454,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2448,"timestamp":921678824419,"id":841,"parentId":840,"tags":{},"startTime":1764554322454,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":5353,"timestamp":921678823984,"id":840,"parentId":835,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764554322453,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":19650,"timestamp":921678810297,"id":839,"parentId":836,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554322440,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":3028,"timestamp":921678833081,"id":854,"parentId":853,"tags":{},"startTime":1764554322462,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":3112,"timestamp":921678833002,"id":853,"parentId":852,"tags":{},"startTime":1764554322462,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":9566,"timestamp":921678832877,"id":852,"parentId":835,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764554322462,"traceId":"45f4427c68eca367"},{"name":"make","duration":37803,"timestamp":921678805790,"id":836,"parentId":835,"tags":{},"startTime":1764554322435,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1217,"timestamp":921678864563,"id":856,"parentId":855,"tags":{},"startTime":1764554322494,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":921678865796,"id":858,"parentId":855,"tags":{},"startTime":1764554322495,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":854,"timestamp":921678865810,"id":859,"parentId":855,"tags":{},"startTime":1764554322495,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":921678866680,"id":860,"parentId":855,"tags":{},"startTime":1764554322496,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":921678866693,"id":861,"parentId":855,"tags":{},"startTime":1764554322496,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1079,"timestamp":921678865792,"id":857,"parentId":855,"tags":{},"startTime":1764554322495,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":229,"timestamp":921678867336,"id":862,"parentId":855,"tags":{},"startTime":1764554322497,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1075,"timestamp":921678867570,"id":863,"parentId":855,"tags":{},"startTime":1764554322497,"traceId":"45f4427c68eca367"},{"name":"hash","duration":845,"timestamp":921678869178,"id":864,"parentId":855,"tags":{},"startTime":1764554322498,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":51,"timestamp":921678870023,"id":865,"parentId":855,"tags":{},"startTime":1764554322499,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":25,"timestamp":921678870069,"id":866,"parentId":855,"tags":{},"startTime":1764554322499,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1440,"timestamp":921678870097,"id":867,"parentId":855,"tags":{},"startTime":1764554322499,"traceId":"45f4427c68eca367"},{"name":"seal","duration":8136,"timestamp":921678864347,"id":855,"parentId":835,"tags":{},"startTime":1764554322494,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":69934,"timestamp":921678803605,"id":835,"parentId":833,"tags":{"name":"server"},"startTime":1764554322433,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1447,"timestamp":921678873552,"id":868,"parentId":833,"tags":{},"startTime":1764554322503,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":81051,"timestamp":921678794161,"id":833,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764554322423,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2725,"timestamp":921678878780,"id":877,"parentId":870,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554322508,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2977,"timestamp":921678878732,"id":871,"parentId":870,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764554322508,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4249,"timestamp":921678878775,"id":875,"parentId":870,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554322508,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":618,"timestamp":921678882414,"id":883,"parentId":882,"tags":{},"startTime":1764554322512,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":6339,"timestamp":921678878767,"id":872,"parentId":870,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764554322508,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":6341,"timestamp":921678878771,"id":873,"parentId":870,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554322508,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":4156,"timestamp":921678881041,"id":881,"parentId":880,"tags":{},"startTime":1764554322510,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":4282,"timestamp":921678880915,"id":880,"parentId":879,"tags":{},"startTime":1764554322510,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":9617,"timestamp":921678880816,"id":879,"parentId":869,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764554322510,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":19520,"timestamp":921678883052,"id":885,"parentId":884,"tags":{},"startTime":1764554322512,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":19745,"timestamp":921678883044,"id":884,"parentId":882,"tags":{},"startTime":1764554322512,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":2192,"timestamp":921678902800,"id":886,"parentId":882,"tags":{"astUsed":"true"},"startTime":1764554322532,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":24068,"timestamp":921678882341,"id":882,"parentId":878,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764554322512,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":27862,"timestamp":921678878778,"id":876,"parentId":870,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554322508,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":27251,"timestamp":921678880609,"id":878,"parentId":869,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764554322510,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":11,"timestamp":921678907930,"id":887,"parentId":878,"tags":{},"startTime":1764554322537,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":29186,"timestamp":921678878773,"id":874,"parentId":870,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554322508,"traceId":"45f4427c68eca367"},{"name":"make","duration":31949,"timestamp":921678876018,"id":870,"parentId":869,"tags":{},"startTime":1764554322505,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":767,"timestamp":921678913033,"id":889,"parentId":888,"tags":{},"startTime":1764554322542,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":921678913811,"id":891,"parentId":888,"tags":{},"startTime":1764554322543,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":21,"timestamp":921678913822,"id":892,"parentId":888,"tags":{},"startTime":1764554322543,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":921678913851,"id":893,"parentId":888,"tags":{},"startTime":1764554322543,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":921678913863,"id":894,"parentId":888,"tags":{},"startTime":1764554322543,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":272,"timestamp":921678913807,"id":890,"parentId":888,"tags":{},"startTime":1764554322543,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":209,"timestamp":921678914541,"id":895,"parentId":888,"tags":{},"startTime":1764554322544,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1010,"timestamp":921678914755,"id":896,"parentId":888,"tags":{},"startTime":1764554322544,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1654,"timestamp":921678916356,"id":897,"parentId":888,"tags":{},"startTime":1764554322546,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":66,"timestamp":921678918009,"id":898,"parentId":888,"tags":{},"startTime":1764554322547,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":25,"timestamp":921678918072,"id":899,"parentId":888,"tags":{},"startTime":1764554322547,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":2330,"timestamp":921678918100,"id":900,"parentId":888,"tags":{},"startTime":1764554322547,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":48,"timestamp":921678920906,"id":902,"parentId":869,"tags":{},"startTime":1764554322550,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":83,"timestamp":921678920874,"id":901,"parentId":869,"tags":{},"startTime":1764554322550,"traceId":"45f4427c68eca367"},{"name":"seal","duration":8969,"timestamp":921678912812,"id":888,"parentId":869,"tags":{},"startTime":1764554322542,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":45946,"timestamp":921678875848,"id":869,"parentId":834,"tags":{"name":"client"},"startTime":1764554322505,"traceId":"45f4427c68eca367"},{"name":"emit","duration":7537,"timestamp":921678921804,"id":903,"parentId":834,"tags":{},"startTime":1764554322551,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":135405,"timestamp":921678794500,"id":834,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764554322424,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":4,"timestamp":921678931393,"id":904,"parentId":3,"tags":{},"startTime":1764554322561,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":10188,"timestamp":921678933537,"id":905,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764554322563,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":921678943743,"id":906,"parentId":905,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"435814400","memory.heapUsed":"151582048","memory.heapTotal":"179044352"},"startTime":1764554322573,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":158000,"timestamp":921678794858,"id":907,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764554322582,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15158,"timestamp":921707487817,"id":913,"parentId":911,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554351117,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":16304,"timestamp":921707487745,"id":912,"parentId":911,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554351117,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2331,"timestamp":921707501803,"id":917,"parentId":916,"tags":{},"startTime":1764554351131,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2613,"timestamp":921707501524,"id":916,"parentId":915,"tags":{},"startTime":1764554351131,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":5775,"timestamp":921707501041,"id":915,"parentId":910,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764554351130,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":19697,"timestamp":921707487824,"id":914,"parentId":911,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554351117,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":4235,"timestamp":921707511552,"id":929,"parentId":928,"tags":{},"startTime":1764554351141,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":4431,"timestamp":921707511365,"id":928,"parentId":927,"tags":{},"startTime":1764554351141,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":13082,"timestamp":921707511163,"id":927,"parentId":910,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764554351140,"traceId":"45f4427c68eca367"},{"name":"make","duration":40948,"timestamp":921707484540,"id":911,"parentId":910,"tags":{},"startTime":1764554351114,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1499,"timestamp":921707527468,"id":931,"parentId":930,"tags":{},"startTime":1764554351157,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":5,"timestamp":921707528982,"id":933,"parentId":930,"tags":{},"startTime":1764554351158,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1357,"timestamp":921707529000,"id":934,"parentId":930,"tags":{},"startTime":1764554351158,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":7,"timestamp":921707530371,"id":935,"parentId":930,"tags":{},"startTime":1764554351160,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":6,"timestamp":921707530390,"id":936,"parentId":930,"tags":{},"startTime":1764554351160,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1772,"timestamp":921707528978,"id":932,"parentId":930,"tags":{},"startTime":1764554351158,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":374,"timestamp":921707531425,"id":937,"parentId":930,"tags":{},"startTime":1764554351161,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1685,"timestamp":921707531805,"id":938,"parentId":930,"tags":{},"startTime":1764554351161,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1005,"timestamp":921707534146,"id":939,"parentId":930,"tags":{},"startTime":1764554351163,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":68,"timestamp":921707535151,"id":940,"parentId":930,"tags":{},"startTime":1764554351164,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":37,"timestamp":921707535213,"id":941,"parentId":930,"tags":{},"startTime":1764554351164,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1692,"timestamp":921707535254,"id":942,"parentId":930,"tags":{},"startTime":1764554351165,"traceId":"45f4427c68eca367"},{"name":"seal","duration":11186,"timestamp":921707526761,"id":930,"parentId":910,"tags":{},"startTime":1764554351156,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":55486,"timestamp":921707483892,"id":910,"parentId":908,"tags":{"name":"server"},"startTime":1764554351113,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2434,"timestamp":921707539399,"id":943,"parentId":908,"tags":{},"startTime":1764554351169,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":68251,"timestamp":921707473958,"id":908,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764554351103,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2707,"timestamp":921707548194,"id":952,"parentId":945,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554351177,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3092,"timestamp":921707548152,"id":946,"parentId":945,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764554351177,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5356,"timestamp":921707548189,"id":950,"parentId":945,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554351177,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":1095,"timestamp":921707552459,"id":958,"parentId":957,"tags":{},"startTime":1764554351182,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":9115,"timestamp":921707548180,"id":947,"parentId":945,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764554351177,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":9115,"timestamp":921707548184,"id":948,"parentId":945,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554351177,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":7339,"timestamp":921707550061,"id":956,"parentId":955,"tags":{},"startTime":1764554351179,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":7446,"timestamp":921707549955,"id":955,"parentId":954,"tags":{},"startTime":1764554351179,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":12155,"timestamp":921707549867,"id":954,"parentId":944,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764554351179,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":23813,"timestamp":921707553589,"id":960,"parentId":959,"tags":{},"startTime":1764554351183,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":24093,"timestamp":921707553573,"id":959,"parentId":957,"tags":{},"startTime":1764554351183,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":5020,"timestamp":921707577756,"id":961,"parentId":957,"tags":{"astUsed":"true"},"startTime":1764554351207,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":32212,"timestamp":921707552391,"id":957,"parentId":953,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764554351182,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":41756,"timestamp":921707548192,"id":951,"parentId":945,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554351177,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":42276,"timestamp":921707549638,"id":953,"parentId":944,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764554351179,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":17,"timestamp":921707592006,"id":962,"parentId":953,"tags":{},"startTime":1764554351221,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":43847,"timestamp":921707548187,"id":949,"parentId":945,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554351177,"traceId":"45f4427c68eca367"},{"name":"make","duration":48577,"timestamp":921707543467,"id":945,"parentId":944,"tags":{},"startTime":1764554351173,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":760,"timestamp":921707593099,"id":964,"parentId":963,"tags":{},"startTime":1764554351222,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":4,"timestamp":921707593870,"id":966,"parentId":963,"tags":{},"startTime":1764554351223,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":24,"timestamp":921707593882,"id":967,"parentId":963,"tags":{},"startTime":1764554351223,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":921707593914,"id":968,"parentId":963,"tags":{},"startTime":1764554351223,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":921707593928,"id":969,"parentId":963,"tags":{},"startTime":1764554351223,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":359,"timestamp":921707593867,"id":965,"parentId":963,"tags":{},"startTime":1764554351223,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":181,"timestamp":921707594568,"id":970,"parentId":963,"tags":{},"startTime":1764554351224,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":724,"timestamp":921707594753,"id":971,"parentId":963,"tags":{},"startTime":1764554351224,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1564,"timestamp":921707595977,"id":972,"parentId":963,"tags":{},"startTime":1764554351225,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":55,"timestamp":921707597541,"id":973,"parentId":963,"tags":{},"startTime":1764554351227,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":28,"timestamp":921707597592,"id":974,"parentId":963,"tags":{},"startTime":1764554351227,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":2043,"timestamp":921707597622,"id":975,"parentId":963,"tags":{},"startTime":1764554351227,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":39,"timestamp":921707600051,"id":977,"parentId":944,"tags":{},"startTime":1764554351229,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":71,"timestamp":921707600020,"id":976,"parentId":944,"tags":{},"startTime":1764554351229,"traceId":"45f4427c68eca367"},{"name":"seal","duration":7854,"timestamp":921707592868,"id":963,"parentId":944,"tags":{},"startTime":1764554351222,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":57555,"timestamp":921707543178,"id":944,"parentId":909,"tags":{"name":"client"},"startTime":1764554351172,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2231,"timestamp":921707600739,"id":978,"parentId":909,"tags":{},"startTime":1764554351230,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":128689,"timestamp":921707474795,"id":909,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764554351104,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":2,"timestamp":921707605002,"id":979,"parentId":3,"tags":{},"startTime":1764554351234,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":9794,"timestamp":921707606961,"id":980,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764554351236,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":921707616771,"id":981,"parentId":980,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"426754048","memory.heapUsed":"157865296","memory.heapTotal":"174882816"},"startTime":1764554351246,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":146000,"timestamp":921707475349,"id":982,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764554351252,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":11762,"timestamp":921722208345,"id":988,"parentId":986,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554365838,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":12814,"timestamp":921722208278,"id":987,"parentId":986,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554365838,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2046,"timestamp":921722219213,"id":992,"parentId":991,"tags":{},"startTime":1764554365848,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2416,"timestamp":921722218846,"id":991,"parentId":990,"tags":{},"startTime":1764554365848,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":3965,"timestamp":921722218522,"id":990,"parentId":985,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"rsc"},"startTime":1764554365848,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":14729,"timestamp":921722208356,"id":989,"parentId":986,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554365838,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":3944,"timestamp":921722225724,"id":1004,"parentId":1003,"tags":{},"startTime":1764554365855,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":4079,"timestamp":921722225593,"id":1003,"parentId":1002,"tags":{},"startTime":1764554365855,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":9100,"timestamp":921722225447,"id":1002,"parentId":985,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"ssr"},"startTime":1764554365855,"traceId":"45f4427c68eca367"},{"name":"make","duration":32955,"timestamp":921722202696,"id":986,"parentId":985,"tags":{},"startTime":1764554365832,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1011,"timestamp":921722237271,"id":1006,"parentId":1005,"tags":{},"startTime":1764554365867,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":4,"timestamp":921722238289,"id":1008,"parentId":1005,"tags":{},"startTime":1764554365868,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1268,"timestamp":921722238299,"id":1009,"parentId":1005,"tags":{},"startTime":1764554365868,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":921722239582,"id":1010,"parentId":1005,"tags":{},"startTime":1764554365869,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":921722239596,"id":1011,"parentId":1005,"tags":{},"startTime":1764554365869,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1551,"timestamp":921722238286,"id":1007,"parentId":1005,"tags":{},"startTime":1764554365868,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":211,"timestamp":921722240294,"id":1012,"parentId":1005,"tags":{},"startTime":1764554365870,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":540,"timestamp":921722240509,"id":1013,"parentId":1005,"tags":{},"startTime":1764554365870,"traceId":"45f4427c68eca367"},{"name":"hash","duration":884,"timestamp":921722241532,"id":1014,"parentId":1005,"tags":{},"startTime":1764554365871,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":44,"timestamp":921722242416,"id":1015,"parentId":1005,"tags":{},"startTime":1764554365872,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":28,"timestamp":921722242457,"id":1016,"parentId":1005,"tags":{},"startTime":1764554365872,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":70,"timestamp":921722242488,"id":1017,"parentId":1005,"tags":{},"startTime":1764554365872,"traceId":"45f4427c68eca367"},{"name":"seal","duration":7364,"timestamp":921722237073,"id":1005,"parentId":985,"tags":{},"startTime":1764554365866,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":43380,"timestamp":921722201970,"id":985,"parentId":983,"tags":{"name":"server"},"startTime":1764554365831,"traceId":"45f4427c68eca367"},{"name":"emit","duration":886,"timestamp":921722245360,"id":1018,"parentId":983,"tags":{},"startTime":1764554365875,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":54772,"timestamp":921722191682,"id":983,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764554365821,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2540,"timestamp":921722250662,"id":1027,"parentId":1020,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554365880,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2876,"timestamp":921722250617,"id":1021,"parentId":1020,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764554365880,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4395,"timestamp":921722250656,"id":1025,"parentId":1020,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554365880,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":816,"timestamp":921722254245,"id":1033,"parentId":1032,"tags":{},"startTime":1764554365883,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5794,"timestamp":921722250645,"id":1022,"parentId":1020,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764554365880,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5791,"timestamp":921722250650,"id":1023,"parentId":1020,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554365880,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":4055,"timestamp":921722252478,"id":1031,"parentId":1030,"tags":{},"startTime":1764554365882,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":4146,"timestamp":921722252388,"id":1030,"parentId":1029,"tags":{},"startTime":1764554365882,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":7682,"timestamp":921722252292,"id":1029,"parentId":1019,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx","layer":"app-pages-browser"},"startTime":1764554365882,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":16679,"timestamp":921722255093,"id":1035,"parentId":1034,"tags":{},"startTime":1764554365884,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":16795,"timestamp":921722255079,"id":1034,"parentId":1032,"tags":{},"startTime":1764554365884,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":2651,"timestamp":921722271888,"id":1036,"parentId":1032,"tags":{"astUsed":"true"},"startTime":1764554365901,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":20818,"timestamp":921722254203,"id":1032,"parentId":1028,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764554365883,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":24579,"timestamp":921722250660,"id":1026,"parentId":1020,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554365880,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":24280,"timestamp":921722252073,"id":1028,"parentId":1019,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764554365881,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":22,"timestamp":921722278054,"id":1037,"parentId":1028,"tags":{},"startTime":1764554365907,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":27438,"timestamp":921722250653,"id":1024,"parentId":1020,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554365880,"traceId":"45f4427c68eca367"},{"name":"make","duration":30740,"timestamp":921722247361,"id":1020,"parentId":1019,"tags":{},"startTime":1764554365877,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":729,"timestamp":921722279090,"id":1039,"parentId":1038,"tags":{},"startTime":1764554365908,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":921722279829,"id":1041,"parentId":1038,"tags":{},"startTime":1764554365909,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":21,"timestamp":921722279839,"id":1042,"parentId":1038,"tags":{},"startTime":1764554365909,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":921722279868,"id":1043,"parentId":1038,"tags":{},"startTime":1764554365909,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":921722279878,"id":1044,"parentId":1038,"tags":{},"startTime":1764554365909,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":193,"timestamp":921722279825,"id":1040,"parentId":1038,"tags":{},"startTime":1764554365909,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":213,"timestamp":921722280505,"id":1045,"parentId":1038,"tags":{},"startTime":1764554365910,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":542,"timestamp":921722280723,"id":1046,"parentId":1038,"tags":{},"startTime":1764554365910,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1343,"timestamp":921722281949,"id":1047,"parentId":1038,"tags":{},"startTime":1764554365911,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":88,"timestamp":921722283292,"id":1048,"parentId":1038,"tags":{},"startTime":1764554365913,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":29,"timestamp":921722283374,"id":1049,"parentId":1038,"tags":{},"startTime":1764554365913,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1172,"timestamp":921722283406,"id":1050,"parentId":1038,"tags":{},"startTime":1764554365913,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":29,"timestamp":921722284927,"id":1052,"parentId":1019,"tags":{},"startTime":1764554365914,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":64,"timestamp":921722284894,"id":1051,"parentId":1019,"tags":{},"startTime":1764554365914,"traceId":"45f4427c68eca367"},{"name":"seal","duration":6673,"timestamp":921722278855,"id":1038,"parentId":1019,"tags":{},"startTime":1764554365908,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":38363,"timestamp":921722247179,"id":1019,"parentId":984,"tags":{"name":"client"},"startTime":1764554365876,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1763,"timestamp":921722285552,"id":1053,"parentId":984,"tags":{},"startTime":1764554365915,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":95953,"timestamp":921722191862,"id":984,"parentId":3,"tags":{"trigger":"app/gunbuilder/page.tsx"},"startTime":1764554365821,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":2,"timestamp":921722289191,"id":1054,"parentId":3,"tags":{},"startTime":1764554365918,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":11270,"timestamp":921722291099,"id":1055,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764554365920,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":921722302389,"id":1056,"parentId":1055,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"443039744","memory.heapUsed":"152288144","memory.heapTotal":"191119360"},"startTime":1764554365932,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":114000,"timestamp":921722192895,"id":1057,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":true},"startTime":1764554365936,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":40407,"timestamp":921772075319,"id":1065,"parentId":1062,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554415704,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":40413,"timestamp":921772075324,"id":1066,"parentId":1062,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554415704,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":41448,"timestamp":921772075170,"id":1063,"parentId":1062,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554415704,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":64867,"timestamp":921772075306,"id":1064,"parentId":1062,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554415704,"traceId":"45f4427c68eca367"},{"name":"make","duration":77230,"timestamp":921772070463,"id":1062,"parentId":1061,"tags":{},"startTime":1764554415700,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1145,"timestamp":921772148890,"id":1081,"parentId":1080,"tags":{},"startTime":1764554415778,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":4,"timestamp":921772150046,"id":1083,"parentId":1080,"tags":{},"startTime":1764554415779,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":936,"timestamp":921772150060,"id":1084,"parentId":1080,"tags":{},"startTime":1764554415779,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":9,"timestamp":921772151005,"id":1085,"parentId":1080,"tags":{},"startTime":1764554415780,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":921772151035,"id":1086,"parentId":1080,"tags":{},"startTime":1764554415780,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1258,"timestamp":921772150044,"id":1082,"parentId":1080,"tags":{},"startTime":1764554415779,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":265,"timestamp":921772151834,"id":1087,"parentId":1080,"tags":{},"startTime":1764554415781,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":460,"timestamp":921772152103,"id":1088,"parentId":1080,"tags":{},"startTime":1764554415781,"traceId":"45f4427c68eca367"},{"name":"hash","duration":735,"timestamp":921772153523,"id":1089,"parentId":1080,"tags":{},"startTime":1764554415783,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":53,"timestamp":921772154259,"id":1090,"parentId":1080,"tags":{},"startTime":1764554415783,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":22,"timestamp":921772154305,"id":1091,"parentId":1080,"tags":{},"startTime":1764554415783,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":156,"timestamp":921772154329,"id":1092,"parentId":1080,"tags":{},"startTime":1764554415784,"traceId":"45f4427c68eca367"},{"name":"seal","duration":6504,"timestamp":921772148666,"id":1080,"parentId":1061,"tags":{},"startTime":1764554415778,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":86627,"timestamp":921772069613,"id":1061,"parentId":1059,"tags":{"name":"server"},"startTime":1764554415699,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1182,"timestamp":921772156253,"id":1093,"parentId":1059,"tags":{},"startTime":1764554415785,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":96071,"timestamp":921772061620,"id":1059,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764554415691,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2491,"timestamp":921772163018,"id":1102,"parentId":1095,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554415792,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2725,"timestamp":921772162974,"id":1096,"parentId":1095,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764554415792,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3500,"timestamp":921772163016,"id":1101,"parentId":1095,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554415792,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3508,"timestamp":921772163012,"id":1099,"parentId":1095,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554415792,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4495,"timestamp":921772163013,"id":1100,"parentId":1095,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554415792,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5813,"timestamp":921772163006,"id":1097,"parentId":1095,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764554415792,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5813,"timestamp":921772163009,"id":1098,"parentId":1095,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554415792,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":10301,"timestamp":921772163020,"id":1103,"parentId":1095,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554415792,"traceId":"45f4427c68eca367"},{"name":"make","duration":14692,"timestamp":921772158638,"id":1095,"parentId":1094,"tags":{},"startTime":1764554415788,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":919,"timestamp":921772174311,"id":1105,"parentId":1104,"tags":{},"startTime":1764554415803,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":921772175245,"id":1107,"parentId":1104,"tags":{},"startTime":1764554415804,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":15,"timestamp":921772175255,"id":1108,"parentId":1104,"tags":{},"startTime":1764554415804,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":2,"timestamp":921772175281,"id":1109,"parentId":1104,"tags":{},"startTime":1764554415804,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":5,"timestamp":921772175290,"id":1110,"parentId":1104,"tags":{},"startTime":1764554415804,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":347,"timestamp":921772175241,"id":1106,"parentId":1104,"tags":{},"startTime":1764554415804,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":231,"timestamp":921772176085,"id":1111,"parentId":1104,"tags":{},"startTime":1764554415805,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":557,"timestamp":921772176321,"id":1112,"parentId":1104,"tags":{},"startTime":1764554415805,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1850,"timestamp":921772177690,"id":1113,"parentId":1104,"tags":{},"startTime":1764554415807,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":74,"timestamp":921772179540,"id":1114,"parentId":1104,"tags":{},"startTime":1764554415809,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":26,"timestamp":921772179610,"id":1115,"parentId":1104,"tags":{},"startTime":1764554415809,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1198,"timestamp":921772179639,"id":1116,"parentId":1104,"tags":{},"startTime":1764554415809,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":78,"timestamp":921772181357,"id":1118,"parentId":1094,"tags":{},"startTime":1764554415811,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":138,"timestamp":921772181300,"id":1117,"parentId":1094,"tags":{},"startTime":1764554415810,"traceId":"45f4427c68eca367"},{"name":"seal","duration":8313,"timestamp":921772174024,"id":1104,"parentId":1094,"tags":{},"startTime":1764554415803,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":23910,"timestamp":921772158438,"id":1094,"parentId":1079,"tags":{"name":"client"},"startTime":1764554415788,"traceId":"45f4427c68eca367"},{"name":"emit","duration":6132,"timestamp":921772182388,"id":1119,"parentId":1079,"tags":{},"startTime":1764554415812,"traceId":"45f4427c68eca367"},{"name":"compile-path","duration":126765,"timestamp":921772062119,"id":1060,"tags":{"trigger":"/gunbuilder/build","isTurbopack":false},"startTime":1764554415691,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":48072,"timestamp":921772141179,"id":1079,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764554415770,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":4,"timestamp":921772190092,"id":1120,"parentId":3,"tags":{},"startTime":1764554415819,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":145907,"timestamp":921772054669,"id":1058,"tags":{"url":"/gunbuilder/build?_rsc=1acsq","isTurbopack":false},"startTime":1764554415684,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":921772200598,"id":1121,"parentId":1058,"tags":{"url":"/gunbuilder/build?_rsc=1acsq","memory.rss":"436060160","memory.heapUsed":"157140336","memory.heapTotal":"180273152"},"startTime":1764554415830,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":64000,"timestamp":921772141968,"id":1122,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":false},"startTime":1764554415835,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":4790,"timestamp":921772206072,"id":1123,"tags":{"url":"/gunbuilder/build?_rsc=1bjq3","isTurbopack":false},"startTime":1764554415835,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":921772210873,"id":1124,"parentId":1123,"tags":{"url":"/gunbuilder/build?_rsc=1bjq3","memory.rss":"436060160","memory.heapUsed":"158024792","memory.heapTotal":"180535296"},"startTime":1764554415840,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":17404,"timestamp":922051752034,"id":1130,"parentId":1128,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554695381,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":17400,"timestamp":922051752060,"id":1132,"parentId":1128,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554695381,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":18518,"timestamp":922051751929,"id":1129,"parentId":1128,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554695381,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2248,"timestamp":922051768559,"id":1135,"parentId":1134,"tags":{},"startTime":1764554695397,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2424,"timestamp":922051768386,"id":1134,"parentId":1133,"tags":{},"startTime":1764554695397,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":6746,"timestamp":922051767937,"id":1133,"parentId":1127,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx","layer":"rsc"},"startTime":1764554695397,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":23259,"timestamp":922051752051,"id":1131,"parentId":1128,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554695381,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":4617,"timestamp":922051777982,"id":1150,"parentId":1149,"tags":{},"startTime":1764554695407,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":4701,"timestamp":922051777903,"id":1149,"parentId":1148,"tags":{},"startTime":1764554695407,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":16200,"timestamp":922051777820,"id":1148,"parentId":1127,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx","layer":"ssr"},"startTime":1764554695407,"traceId":"45f4427c68eca367"},{"name":"make","duration":47297,"timestamp":922051747423,"id":1128,"parentId":1127,"tags":{},"startTime":1764554695376,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1355,"timestamp":922051818225,"id":1152,"parentId":1151,"tags":{},"startTime":1764554695447,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":16,"timestamp":922051819594,"id":1154,"parentId":1151,"tags":{},"startTime":1764554695448,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1269,"timestamp":922051819648,"id":1155,"parentId":1151,"tags":{},"startTime":1764554695448,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":922051820949,"id":1156,"parentId":1151,"tags":{},"startTime":1764554695450,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":4,"timestamp":922051820979,"id":1157,"parentId":1151,"tags":{},"startTime":1764554695450,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1628,"timestamp":922051819591,"id":1153,"parentId":1151,"tags":{},"startTime":1764554695448,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":249,"timestamp":922051821737,"id":1158,"parentId":1151,"tags":{},"startTime":1764554695450,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1253,"timestamp":922051821991,"id":1159,"parentId":1151,"tags":{},"startTime":1764554695451,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1574,"timestamp":922051823873,"id":1160,"parentId":1151,"tags":{},"startTime":1764554695453,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":84,"timestamp":922051825446,"id":1161,"parentId":1151,"tags":{},"startTime":1764554695454,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":31,"timestamp":922051825526,"id":1162,"parentId":1151,"tags":{},"startTime":1764554695454,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":2012,"timestamp":922051825559,"id":1163,"parentId":1151,"tags":{},"startTime":1764554695454,"traceId":"45f4427c68eca367"},{"name":"seal","duration":10500,"timestamp":922051818017,"id":1151,"parentId":1127,"tags":{},"startTime":1764554695447,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":83446,"timestamp":922051746396,"id":1127,"parentId":1125,"tags":{"name":"server"},"startTime":1764554695375,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1416,"timestamp":922051829856,"id":1164,"parentId":1125,"tags":{},"startTime":1764554695459,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":97041,"timestamp":922051734551,"id":1125,"parentId":3,"tags":{"trigger":"app/gunbuilder/build/page.tsx"},"startTime":1764554695363,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2569,"timestamp":922051837050,"id":1173,"parentId":1166,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554695466,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2807,"timestamp":922051837006,"id":1167,"parentId":1166,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764554695466,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3319,"timestamp":922051837048,"id":1172,"parentId":1166,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554695466,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4961,"timestamp":922051837045,"id":1171,"parentId":1166,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554695466,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":1468,"timestamp":922051840572,"id":1180,"parentId":1179,"tags":{},"startTime":1764554695469,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":6819,"timestamp":922051839058,"id":1178,"parentId":1177,"tags":{},"startTime":1764554695468,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":6888,"timestamp":922051838990,"id":1177,"parentId":1176,"tags":{},"startTime":1764554695468,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":12933,"timestamp":922051838932,"id":1176,"parentId":1165,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx","layer":"app-pages-browser"},"startTime":1764554695468,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15038,"timestamp":922051837038,"id":1168,"parentId":1166,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764554695466,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15036,"timestamp":922051837042,"id":1169,"parentId":1166,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554695466,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":25698,"timestamp":922051842083,"id":1182,"parentId":1181,"tags":{},"startTime":1764554695471,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":26071,"timestamp":922051842066,"id":1181,"parentId":1179,"tags":{},"startTime":1764554695471,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":3893,"timestamp":922051868162,"id":1183,"parentId":1179,"tags":{"astUsed":"true"},"startTime":1764554695497,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":32936,"timestamp":922051840447,"id":1179,"parentId":1175,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764554695469,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":44998,"timestamp":922051838385,"id":1175,"parentId":1165,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764554695467,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":31,"timestamp":922051883543,"id":1184,"parentId":1175,"tags":{},"startTime":1764554695512,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":46630,"timestamp":922051837044,"id":1170,"parentId":1166,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554695466,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":47830,"timestamp":922051837052,"id":1174,"parentId":1166,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554695466,"traceId":"45f4427c68eca367"},{"name":"make","duration":51779,"timestamp":922051833109,"id":1166,"parentId":1165,"tags":{},"startTime":1764554695462,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":645,"timestamp":922051885685,"id":1186,"parentId":1185,"tags":{},"startTime":1764554695514,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":922051886337,"id":1188,"parentId":1185,"tags":{},"startTime":1764554695515,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":19,"timestamp":922051886363,"id":1189,"parentId":1185,"tags":{},"startTime":1764554695515,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":922051886387,"id":1190,"parentId":1185,"tags":{},"startTime":1764554695515,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":1,"timestamp":922051886394,"id":1191,"parentId":1185,"tags":{},"startTime":1764554695515,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":309,"timestamp":922051886334,"id":1187,"parentId":1185,"tags":{},"startTime":1764554695515,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":177,"timestamp":922051887015,"id":1192,"parentId":1185,"tags":{},"startTime":1764554695516,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":853,"timestamp":922051887196,"id":1193,"parentId":1185,"tags":{},"startTime":1764554695516,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1922,"timestamp":922051888650,"id":1194,"parentId":1185,"tags":{},"startTime":1764554695517,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":80,"timestamp":922051890572,"id":1195,"parentId":1185,"tags":{},"startTime":1764554695519,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":34,"timestamp":922051890638,"id":1196,"parentId":1185,"tags":{},"startTime":1764554695519,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":2598,"timestamp":922051890674,"id":1197,"parentId":1185,"tags":{},"startTime":1764554695519,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":171,"timestamp":922051893944,"id":1199,"parentId":1165,"tags":{},"startTime":1764554695523,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":255,"timestamp":922051893864,"id":1198,"parentId":1165,"tags":{},"startTime":1764554695523,"traceId":"45f4427c68eca367"},{"name":"seal","duration":9316,"timestamp":922051885505,"id":1185,"parentId":1165,"tags":{},"startTime":1764554695514,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":62257,"timestamp":922051832574,"id":1165,"parentId":1126,"tags":{"name":"client"},"startTime":1764554695461,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2939,"timestamp":922051894840,"id":1200,"parentId":1126,"tags":{},"startTime":1764554695524,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":163872,"timestamp":922051734838,"id":1126,"parentId":3,"tags":{"trigger":"app/gunbuilder/build/page.tsx"},"startTime":1764554695364,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":2,"timestamp":922051899975,"id":1201,"parentId":3,"tags":{},"startTime":1764554695529,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":15770,"timestamp":922051901913,"id":1202,"tags":{"url":"/gunbuilder?_rsc=1kvbu","isTurbopack":false},"startTime":1764554695531,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":922051917698,"id":1203,"parentId":1202,"tags":{"url":"/gunbuilder?_rsc=1kvbu","memory.rss":"440303616","memory.heapUsed":"153234448","memory.heapTotal":"180649984"},"startTime":1764554695546,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":197000,"timestamp":922051735217,"id":1204,"parentId":3,"tags":{"updatedModules":["[project]/node_modules/next/dist/build/polyfills/process.js","[project]/app/gunbuilder/[categoryId]/page.tsx","[project]/app/gunbuilder/[categoryId]/[partId]/data.ts","[project]/app/gunbuilder/[categoryId]/[partId]/page.tsx","[project]/app/gunbuilder/page.tsx","[project]/node_modules/next/dist/compiled/process/browser.js","[project]/app/gunbuilder/build/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764554695561,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":17874,"timestamp":922073323369,"id":1205,"tags":{"url":"/gunbuilder/build?_rsc=1acsq","isTurbopack":false},"startTime":1764554716952,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":922073341327,"id":1206,"parentId":1205,"tags":{"url":"/gunbuilder/build?_rsc=1acsq","memory.rss":"439795712","memory.heapUsed":"154955832","memory.heapTotal":"181075968"},"startTime":1764554716970,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":8570,"timestamp":922080321918,"id":1207,"tags":{"url":"/gunbuilder?_rsc=4yi2l","isTurbopack":false},"startTime":1764554723951,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":922080330565,"id":1208,"parentId":1207,"tags":{"url":"/gunbuilder?_rsc=4yi2l","memory.rss":"439795712","memory.heapUsed":"155573984","memory.heapTotal":"181075968"},"startTime":1764554723959,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":18568,"timestamp":922090549654,"id":1209,"tags":{"url":"/gunbuilder/barrel?_rsc=1jn8g","isTurbopack":false},"startTime":1764554734178,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":922090568300,"id":1210,"parentId":1209,"tags":{"url":"/gunbuilder/barrel?_rsc=1jn8g","memory.rss":"439549952","memory.heapUsed":"157087008","memory.heapTotal":"181567488"},"startTime":1764554734197,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":7898,"timestamp":922092491877,"id":1211,"tags":{"url":"/gunbuilder?select=barrel%3A27&_rsc=2t5kv","isTurbopack":false},"startTime":1764554736121,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":922092499819,"id":1212,"parentId":1211,"tags":{"url":"/gunbuilder?select=barrel%3A27&_rsc=2t5kv","memory.rss":"439549952","memory.heapUsed":"157736392","memory.heapTotal":"181567488"},"startTime":1764554736129,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":8992,"timestamp":922092502717,"id":1213,"tags":{"url":"/gunbuilder?select=barrel%3A27&_rsc=1ligc","isTurbopack":false},"startTime":1764554736131,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":922092511765,"id":1214,"parentId":1213,"tags":{"url":"/gunbuilder?select=barrel%3A27&_rsc=1ligc","memory.rss":"439713792","memory.heapUsed":"158400264","memory.heapTotal":"181567488"},"startTime":1764554736140,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":9911,"timestamp":922103098941,"id":1215,"tags":{"url":"/gunbuilder?select=barrel%3A192&_rsc=2t5kv","isTurbopack":false},"startTime":1764554746728,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":922103108916,"id":1216,"parentId":1215,"tags":{"url":"/gunbuilder?select=barrel%3A192&_rsc=2t5kv","memory.rss":"437501952","memory.heapUsed":"159038744","memory.heapTotal":"182353920"},"startTime":1764554746738,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":9551,"timestamp":922103111570,"id":1217,"tags":{"url":"/gunbuilder?select=barrel%3A192&_rsc=syxlg","isTurbopack":false},"startTime":1764554746740,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":3,"timestamp":922103121173,"id":1218,"parentId":1217,"tags":{"url":"/gunbuilder?select=barrel%3A192&_rsc=syxlg","memory.rss":"438140928","memory.heapUsed":"159690696","memory.heapTotal":"182878208"},"startTime":1764554746750,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":14009,"timestamp":922104706156,"id":1219,"tags":{"url":"/gunbuilder/build?_rsc=1a0sa","isTurbopack":false},"startTime":1764554748335,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":922104720210,"id":1220,"parentId":1219,"tags":{"url":"/gunbuilder/build?_rsc=1a0sa","memory.rss":"439615488","memory.heapUsed":"151581600","memory.heapTotal":"185139200"},"startTime":1764554748349,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":10450,"timestamp":922138340276,"id":1231,"parentId":1224,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554781969,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":11490,"timestamp":922138339983,"id":1225,"parentId":1224,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764554781969,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":13410,"timestamp":922138340266,"id":1230,"parentId":1224,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554781969,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15937,"timestamp":922138340250,"id":1229,"parentId":1224,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554781969,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":16065,"timestamp":922138340190,"id":1227,"parentId":1224,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554781969,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":2145,"timestamp":922138354125,"id":1238,"parentId":1237,"tags":{},"startTime":1764554781983,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":12153,"timestamp":922138349095,"id":1236,"parentId":1235,"tags":{},"startTime":1764554781978,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":12382,"timestamp":922138348871,"id":1235,"parentId":1234,"tags":{},"startTime":1764554781977,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":22820,"timestamp":922138348661,"id":1234,"parentId":1223,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx","layer":"app-pages-browser"},"startTime":1764554781977,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":32111,"timestamp":922138340109,"id":1226,"parentId":1224,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764554781969,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":32968,"timestamp":922138340286,"id":1232,"parentId":1224,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554781969,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":34794,"timestamp":922138356320,"id":1240,"parentId":1239,"tags":{},"startTime":1764554781985,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":35240,"timestamp":922138356298,"id":1239,"parentId":1237,"tags":{},"startTime":1764554781985,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":4936,"timestamp":922138391559,"id":1241,"parentId":1237,"tags":{"astUsed":"true"},"startTime":1764554782020,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":43168,"timestamp":922138353990,"id":1237,"parentId":1233,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764554781983,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":50755,"timestamp":922138348137,"id":1233,"parentId":1223,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764554781977,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":20,"timestamp":922138398991,"id":1242,"parentId":1233,"tags":{},"startTime":1764554782028,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":58799,"timestamp":922138340234,"id":1228,"parentId":1224,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764554781969,"traceId":"45f4427c68eca367"},{"name":"make","duration":59538,"timestamp":922138339506,"id":1224,"parentId":1223,"tags":{},"startTime":1764554781968,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1214,"timestamp":922138408715,"id":1244,"parentId":1243,"tags":{},"startTime":1764554782037,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":9,"timestamp":922138409964,"id":1246,"parentId":1243,"tags":{},"startTime":1764554782039,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":36,"timestamp":922138409986,"id":1247,"parentId":1243,"tags":{},"startTime":1764554782039,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":5,"timestamp":922138410038,"id":1248,"parentId":1243,"tags":{},"startTime":1764554782039,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":922138410056,"id":1249,"parentId":1243,"tags":{},"startTime":1764554782039,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":387,"timestamp":922138409956,"id":1245,"parentId":1243,"tags":{},"startTime":1764554782039,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":306,"timestamp":922138410882,"id":1250,"parentId":1243,"tags":{},"startTime":1764554782039,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1359,"timestamp":922138411194,"id":1251,"parentId":1243,"tags":{},"startTime":1764554782040,"traceId":"45f4427c68eca367"},{"name":"hash","duration":2037,"timestamp":922138413471,"id":1252,"parentId":1243,"tags":{},"startTime":1764554782042,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":90,"timestamp":922138415507,"id":1253,"parentId":1243,"tags":{},"startTime":1764554782044,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":36,"timestamp":922138415591,"id":1254,"parentId":1243,"tags":{},"startTime":1764554782044,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":3287,"timestamp":922138415630,"id":1255,"parentId":1243,"tags":{},"startTime":1764554782044,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":53,"timestamp":922138419431,"id":1257,"parentId":1223,"tags":{},"startTime":1764554782048,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":94,"timestamp":922138419395,"id":1256,"parentId":1223,"tags":{},"startTime":1764554782048,"traceId":"45f4427c68eca367"},{"name":"seal","duration":17985,"timestamp":922138408449,"id":1243,"parentId":1223,"tags":{},"startTime":1764554782037,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":87548,"timestamp":922138338908,"id":1223,"parentId":1221,"tags":{"name":"client"},"startTime":1764554781968,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2932,"timestamp":922138426474,"id":1258,"parentId":1221,"tags":{},"startTime":1764554782055,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":99462,"timestamp":922138330369,"id":1221,"parentId":3,"tags":{"trigger":"app/gunbuilder/build/page.tsx"},"startTime":1764554781959,"traceId":"45f4427c68eca367"},{"name":"client-success","duration":1,"timestamp":922138432399,"id":1261,"parentId":3,"tags":{},"startTime":1764554782061,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4041,"timestamp":922138434084,"id":1263,"parentId":1260,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554782063,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4044,"timestamp":922138434087,"id":1264,"parentId":1260,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554782063,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4043,"timestamp":922138434092,"id":1265,"parentId":1260,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554782063,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":1069,"timestamp":922138437725,"id":1268,"parentId":1267,"tags":{},"startTime":1764554782066,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":1133,"timestamp":922138437663,"id":1267,"parentId":1266,"tags":{},"startTime":1764554782066,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":2058,"timestamp":922138437482,"id":1266,"parentId":1259,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx","layer":"rsc"},"startTime":1764554782066,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5818,"timestamp":922138434045,"id":1262,"parentId":1260,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764554782063,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2631,"timestamp":922138441343,"id":1283,"parentId":1282,"tags":{},"startTime":1764554782070,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2685,"timestamp":922138441295,"id":1282,"parentId":1281,"tags":{},"startTime":1764554782070,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":5907,"timestamp":922138441212,"id":1281,"parentId":1259,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx","layer":"ssr"},"startTime":1764554782070,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":115000,"timestamp":922138331546,"id":1284,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/build/page.tsx"],"page":"/gunbuilder/build","isPageHidden":true},"startTime":1764554782076,"traceId":"45f4427c68eca367"},{"name":"make","duration":15886,"timestamp":922138431788,"id":1260,"parentId":1259,"tags":{},"startTime":1764554782060,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1330,"timestamp":922138452467,"id":1286,"parentId":1285,"tags":{},"startTime":1764554782081,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":922138453812,"id":1288,"parentId":1285,"tags":{},"startTime":1764554782082,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1001,"timestamp":922138453824,"id":1289,"parentId":1285,"tags":{},"startTime":1764554782082,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":922138454836,"id":1290,"parentId":1285,"tags":{},"startTime":1764554782083,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":922138454847,"id":1291,"parentId":1285,"tags":{},"startTime":1764554782083,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1233,"timestamp":922138453808,"id":1287,"parentId":1285,"tags":{},"startTime":1764554782082,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":233,"timestamp":922138455497,"id":1292,"parentId":1285,"tags":{},"startTime":1764554782084,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":896,"timestamp":922138455736,"id":1293,"parentId":1285,"tags":{},"startTime":1764554782084,"traceId":"45f4427c68eca367"},{"name":"hash","duration":593,"timestamp":922138457112,"id":1294,"parentId":1285,"tags":{},"startTime":1764554782086,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":57,"timestamp":922138457705,"id":1295,"parentId":1285,"tags":{},"startTime":1764554782086,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":20,"timestamp":922138457758,"id":1296,"parentId":1285,"tags":{},"startTime":1764554782086,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1493,"timestamp":922138457781,"id":1297,"parentId":1285,"tags":{},"startTime":1764554782086,"traceId":"45f4427c68eca367"},{"name":"seal","duration":7940,"timestamp":922138452249,"id":1285,"parentId":1259,"tags":{},"startTime":1764554782081,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":30158,"timestamp":922138431480,"id":1259,"parentId":1222,"tags":{"name":"server"},"startTime":1764554782060,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1697,"timestamp":922138461665,"id":1298,"parentId":1222,"tags":{},"startTime":1764554782090,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":132994,"timestamp":922138330844,"id":1222,"parentId":3,"tags":{"trigger":"app/gunbuilder/build/page.tsx"},"startTime":1764554781959,"traceId":"45f4427c68eca367"}] -[{"name":"handle-request","duration":10472,"timestamp":922138473444,"id":1299,"tags":{"url":"/gunbuilder/build?_rsc=1ure6","isTurbopack":false},"startTime":1764554782102,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":922138483933,"id":1300,"parentId":1299,"tags":{"url":"/gunbuilder/build?_rsc=1ure6","memory.rss":"461176832","memory.heapUsed":"155655192","memory.heapTotal":"193069056"},"startTime":1764554782113,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":22239,"timestamp":922173591287,"id":1301,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764554817220,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":922173613592,"id":1302,"parentId":1301,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"400752640","memory.heapUsed":"140156136","memory.heapTotal":"146210816"},"startTime":1764554817242,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":20819,"timestamp":922174973263,"id":1303,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","isTurbopack":false},"startTime":1764554818602,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":922174994162,"id":1304,"parentId":1303,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","memory.rss":"402096128","memory.heapUsed":"140835560","memory.heapTotal":"147226624"},"startTime":1764554818623,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15541,"timestamp":922472342537,"id":1310,"parentId":1308,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555115975,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15549,"timestamp":922472342548,"id":1311,"parentId":1308,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555115975,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15550,"timestamp":922472342556,"id":1312,"parentId":1308,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555115975,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2060,"timestamp":922472357197,"id":1315,"parentId":1314,"tags":{},"startTime":1764555115989,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2223,"timestamp":922472357039,"id":1314,"parentId":1313,"tags":{},"startTime":1764555115989,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":5600,"timestamp":922472356576,"id":1313,"parentId":1307,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764555115989,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":51635,"timestamp":922472342429,"id":1309,"parentId":1308,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555115975,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2733,"timestamp":922472408252,"id":1330,"parentId":1329,"tags":{},"startTime":1764555116040,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2863,"timestamp":922472408133,"id":1329,"parentId":1328,"tags":{},"startTime":1764555116040,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":10867,"timestamp":922472407958,"id":1328,"parentId":1307,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764555116040,"traceId":"45f4427c68eca367"},{"name":"make","duration":80588,"timestamp":922472339131,"id":1308,"parentId":1307,"tags":{},"startTime":1764555115971,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1597,"timestamp":922472421032,"id":1332,"parentId":1331,"tags":{},"startTime":1764555116053,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":922472422645,"id":1334,"parentId":1331,"tags":{},"startTime":1764555116055,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":947,"timestamp":922472422687,"id":1335,"parentId":1331,"tags":{},"startTime":1764555116055,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":5,"timestamp":922472423672,"id":1336,"parentId":1331,"tags":{},"startTime":1764555116056,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":922472423703,"id":1337,"parentId":1331,"tags":{},"startTime":1764555116056,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1251,"timestamp":922472422642,"id":1333,"parentId":1331,"tags":{},"startTime":1764555116055,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":209,"timestamp":922472424267,"id":1338,"parentId":1331,"tags":{},"startTime":1764555116056,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1057,"timestamp":922472424480,"id":1339,"parentId":1331,"tags":{},"startTime":1764555116057,"traceId":"45f4427c68eca367"},{"name":"hash","duration":908,"timestamp":922472426114,"id":1340,"parentId":1331,"tags":{},"startTime":1764555116058,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":74,"timestamp":922472427022,"id":1341,"parentId":1331,"tags":{},"startTime":1764555116059,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":27,"timestamp":922472427090,"id":1342,"parentId":1331,"tags":{},"startTime":1764555116059,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":2032,"timestamp":922472427119,"id":1343,"parentId":1331,"tags":{},"startTime":1764555116059,"traceId":"45f4427c68eca367"},{"name":"seal","duration":9271,"timestamp":922472420851,"id":1331,"parentId":1307,"tags":{},"startTime":1764555116053,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":93762,"timestamp":922472337721,"id":1307,"parentId":1305,"tags":{"name":"server"},"startTime":1764555115970,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1476,"timestamp":922472431494,"id":1344,"parentId":1305,"tags":{},"startTime":1764555116064,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":106621,"timestamp":922472326665,"id":1305,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555115959,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2446,"timestamp":922472438949,"id":1354,"parentId":1346,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555116071,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2659,"timestamp":922472438913,"id":1347,"parentId":1346,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764555116071,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3258,"timestamp":922472438945,"id":1352,"parentId":1346,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555116071,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4193,"timestamp":922472438943,"id":1351,"parentId":1346,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555116071,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":752,"timestamp":922472442399,"id":1360,"parentId":1359,"tags":{},"startTime":1764555116075,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":7845,"timestamp":922472438936,"id":1348,"parentId":1346,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764555116071,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":7846,"timestamp":922472438939,"id":1349,"parentId":1346,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555116071,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":6032,"timestamp":922472440894,"id":1358,"parentId":1357,"tags":{},"startTime":1764555116073,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":6094,"timestamp":922472440832,"id":1357,"parentId":1356,"tags":{},"startTime":1764555116073,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":12625,"timestamp":922472440768,"id":1356,"parentId":1345,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764555116073,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":29464,"timestamp":922472443187,"id":1362,"parentId":1361,"tags":{},"startTime":1764555116075,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":29815,"timestamp":922472443173,"id":1361,"parentId":1359,"tags":{},"startTime":1764555116075,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":4078,"timestamp":922472473014,"id":1363,"parentId":1359,"tags":{"astUsed":"true"},"startTime":1764555116105,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":35912,"timestamp":922472442280,"id":1359,"parentId":1355,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764555116074,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":45763,"timestamp":922472440253,"id":1355,"parentId":1345,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764555116072,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":39,"timestamp":922472489032,"id":1364,"parentId":1355,"tags":{},"startTime":1764555116121,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":50538,"timestamp":922472438941,"id":1350,"parentId":1346,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555116071,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":56090,"timestamp":922472438947,"id":1353,"parentId":1346,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555116071,"traceId":"45f4427c68eca367"},{"name":"make","duration":60216,"timestamp":922472434833,"id":1346,"parentId":1345,"tags":{},"startTime":1764555116067,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1006,"timestamp":922472496144,"id":1366,"parentId":1365,"tags":{},"startTime":1764555116128,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":922472497162,"id":1368,"parentId":1365,"tags":{},"startTime":1764555116129,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":29,"timestamp":922472497203,"id":1369,"parentId":1365,"tags":{},"startTime":1764555116129,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":922472497243,"id":1370,"parentId":1365,"tags":{},"startTime":1764555116129,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":922472497261,"id":1371,"parentId":1365,"tags":{},"startTime":1764555116129,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":368,"timestamp":922472497159,"id":1367,"parentId":1365,"tags":{},"startTime":1764555116129,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":315,"timestamp":922472498072,"id":1372,"parentId":1365,"tags":{},"startTime":1764555116130,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1314,"timestamp":922472498392,"id":1373,"parentId":1365,"tags":{},"startTime":1764555116131,"traceId":"45f4427c68eca367"},{"name":"hash","duration":2316,"timestamp":922472500559,"id":1374,"parentId":1365,"tags":{},"startTime":1764555116133,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":75,"timestamp":922472502875,"id":1375,"parentId":1365,"tags":{},"startTime":1764555116135,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":29,"timestamp":922472502944,"id":1376,"parentId":1365,"tags":{},"startTime":1764555116135,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":7368,"timestamp":922472502976,"id":1377,"parentId":1365,"tags":{},"startTime":1764555116135,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":203,"timestamp":922472511173,"id":1379,"parentId":1345,"tags":{},"startTime":1764555116143,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":280,"timestamp":922472511100,"id":1378,"parentId":1345,"tags":{},"startTime":1764555116143,"traceId":"45f4427c68eca367"},{"name":"seal","duration":16211,"timestamp":922472495913,"id":1365,"parentId":1345,"tags":{},"startTime":1764555116128,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":77843,"timestamp":922472434295,"id":1345,"parentId":1306,"tags":{"name":"client"},"startTime":1764555116066,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2608,"timestamp":922472512149,"id":1380,"parentId":1306,"tags":{},"startTime":1764555116144,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":188910,"timestamp":922472326823,"id":1306,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555115959,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":3,"timestamp":922472516237,"id":1381,"parentId":3,"tags":{},"startTime":1764555116148,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":17746,"timestamp":922472518984,"id":1382,"tags":{"url":"/gunbuilder/upper?_rsc=5ur2j","isTurbopack":false},"startTime":1764555116151,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":922472536745,"id":1383,"parentId":1382,"tags":{"url":"/gunbuilder/upper?_rsc=5ur2j","memory.rss":"447086592","memory.heapUsed":"160278944","memory.heapTotal":"184254464"},"startTime":1764555116169,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":221000,"timestamp":922472327158,"id":1384,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder/upper","isPageHidden":false},"startTime":1764555116180,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":12444,"timestamp":922572339147,"id":1396,"parentId":1388,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555215971,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":13148,"timestamp":922572339033,"id":1389,"parentId":1388,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764555215971,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":17451,"timestamp":922572339139,"id":1394,"parentId":1388,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555215971,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":9321,"timestamp":922572349877,"id":1400,"parentId":1399,"tags":{},"startTime":1764555215982,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":9612,"timestamp":922572349592,"id":1399,"parentId":1398,"tags":{},"startTime":1764555215982,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":19931,"timestamp":922572349345,"id":1398,"parentId":1387,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764555215981,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":31318,"timestamp":922572339133,"id":1393,"parentId":1388,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555215971,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":31886,"timestamp":922572339124,"id":1391,"parentId":1388,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555215971,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":31869,"timestamp":922572339143,"id":1395,"parentId":1388,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555215971,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":13573,"timestamp":922572357457,"id":1402,"parentId":1401,"tags":{},"startTime":1764555215990,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":36621,"timestamp":922572339116,"id":1390,"parentId":1388,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764555215971,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":17168,"timestamp":922572371074,"id":1404,"parentId":1403,"tags":{},"startTime":1764555216003,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":17549,"timestamp":922572371055,"id":1403,"parentId":1401,"tags":{},"startTime":1764555216003,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":3772,"timestamp":922572388631,"id":1405,"parentId":1401,"tags":{"astUsed":"true"},"startTime":1764555216021,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":36809,"timestamp":922572357024,"id":1401,"parentId":1397,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764555215989,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":49020,"timestamp":922572347267,"id":1397,"parentId":1387,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764555215979,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":31,"timestamp":922572396407,"id":1406,"parentId":1397,"tags":{},"startTime":1764555216029,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":57330,"timestamp":922572339129,"id":1392,"parentId":1388,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555215971,"traceId":"45f4427c68eca367"},{"name":"make","duration":57994,"timestamp":922572338473,"id":1388,"parentId":1387,"tags":{},"startTime":1764555215971,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":947,"timestamp":922572402820,"id":1408,"parentId":1407,"tags":{},"startTime":1764555216035,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":4,"timestamp":922572403780,"id":1410,"parentId":1407,"tags":{},"startTime":1764555216036,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":31,"timestamp":922572403817,"id":1411,"parentId":1407,"tags":{},"startTime":1764555216036,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":5,"timestamp":922572403871,"id":1412,"parentId":1407,"tags":{},"startTime":1764555216036,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":3,"timestamp":922572403896,"id":1413,"parentId":1407,"tags":{},"startTime":1764555216036,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":366,"timestamp":922572403776,"id":1409,"parentId":1407,"tags":{},"startTime":1764555216036,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":334,"timestamp":922572416417,"id":1414,"parentId":1407,"tags":{},"startTime":1764555216049,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1290,"timestamp":922572416763,"id":1415,"parentId":1407,"tags":{},"startTime":1764555216049,"traceId":"45f4427c68eca367"},{"name":"hash","duration":2163,"timestamp":922572418894,"id":1416,"parentId":1407,"tags":{},"startTime":1764555216051,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":97,"timestamp":922572421057,"id":1417,"parentId":1407,"tags":{},"startTime":1764555216053,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":39,"timestamp":922572421146,"id":1418,"parentId":1407,"tags":{},"startTime":1764555216053,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":2796,"timestamp":922572421187,"id":1419,"parentId":1407,"tags":{},"startTime":1764555216053,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":185,"timestamp":922572424748,"id":1421,"parentId":1387,"tags":{},"startTime":1764555216057,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":266,"timestamp":922572424670,"id":1420,"parentId":1387,"tags":{},"startTime":1764555216057,"traceId":"45f4427c68eca367"},{"name":"seal","duration":23172,"timestamp":922572402560,"id":1407,"parentId":1387,"tags":{},"startTime":1764555216035,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":88984,"timestamp":922572336766,"id":1387,"parentId":1385,"tags":{"name":"client"},"startTime":1764555215969,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2977,"timestamp":922572425760,"id":1422,"parentId":1385,"tags":{},"startTime":1764555216058,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":102175,"timestamp":922572327112,"id":1385,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555215959,"traceId":"45f4427c68eca367"},{"name":"client-success","duration":1,"timestamp":922572431352,"id":1425,"parentId":3,"tags":{},"startTime":1764555216063,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4692,"timestamp":922572433321,"id":1427,"parentId":1424,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555216065,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4701,"timestamp":922572433324,"id":1428,"parentId":1424,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555216065,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4699,"timestamp":922572433330,"id":1429,"parentId":1424,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555216065,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":1875,"timestamp":922572437431,"id":1432,"parentId":1431,"tags":{},"startTime":1764555216070,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":1990,"timestamp":922572437320,"id":1431,"parentId":1430,"tags":{},"startTime":1764555216069,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":3364,"timestamp":922572437088,"id":1430,"parentId":1423,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764555216069,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":7775,"timestamp":922572433282,"id":1426,"parentId":1424,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555216065,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2982,"timestamp":922572442524,"id":1447,"parentId":1446,"tags":{},"startTime":1764555216075,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":3048,"timestamp":922572442466,"id":1446,"parentId":1445,"tags":{},"startTime":1764555216075,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":7909,"timestamp":922572442350,"id":1445,"parentId":1423,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764555216074,"traceId":"45f4427c68eca367"},{"name":"make","duration":20120,"timestamp":922572430750,"id":1424,"parentId":1423,"tags":{},"startTime":1764555216063,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":123000,"timestamp":922572327655,"id":1448,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder/upper","isPageHidden":false},"startTime":1764555216084,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1417,"timestamp":922572456808,"id":1450,"parentId":1449,"tags":{},"startTime":1764555216089,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":8,"timestamp":922572458239,"id":1452,"parentId":1449,"tags":{},"startTime":1764555216090,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1234,"timestamp":922572458313,"id":1453,"parentId":1449,"tags":{},"startTime":1764555216090,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":922572459562,"id":1454,"parentId":1449,"tags":{},"startTime":1764555216092,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":922572459573,"id":1455,"parentId":1449,"tags":{},"startTime":1764555216092,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1558,"timestamp":922572458235,"id":1451,"parentId":1449,"tags":{},"startTime":1764555216090,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":275,"timestamp":922572460344,"id":1456,"parentId":1449,"tags":{},"startTime":1764555216092,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1234,"timestamp":922572460624,"id":1457,"parentId":1449,"tags":{},"startTime":1764555216093,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1047,"timestamp":922572462448,"id":1458,"parentId":1449,"tags":{},"startTime":1764555216095,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":85,"timestamp":922572463495,"id":1459,"parentId":1449,"tags":{},"startTime":1764555216096,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":32,"timestamp":922572463576,"id":1460,"parentId":1449,"tags":{},"startTime":1764555216096,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1572,"timestamp":922572463611,"id":1461,"parentId":1449,"tags":{},"startTime":1764555216096,"traceId":"45f4427c68eca367"},{"name":"seal","duration":9747,"timestamp":922572456592,"id":1449,"parentId":1423,"tags":{},"startTime":1764555216089,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":37359,"timestamp":922572430480,"id":1423,"parentId":1386,"tags":{"name":"server"},"startTime":1764555216063,"traceId":"45f4427c68eca367"},{"name":"emit","duration":11619,"timestamp":922572467863,"id":1462,"parentId":1386,"tags":{},"startTime":1764555216100,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":152729,"timestamp":922572327851,"id":1386,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555215960,"traceId":"45f4427c68eca367"}] -[{"name":"handle-request","duration":21699,"timestamp":922572484831,"id":1463,"tags":{"url":"/gunbuilder/upper?_rsc=igmto","isTurbopack":false},"startTime":1764555216117,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":922572506554,"id":1464,"parentId":1463,"tags":{"url":"/gunbuilder/upper?_rsc=igmto","memory.rss":"451002368","memory.heapUsed":"157332208","memory.heapTotal":"181747712"},"startTime":1764555216139,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":13322,"timestamp":922607947225,"id":1470,"parentId":1468,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555251579,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":13326,"timestamp":922607947239,"id":1471,"parentId":1468,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555251579,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":13326,"timestamp":922607947249,"id":1472,"parentId":1468,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555251579,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2230,"timestamp":922607959596,"id":1475,"parentId":1474,"tags":{},"startTime":1764555251592,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2419,"timestamp":922607959414,"id":1474,"parentId":1473,"tags":{},"startTime":1764555251592,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":4562,"timestamp":922607958933,"id":1473,"parentId":1467,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764555251591,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":16983,"timestamp":922607947102,"id":1469,"parentId":1468,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555251579,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":6007,"timestamp":922607967329,"id":1490,"parentId":1489,"tags":{},"startTime":1764555251599,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":6175,"timestamp":922607967167,"id":1489,"parentId":1488,"tags":{},"startTime":1764555251599,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":10469,"timestamp":922607966918,"id":1488,"parentId":1467,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764555251599,"traceId":"45f4427c68eca367"},{"name":"make","duration":36096,"timestamp":922607944083,"id":1468,"parentId":1467,"tags":{},"startTime":1764555251576,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1381,"timestamp":922607981478,"id":1492,"parentId":1491,"tags":{},"startTime":1764555251614,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":8,"timestamp":922607982881,"id":1494,"parentId":1491,"tags":{},"startTime":1764555251615,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1058,"timestamp":922607982902,"id":1495,"parentId":1491,"tags":{},"startTime":1764555251615,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":5,"timestamp":922607983975,"id":1496,"parentId":1491,"tags":{},"startTime":1764555251616,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":922607983989,"id":1497,"parentId":1491,"tags":{},"startTime":1764555251616,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1247,"timestamp":922607982873,"id":1493,"parentId":1491,"tags":{},"startTime":1764555251615,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":255,"timestamp":922607984596,"id":1498,"parentId":1491,"tags":{},"startTime":1764555251617,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1089,"timestamp":922607984856,"id":1499,"parentId":1491,"tags":{},"startTime":1764555251617,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1413,"timestamp":922607986842,"id":1500,"parentId":1491,"tags":{},"startTime":1764555251619,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":112,"timestamp":922607988254,"id":1501,"parentId":1491,"tags":{},"startTime":1764555251620,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":44,"timestamp":922607988357,"id":1502,"parentId":1491,"tags":{},"startTime":1764555251620,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":2246,"timestamp":922607988405,"id":1503,"parentId":1491,"tags":{},"startTime":1764555251621,"traceId":"45f4427c68eca367"},{"name":"seal","duration":10423,"timestamp":922607981277,"id":1491,"parentId":1467,"tags":{},"startTime":1764555251613,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":49740,"timestamp":922607943401,"id":1467,"parentId":1465,"tags":{"name":"server"},"startTime":1764555251576,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1646,"timestamp":922607993161,"id":1504,"parentId":1465,"tags":{},"startTime":1764555251625,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":62995,"timestamp":922607931996,"id":1465,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555251564,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":7209,"timestamp":922608000151,"id":1514,"parentId":1506,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555251632,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":7485,"timestamp":922608000100,"id":1507,"parentId":1506,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764555251632,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":8072,"timestamp":922608000144,"id":1512,"parentId":1506,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555251632,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":8882,"timestamp":922608000141,"id":1511,"parentId":1506,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555251632,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":684,"timestamp":922608008347,"id":1520,"parentId":1519,"tags":{},"startTime":1764555251640,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":11217,"timestamp":922608000131,"id":1508,"parentId":1506,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764555251632,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":11218,"timestamp":922608000135,"id":1509,"parentId":1506,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555251632,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":4755,"timestamp":922608006735,"id":1518,"parentId":1517,"tags":{},"startTime":1764555251639,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":4858,"timestamp":922608006634,"id":1517,"parentId":1516,"tags":{},"startTime":1764555251639,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":9206,"timestamp":922608006554,"id":1516,"parentId":1505,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764555251639,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":16593,"timestamp":922608000149,"id":1513,"parentId":1506,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555251632,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":19746,"timestamp":922608009053,"id":1522,"parentId":1521,"tags":{},"startTime":1764555251641,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":20055,"timestamp":922608009044,"id":1521,"parentId":1519,"tags":{},"startTime":1764555251641,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":2917,"timestamp":922608029122,"id":1523,"parentId":1519,"tags":{"astUsed":"true"},"startTime":1764555251661,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":24355,"timestamp":922608008288,"id":1519,"parentId":1515,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764555251640,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":28882,"timestamp":922608006333,"id":1515,"parentId":1505,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764555251638,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":16,"timestamp":922608035361,"id":1524,"parentId":1515,"tags":{},"startTime":1764555251667,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":35259,"timestamp":922608000138,"id":1510,"parentId":1506,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555251632,"traceId":"45f4427c68eca367"},{"name":"make","duration":39337,"timestamp":922607996096,"id":1506,"parentId":1505,"tags":{},"startTime":1764555251628,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":629,"timestamp":922608036401,"id":1526,"parentId":1525,"tags":{},"startTime":1764555251669,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":922608037040,"id":1528,"parentId":1525,"tags":{},"startTime":1764555251669,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":24,"timestamp":922608037052,"id":1529,"parentId":1525,"tags":{},"startTime":1764555251669,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":2,"timestamp":922608037084,"id":1530,"parentId":1525,"tags":{},"startTime":1764555251669,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":1,"timestamp":922608037094,"id":1531,"parentId":1525,"tags":{},"startTime":1764555251669,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":301,"timestamp":922608037037,"id":1527,"parentId":1525,"tags":{},"startTime":1764555251669,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":193,"timestamp":922608037732,"id":1532,"parentId":1525,"tags":{},"startTime":1764555251670,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":710,"timestamp":922608037929,"id":1533,"parentId":1525,"tags":{},"startTime":1764555251670,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1511,"timestamp":922608039163,"id":1534,"parentId":1525,"tags":{},"startTime":1764555251671,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":67,"timestamp":922608040674,"id":1535,"parentId":1525,"tags":{},"startTime":1764555251673,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":31,"timestamp":922608040738,"id":1536,"parentId":1525,"tags":{},"startTime":1764555251673,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1920,"timestamp":922608040771,"id":1537,"parentId":1525,"tags":{},"startTime":1764555251673,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":44,"timestamp":922608043073,"id":1539,"parentId":1505,"tags":{},"startTime":1764555251675,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":78,"timestamp":922608043042,"id":1538,"parentId":1505,"tags":{},"startTime":1764555251675,"traceId":"45f4427c68eca367"},{"name":"seal","duration":7604,"timestamp":922608036131,"id":1525,"parentId":1505,"tags":{},"startTime":1764555251668,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":47865,"timestamp":922607995883,"id":1505,"parentId":1466,"tags":{"name":"client"},"startTime":1764555251628,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2309,"timestamp":922608043759,"id":1540,"parentId":1466,"tags":{},"startTime":1764555251676,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":114492,"timestamp":922607932123,"id":1466,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555251564,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":3,"timestamp":922608047949,"id":1541,"parentId":3,"tags":{},"startTime":1764555251680,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":10821,"timestamp":922608050681,"id":1542,"tags":{"url":"/gunbuilder/upper?_rsc=igmto","isTurbopack":false},"startTime":1764555251683,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":922608061517,"id":1543,"parentId":1542,"tags":{"url":"/gunbuilder/upper?_rsc=igmto","memory.rss":"457179136","memory.heapUsed":"161721456","memory.heapTotal":"197951488"},"startTime":1764555251694,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":140000,"timestamp":922607933111,"id":1544,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder/upper","isPageHidden":false},"startTime":1764555251705,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15115,"timestamp":922724781495,"id":1556,"parentId":1548,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555368414,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":15916,"timestamp":922724781282,"id":1549,"parentId":1548,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764555368413,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":18580,"timestamp":922724781475,"id":1554,"parentId":1548,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555368414,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":7699,"timestamp":922724795073,"id":1560,"parentId":1559,"tags":{},"startTime":1764555368427,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":8007,"timestamp":922724794774,"id":1559,"parentId":1558,"tags":{},"startTime":1764555368427,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":19299,"timestamp":922724794576,"id":1558,"parentId":1547,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764555368427,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":32832,"timestamp":922724781463,"id":1553,"parentId":1548,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555368414,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":32963,"timestamp":922724781434,"id":1551,"parentId":1548,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555368413,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":13840,"timestamp":922724800565,"id":1562,"parentId":1561,"tags":{},"startTime":1764555368433,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":36051,"timestamp":922724781485,"id":1555,"parentId":1548,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555368414,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":36283,"timestamp":922724781417,"id":1550,"parentId":1548,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764555368413,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":16478,"timestamp":922724814435,"id":1564,"parentId":1563,"tags":{},"startTime":1764555368446,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":16766,"timestamp":922724814421,"id":1563,"parentId":1561,"tags":{},"startTime":1764555368446,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":3244,"timestamp":922724831205,"id":1565,"parentId":1561,"tags":{"astUsed":"true"},"startTime":1764555368463,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":35918,"timestamp":922724800395,"id":1561,"parentId":1557,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764555368432,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":43963,"timestamp":922724794066,"id":1557,"parentId":1547,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764555368426,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":22,"timestamp":922724838127,"id":1566,"parentId":1557,"tags":{},"startTime":1764555368470,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":56720,"timestamp":922724781452,"id":1552,"parentId":1548,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555368413,"traceId":"45f4427c68eca367"},{"name":"make","duration":57995,"timestamp":922724780187,"id":1548,"parentId":1547,"tags":{},"startTime":1764555368412,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1131,"timestamp":922724860511,"id":1568,"parentId":1567,"tags":{},"startTime":1764555368493,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":922724861657,"id":1570,"parentId":1567,"tags":{},"startTime":1764555368494,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":33,"timestamp":922724861695,"id":1571,"parentId":1567,"tags":{},"startTime":1764555368494,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":922724861755,"id":1572,"parentId":1567,"tags":{},"startTime":1764555368494,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":922724861781,"id":1573,"parentId":1567,"tags":{},"startTime":1764555368494,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":361,"timestamp":922724861654,"id":1569,"parentId":1567,"tags":{},"startTime":1764555368494,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":263,"timestamp":922724862483,"id":1574,"parentId":1567,"tags":{},"startTime":1764555368495,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1167,"timestamp":922724862752,"id":1575,"parentId":1567,"tags":{},"startTime":1764555368495,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1959,"timestamp":922724864629,"id":1576,"parentId":1567,"tags":{},"startTime":1764555368497,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":80,"timestamp":922724866588,"id":1577,"parentId":1567,"tags":{},"startTime":1764555368499,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":35,"timestamp":922724866664,"id":1578,"parentId":1567,"tags":{},"startTime":1764555368499,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":4531,"timestamp":922724866701,"id":1579,"parentId":1567,"tags":{},"startTime":1764555368499,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":219,"timestamp":922724872300,"id":1581,"parentId":1547,"tags":{},"startTime":1764555368504,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":325,"timestamp":922724872199,"id":1580,"parentId":1547,"tags":{},"startTime":1764555368504,"traceId":"45f4427c68eca367"},{"name":"seal","duration":13324,"timestamp":922724860265,"id":1567,"parentId":1547,"tags":{},"startTime":1764555368492,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":95162,"timestamp":922724778471,"id":1547,"parentId":1545,"tags":{"name":"client"},"startTime":1764555368411,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2739,"timestamp":922724873657,"id":1582,"parentId":1545,"tags":{},"startTime":1764555368506,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":109268,"timestamp":922724767896,"id":1545,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555368400,"traceId":"45f4427c68eca367"},{"name":"client-success","duration":1,"timestamp":922724880237,"id":1585,"parentId":3,"tags":{},"startTime":1764555368512,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5547,"timestamp":922724882223,"id":1587,"parentId":1584,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555368514,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5554,"timestamp":922724882226,"id":1588,"parentId":1584,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555368514,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5557,"timestamp":922724882228,"id":1589,"parentId":1584,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555368514,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":1207,"timestamp":922724887291,"id":1592,"parentId":1591,"tags":{},"startTime":1764555368519,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":1289,"timestamp":922724887212,"id":1591,"parentId":1590,"tags":{},"startTime":1764555368519,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":2767,"timestamp":922724887018,"id":1590,"parentId":1583,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764555368519,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":8016,"timestamp":922724882185,"id":1586,"parentId":1584,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555368514,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2710,"timestamp":922724891965,"id":1607,"parentId":1606,"tags":{},"startTime":1764555368524,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2779,"timestamp":922724891901,"id":1606,"parentId":1605,"tags":{},"startTime":1764555368524,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":7997,"timestamp":922724891778,"id":1605,"parentId":1583,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764555368524,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":130000,"timestamp":922724768373,"id":1608,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder/upper","isPageHidden":false},"startTime":1764555368532,"traceId":"45f4427c68eca367"},{"name":"make","duration":21286,"timestamp":922724879358,"id":1584,"parentId":1583,"tags":{},"startTime":1764555368511,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1484,"timestamp":922724906759,"id":1610,"parentId":1609,"tags":{},"startTime":1764555368539,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":4,"timestamp":922724908261,"id":1612,"parentId":1609,"tags":{},"startTime":1764555368540,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1386,"timestamp":922724908341,"id":1613,"parentId":1609,"tags":{},"startTime":1764555368540,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":922724909748,"id":1614,"parentId":1609,"tags":{},"startTime":1764555368542,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":922724909764,"id":1615,"parentId":1609,"tags":{},"startTime":1764555368542,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1755,"timestamp":922724908255,"id":1611,"parentId":1609,"tags":{},"startTime":1764555368540,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":332,"timestamp":922724910662,"id":1616,"parentId":1609,"tags":{},"startTime":1764555368543,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":1259,"timestamp":922724910999,"id":1617,"parentId":1609,"tags":{},"startTime":1764555368543,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1105,"timestamp":922724912969,"id":1618,"parentId":1609,"tags":{},"startTime":1764555368545,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":83,"timestamp":922724914074,"id":1619,"parentId":1609,"tags":{},"startTime":1764555368546,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":32,"timestamp":922724914152,"id":1620,"parentId":1609,"tags":{},"startTime":1764555368546,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1669,"timestamp":922724914190,"id":1621,"parentId":1609,"tags":{},"startTime":1764555368546,"traceId":"45f4427c68eca367"},{"name":"seal","duration":10779,"timestamp":922724906513,"id":1609,"parentId":1583,"tags":{},"startTime":1764555368539,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":40076,"timestamp":922724878899,"id":1583,"parentId":1546,"tags":{"name":"server"},"startTime":1764555368511,"traceId":"45f4427c68eca367"},{"name":"emit","duration":10422,"timestamp":922724919000,"id":1622,"parentId":1546,"tags":{},"startTime":1764555368551,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":162359,"timestamp":922724768215,"id":1546,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555368400,"traceId":"45f4427c68eca367"}] -[{"name":"handle-request","duration":22423,"timestamp":922724935085,"id":1623,"tags":{"url":"/gunbuilder/upper?_rsc=igmto","isTurbopack":false},"startTime":1764555368567,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":922724957527,"id":1624,"parentId":1623,"tags":{"url":"/gunbuilder/upper?_rsc=igmto","memory.rss":"444268544","memory.heapUsed":"157317536","memory.heapTotal":"178077696"},"startTime":1764555368590,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":19645,"timestamp":922737183257,"id":1625,"tags":{"url":"/gunbuilder?select=upper%3A165&_rsc=dn2bc","isTurbopack":false},"startTime":1764555380815,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":922737202997,"id":1626,"parentId":1625,"tags":{"url":"/gunbuilder?select=upper%3A165&_rsc=dn2bc","memory.rss":"444547072","memory.heapUsed":"159022728","memory.heapTotal":"178585600"},"startTime":1764555380835,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":9136,"timestamp":922737206840,"id":1627,"tags":{"url":"/gunbuilder?select=upper%3A165&_rsc=fecig","isTurbopack":false},"startTime":1764555380839,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":922737216032,"id":1628,"parentId":1627,"tags":{"url":"/gunbuilder?select=upper%3A165&_rsc=fecig","memory.rss":"444547072","memory.heapUsed":"159684024","memory.heapTotal":"178585600"},"startTime":1764555380848,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":7368,"timestamp":922737232153,"id":1629,"tags":{"url":"/gunbuilder?_rsc=d74dl","isTurbopack":false},"startTime":1764555380864,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":922737239560,"id":1630,"parentId":1629,"tags":{"url":"/gunbuilder?_rsc=d74dl","memory.rss":"444547072","memory.heapUsed":"160254304","memory.heapTotal":"178847744"},"startTime":1764555380872,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":13064,"timestamp":922740288895,"id":1631,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","isTurbopack":false},"startTime":1764555383921,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":2,"timestamp":922740302030,"id":1632,"parentId":1631,"tags":{"url":"/gunbuilder/upper?_rsc=1jn8g","memory.rss":"439779328","memory.heapUsed":"161085224","memory.heapTotal":"179634176"},"startTime":1764555383934,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":14521,"timestamp":923018503955,"id":1638,"parentId":1636,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555662136,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":14528,"timestamp":923018503966,"id":1639,"parentId":1636,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555662136,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":14530,"timestamp":923018503974,"id":1640,"parentId":1636,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555662136,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":2479,"timestamp":923018517698,"id":1643,"parentId":1642,"tags":{},"startTime":1764555662150,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":2654,"timestamp":923018517529,"id":1642,"parentId":1641,"tags":{},"startTime":1764555662149,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":5285,"timestamp":923018517085,"id":1641,"parentId":1635,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764555662149,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":19623,"timestamp":923018503856,"id":1637,"parentId":1636,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555662136,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":3789,"timestamp":923018526183,"id":1658,"parentId":1657,"tags":{},"startTime":1764555662158,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":3940,"timestamp":923018526036,"id":1657,"parentId":1656,"tags":{},"startTime":1764555662158,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":11852,"timestamp":923018525844,"id":1656,"parentId":1635,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764555662158,"traceId":"45f4427c68eca367"},{"name":"make","duration":39911,"timestamp":923018498511,"id":1636,"parentId":1635,"tags":{},"startTime":1764555662130,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1170,"timestamp":923018562002,"id":1660,"parentId":1659,"tags":{},"startTime":1764555662194,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":923018563189,"id":1662,"parentId":1659,"tags":{},"startTime":1764555662195,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1097,"timestamp":923018563202,"id":1663,"parentId":1659,"tags":{},"startTime":1764555662195,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":4,"timestamp":923018564319,"id":1664,"parentId":1659,"tags":{},"startTime":1764555662196,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":923018564335,"id":1665,"parentId":1659,"tags":{},"startTime":1764555662196,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1355,"timestamp":923018563185,"id":1661,"parentId":1659,"tags":{},"startTime":1764555662195,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":265,"timestamp":923018565033,"id":1666,"parentId":1659,"tags":{},"startTime":1764555662197,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":875,"timestamp":923018565304,"id":1667,"parentId":1659,"tags":{},"startTime":1764555662197,"traceId":"45f4427c68eca367"},{"name":"hash","duration":875,"timestamp":923018566635,"id":1668,"parentId":1659,"tags":{},"startTime":1764555662199,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":57,"timestamp":923018567510,"id":1669,"parentId":1659,"tags":{},"startTime":1764555662199,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":27,"timestamp":923018567562,"id":1670,"parentId":1659,"tags":{},"startTime":1764555662199,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1762,"timestamp":923018567591,"id":1671,"parentId":1659,"tags":{},"startTime":1764555662199,"traceId":"45f4427c68eca367"},{"name":"seal","duration":8612,"timestamp":923018561814,"id":1659,"parentId":1635,"tags":{},"startTime":1764555662194,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":73905,"timestamp":923018497801,"id":1635,"parentId":1633,"tags":{"name":"server"},"startTime":1764555662130,"traceId":"45f4427c68eca367"},{"name":"emit","duration":1611,"timestamp":923018571719,"id":1672,"parentId":1633,"tags":{},"startTime":1764555662204,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":86922,"timestamp":923018486665,"id":1633,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555662119,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":2936,"timestamp":923018577575,"id":1682,"parentId":1674,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555662209,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3163,"timestamp":923018577524,"id":1675,"parentId":1674,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764555662209,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":3705,"timestamp":923018577571,"id":1680,"parentId":1674,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555662209,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":4465,"timestamp":923018577568,"id":1679,"parentId":1674,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555662209,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":651,"timestamp":923018581390,"id":1688,"parentId":1687,"tags":{},"startTime":1764555662213,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":7285,"timestamp":923018577561,"id":1676,"parentId":1674,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764555662209,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":7284,"timestamp":923018577565,"id":1677,"parentId":1674,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555662209,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":5044,"timestamp":923018579934,"id":1686,"parentId":1685,"tags":{},"startTime":1764555662212,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":5120,"timestamp":923018579859,"id":1685,"parentId":1684,"tags":{},"startTime":1764555662212,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":9725,"timestamp":923018579781,"id":1684,"parentId":1673,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764555662212,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":12687,"timestamp":923018577574,"id":1681,"parentId":1674,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555662209,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":20323,"timestamp":923018582060,"id":1690,"parentId":1689,"tags":{},"startTime":1764555662214,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":20583,"timestamp":923018582052,"id":1689,"parentId":1687,"tags":{},"startTime":1764555662214,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":2514,"timestamp":923018602647,"id":1691,"parentId":1687,"tags":{"astUsed":"true"},"startTime":1764555662235,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":24317,"timestamp":923018581342,"id":1687,"parentId":1683,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764555662213,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":27616,"timestamp":923018579586,"id":1683,"parentId":1673,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764555662211,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":13,"timestamp":923018607282,"id":1692,"parentId":1683,"tags":{},"startTime":1764555662239,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":29748,"timestamp":923018577567,"id":1678,"parentId":1674,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555662209,"traceId":"45f4427c68eca367"},{"name":"make","duration":32907,"timestamp":923018574420,"id":1674,"parentId":1673,"tags":{},"startTime":1764555662206,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":738,"timestamp":923018613039,"id":1694,"parentId":1693,"tags":{},"startTime":1764555662245,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":2,"timestamp":923018613787,"id":1696,"parentId":1693,"tags":{},"startTime":1764555662246,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":22,"timestamp":923018613800,"id":1697,"parentId":1693,"tags":{},"startTime":1764555662246,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":923018613832,"id":1698,"parentId":1693,"tags":{},"startTime":1764555662246,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":923018613842,"id":1699,"parentId":1693,"tags":{},"startTime":1764555662246,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":289,"timestamp":923018613784,"id":1695,"parentId":1693,"tags":{},"startTime":1764555662246,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":240,"timestamp":923018614514,"id":1700,"parentId":1693,"tags":{},"startTime":1764555662246,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":956,"timestamp":923018614759,"id":1701,"parentId":1693,"tags":{},"startTime":1764555662247,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1698,"timestamp":923018616287,"id":1702,"parentId":1693,"tags":{},"startTime":1764555662248,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":97,"timestamp":923018617985,"id":1703,"parentId":1693,"tags":{},"startTime":1764555662250,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":54,"timestamp":923018618050,"id":1704,"parentId":1693,"tags":{},"startTime":1764555662250,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":3096,"timestamp":923018618108,"id":1705,"parentId":1693,"tags":{},"startTime":1764555662250,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":46,"timestamp":923018621662,"id":1707,"parentId":1673,"tags":{},"startTime":1764555662254,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":80,"timestamp":923018621632,"id":1706,"parentId":1673,"tags":{},"startTime":1764555662254,"traceId":"45f4427c68eca367"},{"name":"seal","duration":9802,"timestamp":923018612805,"id":1693,"parentId":1673,"tags":{},"startTime":1764555662245,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":48385,"timestamp":923018574238,"id":1673,"parentId":1634,"tags":{"name":"client"},"startTime":1764555662206,"traceId":"45f4427c68eca367"},{"name":"emit","duration":5801,"timestamp":923018622632,"id":1708,"parentId":1634,"tags":{},"startTime":1764555662255,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":142201,"timestamp":923018486786,"id":1634,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555662119,"traceId":"45f4427c68eca367"}] -[{"name":"client-success","duration":5,"timestamp":923018629903,"id":1709,"parentId":3,"tags":{},"startTime":1764555662262,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":9161,"timestamp":923018633082,"id":1710,"tags":{"url":"/gunbuilder/upper?_rsc=5ur2j","isTurbopack":false},"startTime":1764555662265,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":0,"timestamp":923018642260,"id":1711,"parentId":1710,"tags":{"url":"/gunbuilder/upper?_rsc=5ur2j","memory.rss":"449380352","memory.heapUsed":"157388648","memory.heapTotal":"185155584"},"startTime":1764555662274,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":168000,"timestamp":923018487280,"id":1712,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder/upper","isPageHidden":false},"startTime":1764555662287,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":14653,"timestamp":923035502135,"id":1713,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764555679134,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":923035516887,"id":1714,"parentId":1713,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"449478656","memory.heapUsed":"158988544","memory.heapTotal":"185401344"},"startTime":1764555679149,"traceId":"45f4427c68eca367"},{"name":"handle-request","duration":17095,"timestamp":923037804401,"id":1715,"tags":{"url":"/gunbuilder/handguard?_rsc=1jn8g","isTurbopack":false},"startTime":1764555681436,"traceId":"45f4427c68eca367"},{"name":"memory-usage","duration":1,"timestamp":923037821569,"id":1716,"parentId":1715,"tags":{"url":"/gunbuilder/handguard?_rsc=1jn8g","memory.rss":"449495040","memory.heapUsed":"159875992","memory.heapTotal":"185663488"},"startTime":1764555681453,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":12845,"timestamp":923124512535,"id":1728,"parentId":1720,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fbuild%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555768144,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":14539,"timestamp":923124512290,"id":1721,"parentId":1720,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764555768144,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":16354,"timestamp":923124512526,"id":1726,"parentId":1720,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555768144,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":19589,"timestamp":923124512494,"id":1725,"parentId":1720,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555768144,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":8665,"timestamp":923124523695,"id":1732,"parentId":1731,"tags":{},"startTime":1764555768156,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":8899,"timestamp":923124523464,"id":1731,"parentId":1730,"tags":{},"startTime":1764555768155,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":20068,"timestamp":923124523216,"id":1730,"parentId":1719,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764555768155,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":31161,"timestamp":923124512483,"id":1723,"parentId":1720,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555768144,"traceId":"45f4427c68eca367"},{"name":"read-resource","duration":14375,"timestamp":923124529284,"id":1734,"parentId":1733,"tags":{},"startTime":1764555768161,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":34760,"timestamp":923124512469,"id":1722,"parentId":1720,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764555768144,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":34704,"timestamp":923124512531,"id":1727,"parentId":1720,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555768144,"traceId":"45f4427c68eca367"},{"name":"postcss-process","duration":14743,"timestamp":923124543686,"id":1736,"parentId":1735,"tags":{},"startTime":1764555768176,"traceId":"45f4427c68eca367"},{"name":"postcss-loader","duration":15030,"timestamp":923124543672,"id":1735,"parentId":1733,"tags":{},"startTime":1764555768176,"traceId":"45f4427c68eca367"},{"name":"css-loader","duration":3066,"timestamp":923124558721,"id":1737,"parentId":1733,"tags":{"astUsed":"true"},"startTime":1764555768191,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":33222,"timestamp":923124529136,"id":1733,"parentId":1729,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764555768161,"traceId":"45f4427c68eca367"},{"name":"build-module-css","duration":41282,"timestamp":923124522596,"id":1729,"parentId":1719,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764555768154,"traceId":"45f4427c68eca367"},{"name":"build-module","duration":16,"timestamp":923124563983,"id":1738,"parentId":1729,"tags":{},"startTime":1764555768196,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":51539,"timestamp":923124512488,"id":1724,"parentId":1720,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764555768144,"traceId":"45f4427c68eca367"},{"name":"make","duration":52428,"timestamp":923124511617,"id":1720,"parentId":1719,"tags":{},"startTime":1764555768143,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":716,"timestamp":923124586708,"id":1740,"parentId":1739,"tags":{},"startTime":1764555768219,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":923124587439,"id":1742,"parentId":1739,"tags":{},"startTime":1764555768219,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":57,"timestamp":923124587449,"id":1743,"parentId":1739,"tags":{},"startTime":1764555768219,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":7,"timestamp":923124587517,"id":1744,"parentId":1739,"tags":{},"startTime":1764555768219,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":1,"timestamp":923124587532,"id":1745,"parentId":1739,"tags":{},"startTime":1764555768219,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":365,"timestamp":923124587435,"id":1741,"parentId":1739,"tags":{},"startTime":1764555768219,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":229,"timestamp":923124588183,"id":1746,"parentId":1739,"tags":{},"startTime":1764555768220,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":825,"timestamp":923124588416,"id":1747,"parentId":1739,"tags":{},"startTime":1764555768220,"traceId":"45f4427c68eca367"},{"name":"hash","duration":1675,"timestamp":923124589860,"id":1748,"parentId":1739,"tags":{},"startTime":1764555768222,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":78,"timestamp":923124591534,"id":1749,"parentId":1739,"tags":{},"startTime":1764555768223,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":47,"timestamp":923124591607,"id":1750,"parentId":1739,"tags":{},"startTime":1764555768223,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":3066,"timestamp":923124591657,"id":1751,"parentId":1739,"tags":{},"startTime":1764555768224,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-generateClientManifest","duration":44,"timestamp":923124595095,"id":1753,"parentId":1719,"tags":{},"startTime":1764555768227,"traceId":"45f4427c68eca367"},{"name":"NextJsBuildManifest-createassets","duration":79,"timestamp":923124595064,"id":1752,"parentId":1719,"tags":{},"startTime":1764555768227,"traceId":"45f4427c68eca367"},{"name":"seal","duration":9382,"timestamp":923124586483,"id":1739,"parentId":1719,"tags":{},"startTime":1764555768218,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":84662,"timestamp":923124511217,"id":1719,"parentId":1717,"tags":{"name":"client"},"startTime":1764555768143,"traceId":"45f4427c68eca367"},{"name":"emit","duration":2477,"timestamp":923124595893,"id":1754,"parentId":1717,"tags":{},"startTime":1764555768228,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-client","duration":96283,"timestamp":923124502482,"id":1717,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555768134,"traceId":"45f4427c68eca367"},{"name":"client-success","duration":0,"timestamp":923124600387,"id":1757,"parentId":3,"tags":{},"startTime":1764555768232,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5206,"timestamp":923124601253,"id":1759,"parentId":1756,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2F%5BpartId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555768233,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5209,"timestamp":923124601256,"id":1760,"parentId":1756,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555768233,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":5211,"timestamp":923124601258,"id":1761,"parentId":1756,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fbuild%2Fpage&page=%2Fgunbuilder%2Fbuild%2Fpage&appPaths=%2Fgunbuilder%2Fbuild%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fbuild%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555768233,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":1232,"timestamp":923124605934,"id":1764,"parentId":1763,"tags":{},"startTime":1764555768238,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":1317,"timestamp":923124605849,"id":1763,"parentId":1762,"tags":{},"startTime":1764555768238,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":2048,"timestamp":923124605667,"id":1762,"parentId":1755,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764555768238,"traceId":"45f4427c68eca367"},{"name":"add-entry","duration":6792,"timestamp":923124601219,"id":1758,"parentId":1756,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764555768233,"traceId":"45f4427c68eca367"},{"name":"next-swc-transform","duration":3033,"timestamp":923124609388,"id":1779,"parentId":1778,"tags":{},"startTime":1764555768241,"traceId":"45f4427c68eca367"},{"name":"next-swc-loader","duration":3088,"timestamp":923124609341,"id":1778,"parentId":1777,"tags":{},"startTime":1764555768241,"traceId":"45f4427c68eca367"},{"name":"build-module-tsx","duration":6647,"timestamp":923124609243,"id":1777,"parentId":1755,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764555768241,"traceId":"45f4427c68eca367"},{"name":"client-hmr-latency","duration":111000,"timestamp":923124503445,"id":1780,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder/handguard","isPageHidden":false},"startTime":1764555768248,"traceId":"45f4427c68eca367"},{"name":"make","duration":16757,"timestamp":923124599868,"id":1756,"parentId":1755,"tags":{},"startTime":1764555768232,"traceId":"45f4427c68eca367"},{"name":"chunk-graph","duration":1399,"timestamp":923124621720,"id":1782,"parentId":1781,"tags":{},"startTime":1764555768254,"traceId":"45f4427c68eca367"},{"name":"optimize-modules","duration":3,"timestamp":923124623139,"id":1784,"parentId":1781,"tags":{},"startTime":1764555768255,"traceId":"45f4427c68eca367"},{"name":"optimize-chunks","duration":1040,"timestamp":923124623155,"id":1785,"parentId":1781,"tags":{},"startTime":1764555768255,"traceId":"45f4427c68eca367"},{"name":"optimize-tree","duration":3,"timestamp":923124624209,"id":1786,"parentId":1781,"tags":{},"startTime":1764555768256,"traceId":"45f4427c68eca367"},{"name":"optimize-chunk-modules","duration":2,"timestamp":923124624221,"id":1787,"parentId":1781,"tags":{},"startTime":1764555768256,"traceId":"45f4427c68eca367"},{"name":"optimize","duration":1288,"timestamp":923124623132,"id":1783,"parentId":1781,"tags":{},"startTime":1764555768255,"traceId":"45f4427c68eca367"},{"name":"module-hash","duration":235,"timestamp":923124624907,"id":1788,"parentId":1781,"tags":{},"startTime":1764555768257,"traceId":"45f4427c68eca367"},{"name":"code-generation","duration":999,"timestamp":923124625147,"id":1789,"parentId":1781,"tags":{},"startTime":1764555768257,"traceId":"45f4427c68eca367"},{"name":"hash","duration":777,"timestamp":923124626592,"id":1790,"parentId":1781,"tags":{},"startTime":1764555768258,"traceId":"45f4427c68eca367"},{"name":"code-generation-jobs","duration":61,"timestamp":923124627368,"id":1791,"parentId":1781,"tags":{},"startTime":1764555768259,"traceId":"45f4427c68eca367"},{"name":"module-assets","duration":28,"timestamp":923124627425,"id":1792,"parentId":1781,"tags":{},"startTime":1764555768259,"traceId":"45f4427c68eca367"},{"name":"create-chunk-assets","duration":1693,"timestamp":923124627456,"id":1793,"parentId":1781,"tags":{},"startTime":1764555768259,"traceId":"45f4427c68eca367"},{"name":"seal","duration":8675,"timestamp":923124621531,"id":1781,"parentId":1755,"tags":{},"startTime":1764555768253,"traceId":"45f4427c68eca367"},{"name":"webpack-compilation","duration":31848,"timestamp":923124599699,"id":1755,"parentId":1718,"tags":{"name":"server"},"startTime":1764555768232,"traceId":"45f4427c68eca367"},{"name":"emit","duration":11208,"timestamp":923124631567,"id":1794,"parentId":1718,"tags":{},"startTime":1764555768263,"traceId":"45f4427c68eca367"},{"name":"webpack-invalidated-server","duration":139501,"timestamp":923124503777,"id":1718,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764555768136,"traceId":"45f4427c68eca367"}] +[{"name":"hot-reloader","duration":22,"timestamp":951043141673,"id":3,"tags":{"version":"14.2.3","isTurbopack":false},"startTime":1764583686673,"traceId":"d91921d76e888ff4"},{"name":"start","duration":0,"timestamp":951043142034,"id":4,"parentId":3,"tags":{},"startTime":1764583686673,"traceId":"d91921d76e888ff4"},{"name":"get-version-info","duration":434445,"timestamp":951043142121,"id":5,"parentId":4,"tags":{},"startTime":1764583686674,"traceId":"d91921d76e888ff4"},{"name":"clean","duration":10008,"timestamp":951043576608,"id":6,"parentId":4,"tags":{},"startTime":1764583687108,"traceId":"d91921d76e888ff4"},{"name":"create-pages-mapping","duration":83,"timestamp":951043587202,"id":8,"parentId":7,"tags":{},"startTime":1764583687119,"traceId":"d91921d76e888ff4"},{"name":"create-entrypoints","duration":14517,"timestamp":951043587293,"id":9,"parentId":7,"tags":{},"startTime":1764583687119,"traceId":"d91921d76e888ff4"},{"name":"generate-webpack-config","duration":50392,"timestamp":951043601838,"id":10,"parentId":7,"tags":{},"startTime":1764583687133,"traceId":"d91921d76e888ff4"},{"name":"get-webpack-config","duration":65079,"timestamp":951043587163,"id":7,"parentId":4,"tags":{},"startTime":1764583687119,"traceId":"d91921d76e888ff4"},{"name":"make","duration":499,"timestamp":951043687049,"id":12,"parentId":11,"tags":{},"startTime":1764583687218,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":346,"timestamp":951043688301,"id":14,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":8,"timestamp":951043688674,"id":16,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":56,"timestamp":951043688717,"id":17,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":8,"timestamp":951043688794,"id":18,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951043688860,"id":19,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":234,"timestamp":951043688665,"id":15,"parentId":13,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":38,"timestamp":951043689114,"id":20,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":68,"timestamp":951043689160,"id":21,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":191,"timestamp":951043689328,"id":22,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":23,"timestamp":951043689519,"id":23,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":31,"timestamp":951043689533,"id":24,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":112,"timestamp":951043689567,"id":25,"parentId":13,"tags":{},"startTime":1764583687221,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":400,"timestamp":951043720698,"id":27,"parentId":11,"tags":{},"startTime":1764583687252,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":616,"timestamp":951043720495,"id":26,"parentId":11,"tags":{},"startTime":1764583687252,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":33476,"timestamp":951043688230,"id":13,"parentId":11,"tags":{},"startTime":1764583687220,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":36131,"timestamp":951043685671,"id":11,"parentId":3,"tags":{"name":"client"},"startTime":1764583687217,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":4768,"timestamp":951043721965,"id":28,"parentId":3,"tags":{},"startTime":1764583687253,"traceId":"d91921d76e888ff4"},{"name":"make","duration":585,"timestamp":951043729843,"id":30,"parentId":29,"tags":{},"startTime":1764583687261,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":11,"timestamp":951043730601,"id":32,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951043730620,"id":34,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":18,"timestamp":951043730647,"id":35,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":951043730670,"id":36,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951043730682,"id":37,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":73,"timestamp":951043730618,"id":33,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":3,"timestamp":951043730736,"id":38,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":5,"timestamp":951043730743,"id":39,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":24,"timestamp":951043730762,"id":40,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":10,"timestamp":951043730786,"id":41,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":16,"timestamp":951043730793,"id":42,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":6,"timestamp":951043730813,"id":43,"parentId":31,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":515,"timestamp":951043730588,"id":31,"parentId":29,"tags":{},"startTime":1764583687262,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":1689,"timestamp":951043729462,"id":29,"parentId":3,"tags":{"name":"server"},"startTime":1764583687261,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":535,"timestamp":951043731170,"id":44,"parentId":3,"tags":{},"startTime":1764583687263,"traceId":"d91921d76e888ff4"},{"name":"make","duration":103,"timestamp":951043733806,"id":46,"parentId":45,"tags":{},"startTime":1764583687265,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":16,"timestamp":951043734227,"id":48,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":8,"timestamp":951043734255,"id":50,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":4,"timestamp":951043734270,"id":51,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951043734288,"id":52,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951043734305,"id":53,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":72,"timestamp":951043734249,"id":49,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":3,"timestamp":951043734379,"id":54,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":3,"timestamp":951043734387,"id":55,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":34,"timestamp":951043734411,"id":56,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":12,"timestamp":951043734445,"id":57,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":8,"timestamp":951043734451,"id":58,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":5,"timestamp":951043734461,"id":59,"parentId":47,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":541,"timestamp":951043734210,"id":47,"parentId":45,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":1578,"timestamp":951043733191,"id":45,"parentId":3,"tags":{"name":"edge-server"},"startTime":1764583687265,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":505,"timestamp":951043734793,"id":60,"parentId":3,"tags":{},"startTime":1764583687266,"traceId":"d91921d76e888ff4"}] +[{"name":"make","duration":194,"timestamp":951043956366,"id":65,"parentId":64,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":28,"timestamp":951043956727,"id":67,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":4,"timestamp":951043956781,"id":69,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":8,"timestamp":951043956798,"id":70,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":5,"timestamp":951043956816,"id":71,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":4,"timestamp":951043956837,"id":72,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":89,"timestamp":951043956775,"id":68,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":8,"timestamp":951043956959,"id":73,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":7,"timestamp":951043956975,"id":74,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":54,"timestamp":951043957012,"id":75,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":17,"timestamp":951043957066,"id":76,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":8,"timestamp":951043957078,"id":77,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":14,"timestamp":951043957091,"id":78,"parentId":66,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":114,"timestamp":951043957294,"id":80,"parentId":64,"tags":{},"startTime":1764583687489,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":182,"timestamp":951043957229,"id":79,"parentId":64,"tags":{},"startTime":1764583687489,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":817,"timestamp":951043956696,"id":66,"parentId":64,"tags":{},"startTime":1764583687488,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":1893,"timestamp":951043955647,"id":64,"parentId":61,"tags":{"name":"client"},"startTime":1764583687487,"traceId":"d91921d76e888ff4"},{"name":"setup-dev-bundler","duration":932100,"timestamp":951043053248,"id":2,"parentId":1,"tags":{},"startTime":1764583686585,"traceId":"d91921d76e888ff4"},{"name":"run-instrumentation-hook","duration":24,"timestamp":951043996486,"id":82,"parentId":1,"tags":{},"startTime":1764583687528,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":39309,"timestamp":951043957563,"id":81,"parentId":61,"tags":{},"startTime":1764583687489,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":44589,"timestamp":951043952731,"id":61,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583687484,"traceId":"d91921d76e888ff4"},{"name":"make","duration":108,"timestamp":951043998324,"id":84,"parentId":83,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":17,"timestamp":951043998524,"id":86,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951043998549,"id":88,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":30,"timestamp":951043998560,"id":89,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":951043998596,"id":90,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951043998610,"id":91,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":76,"timestamp":951043998546,"id":87,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":4,"timestamp":951043998678,"id":92,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":3,"timestamp":951043998686,"id":93,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":23,"timestamp":951043998704,"id":94,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":12,"timestamp":951043998727,"id":95,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":5,"timestamp":951043998737,"id":96,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":7,"timestamp":951043998745,"id":97,"parentId":85,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":367,"timestamp":951043998508,"id":85,"parentId":83,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":884,"timestamp":951043998013,"id":83,"parentId":62,"tags":{"name":"server"},"startTime":1764583687529,"traceId":"d91921d76e888ff4"},{"name":"start-dev-server","duration":1096251,"timestamp":951042904148,"id":1,"tags":{"cpus":"16","platform":"darwin","memory.freeMem":"1022132224","memory.totalMem":"68719476736","memory.heapSizeLimit":"34561064960","isTurbopack":false,"memory.rss":"249151488","memory.heapTotal":"103923712","memory.heapUsed":"88669016"},"startTime":1764583686436,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1966,"timestamp":951043998908,"id":98,"parentId":62,"tags":{},"startTime":1764583687530,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":48242,"timestamp":951043952844,"id":62,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583687484,"traceId":"d91921d76e888ff4"},{"name":"make","duration":97,"timestamp":951044002153,"id":100,"parentId":99,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":14,"timestamp":951044002360,"id":102,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951044002384,"id":104,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":5,"timestamp":951044002393,"id":105,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951044002404,"id":106,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951044002415,"id":107,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":48,"timestamp":951044002379,"id":103,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":3,"timestamp":951044002471,"id":108,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":3,"timestamp":951044002480,"id":109,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":25,"timestamp":951044002498,"id":110,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":13,"timestamp":951044002522,"id":111,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":8,"timestamp":951044002528,"id":112,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":7,"timestamp":951044002540,"id":113,"parentId":101,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":314,"timestamp":951044002341,"id":101,"parentId":99,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":791,"timestamp":951044001877,"id":99,"parentId":63,"tags":{"name":"edge-server"},"startTime":1764583687533,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2005,"timestamp":951044002687,"id":114,"parentId":63,"tags":{},"startTime":1764583687534,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-edge-server","duration":52186,"timestamp":951043952867,"id":63,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583687484,"traceId":"d91921d76e888ff4"}] +[{"name":"add-entry","duration":86995,"timestamp":951057855843,"id":120,"parentId":119,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764583701387,"traceId":"d91921d76e888ff4"},{"name":"make","duration":123108,"timestamp":951057853254,"id":119,"parentId":118,"tags":{},"startTime":1764583701385,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":2203,"timestamp":951057979883,"id":126,"parentId":125,"tags":{},"startTime":1764583701511,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":5,"timestamp":951057982100,"id":128,"parentId":125,"tags":{},"startTime":1764583701513,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1444,"timestamp":951057982113,"id":129,"parentId":125,"tags":{},"startTime":1764583701513,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951057983566,"id":130,"parentId":125,"tags":{},"startTime":1764583701515,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951057983576,"id":131,"parentId":125,"tags":{},"startTime":1764583701515,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1734,"timestamp":951057982096,"id":127,"parentId":125,"tags":{},"startTime":1764583701513,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":2811,"timestamp":951057985408,"id":132,"parentId":125,"tags":{},"startTime":1764583701517,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":771,"timestamp":951057988227,"id":133,"parentId":125,"tags":{},"startTime":1764583701520,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1998,"timestamp":951057990358,"id":134,"parentId":125,"tags":{},"startTime":1764583701522,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":88,"timestamp":951057992356,"id":135,"parentId":125,"tags":{},"startTime":1764583701524,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":36,"timestamp":951057992439,"id":136,"parentId":125,"tags":{},"startTime":1764583701524,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":7605,"timestamp":951057992478,"id":137,"parentId":125,"tags":{},"startTime":1764583701524,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":26211,"timestamp":951057979543,"id":125,"parentId":118,"tags":{},"startTime":1764583701511,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":154004,"timestamp":951057852528,"id":118,"parentId":116,"tags":{"name":"server"},"startTime":1764583701384,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2499,"timestamp":951058006556,"id":138,"parentId":116,"tags":{},"startTime":1764583701538,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":158994,"timestamp":951057850329,"id":116,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583701382,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":54620,"timestamp":951058013009,"id":141,"parentId":140,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764583701544,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":77938,"timestamp":951058013063,"id":143,"parentId":140,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583701544,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":82975,"timestamp":951058013090,"id":145,"parentId":140,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583701544,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":84296,"timestamp":951058013045,"id":142,"parentId":140,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764583701544,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":84359,"timestamp":951058013080,"id":144,"parentId":140,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583701544,"traceId":"d91921d76e888ff4"},{"name":"make","duration":86837,"timestamp":951058010635,"id":140,"parentId":139,"tags":{},"startTime":1764583701542,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1338,"timestamp":951058099203,"id":147,"parentId":146,"tags":{},"startTime":1764583701631,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951058100555,"id":149,"parentId":146,"tags":{},"startTime":1764583701632,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":25,"timestamp":951058100587,"id":150,"parentId":146,"tags":{},"startTime":1764583701632,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951058100620,"id":151,"parentId":146,"tags":{},"startTime":1764583701632,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951058100628,"id":152,"parentId":146,"tags":{},"startTime":1764583701632,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":272,"timestamp":951058100550,"id":148,"parentId":146,"tags":{},"startTime":1764583701632,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":2530,"timestamp":951058102010,"id":153,"parentId":146,"tags":{},"startTime":1764583701633,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":9555,"timestamp":951058104553,"id":154,"parentId":146,"tags":{},"startTime":1764583701636,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":3338,"timestamp":951058115698,"id":155,"parentId":146,"tags":{},"startTime":1764583701647,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":85,"timestamp":951058119036,"id":156,"parentId":146,"tags":{},"startTime":1764583701650,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":29,"timestamp":951058119112,"id":157,"parentId":146,"tags":{},"startTime":1764583701650,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":928,"timestamp":951058119144,"id":158,"parentId":146,"tags":{},"startTime":1764583701650,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":212,"timestamp":951058120916,"id":160,"parentId":139,"tags":{},"startTime":1764583701652,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":450,"timestamp":951058120680,"id":159,"parentId":139,"tags":{},"startTime":1764583701652,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":23502,"timestamp":951058098974,"id":146,"parentId":139,"tags":{},"startTime":1764583701630,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":112036,"timestamp":951058010457,"id":139,"parentId":124,"tags":{"name":"client"},"startTime":1764583701542,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1953,"timestamp":951058122503,"id":161,"parentId":124,"tags":{},"startTime":1764583701654,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":274663,"timestamp":951057850372,"id":117,"tags":{"trigger":"/gunbuilder","isTurbopack":false},"startTime":1764583701382,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":175618,"timestamp":951057949886,"id":124,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583701481,"traceId":"d91921d76e888ff4"}] +[{"name":"handle-request","duration":323646,"timestamp":951057839652,"id":115,"tags":{"url":"/gunbuilder?_rsc=2t5kv","isTurbopack":false},"startTime":1764583701371,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951058163341,"id":162,"parentId":115,"tags":{"url":"/gunbuilder?_rsc=2t5kv","memory.rss":"437714944","memory.heapUsed":"116438032","memory.heapTotal":"198164480"},"startTime":1764583701695,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":68709,"timestamp":951060524677,"id":163,"tags":{"url":"/gunbuilder","isTurbopack":false},"startTime":1764583704056,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951060593431,"id":164,"parentId":163,"tags":{"url":"/gunbuilder","memory.rss":"451166208","memory.heapUsed":"109579224","memory.heapTotal":"201310208"},"startTime":1764583704125,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":4,"timestamp":951060815907,"id":165,"parentId":3,"tags":{},"startTime":1764583704347,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":45297,"timestamp":951101773129,"id":171,"parentId":170,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764583745304,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":51027,"timestamp":951101773238,"id":172,"parentId":170,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764583745304,"traceId":"d91921d76e888ff4"},{"name":"make","duration":64764,"timestamp":951101769608,"id":170,"parentId":169,"tags":{},"startTime":1764583745301,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1089,"timestamp":951101836280,"id":181,"parentId":180,"tags":{},"startTime":1764583745367,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951101837391,"id":183,"parentId":180,"tags":{},"startTime":1764583745369,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1076,"timestamp":951101837431,"id":184,"parentId":180,"tags":{},"startTime":1764583745369,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":87,"timestamp":951101838538,"id":185,"parentId":180,"tags":{},"startTime":1764583745370,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951101838653,"id":186,"parentId":180,"tags":{},"startTime":1764583745370,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1464,"timestamp":951101837382,"id":182,"parentId":180,"tags":{},"startTime":1764583745369,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":328,"timestamp":951101839667,"id":187,"parentId":180,"tags":{},"startTime":1764583745371,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":536,"timestamp":951101840009,"id":188,"parentId":180,"tags":{},"startTime":1764583745371,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1575,"timestamp":951101841480,"id":189,"parentId":180,"tags":{},"startTime":1764583745373,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":87,"timestamp":951101843054,"id":190,"parentId":180,"tags":{},"startTime":1764583745374,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":29,"timestamp":951101843137,"id":191,"parentId":180,"tags":{},"startTime":1764583745374,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":587,"timestamp":951101843168,"id":192,"parentId":180,"tags":{},"startTime":1764583745374,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":8926,"timestamp":951101836113,"id":180,"parentId":169,"tags":{},"startTime":1764583745367,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":82566,"timestamp":951101763416,"id":169,"parentId":167,"tags":{"name":"server"},"startTime":1764583745295,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1208,"timestamp":951101846146,"id":193,"parentId":167,"tags":{},"startTime":1764583745377,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":97690,"timestamp":951101750171,"id":167,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583745281,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3249,"timestamp":951101852957,"id":196,"parentId":195,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4092,"timestamp":951101852991,"id":199,"parentId":195,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14584,"timestamp":951101852995,"id":200,"parentId":195,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15953,"timestamp":951101852980,"id":197,"parentId":195,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":15953,"timestamp":951101852987,"id":198,"parentId":195,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":27938,"timestamp":951101853001,"id":201,"parentId":195,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583745384,"traceId":"d91921d76e888ff4"},{"name":"make","duration":30736,"timestamp":951101850247,"id":195,"parentId":194,"tags":{},"startTime":1764583745381,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":752,"timestamp":951101881910,"id":203,"parentId":202,"tags":{},"startTime":1764583745413,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951101882673,"id":205,"parentId":202,"tags":{},"startTime":1764583745414,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":20,"timestamp":951101882707,"id":206,"parentId":202,"tags":{},"startTime":1764583745414,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951101882735,"id":207,"parentId":202,"tags":{},"startTime":1764583745414,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951101882747,"id":208,"parentId":202,"tags":{},"startTime":1764583745414,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":288,"timestamp":951101882669,"id":204,"parentId":202,"tags":{},"startTime":1764583745414,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":223,"timestamp":951101883416,"id":209,"parentId":202,"tags":{},"startTime":1764583745415,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":388,"timestamp":951101883645,"id":210,"parentId":202,"tags":{},"startTime":1764583745415,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2376,"timestamp":951101885124,"id":211,"parentId":202,"tags":{},"startTime":1764583745416,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":58,"timestamp":951101887500,"id":212,"parentId":202,"tags":{},"startTime":1764583745419,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":28,"timestamp":951101887553,"id":213,"parentId":202,"tags":{},"startTime":1764583745419,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":962,"timestamp":951101887584,"id":214,"parentId":202,"tags":{},"startTime":1764583745419,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":179,"timestamp":951101889514,"id":216,"parentId":194,"tags":{},"startTime":1764583745421,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":369,"timestamp":951101889328,"id":215,"parentId":194,"tags":{},"startTime":1764583745420,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":9208,"timestamp":951101881691,"id":202,"parentId":194,"tags":{},"startTime":1764583745413,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":41361,"timestamp":951101849564,"id":194,"parentId":179,"tags":{"name":"client"},"startTime":1764583745381,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1407,"timestamp":951101890944,"id":217,"parentId":179,"tags":{},"startTime":1764583745422,"traceId":"d91921d76e888ff4"},{"name":"compile-path","duration":142402,"timestamp":951101750424,"id":168,"tags":{"trigger":"/gunbuilder/[categoryId]","isTurbopack":false},"startTime":1764583745282,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":67853,"timestamp":951101825532,"id":179,"parentId":3,"tags":{"trigger":"manual"},"startTime":1764583745357,"traceId":"d91921d76e888ff4"}] +[{"name":"client-success","duration":3,"timestamp":951101894607,"id":218,"parentId":3,"tags":{},"startTime":1764583745426,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":90000,"timestamp":951101825554,"id":219,"parentId":3,"tags":{"updatedModules":[],"page":"/gunbuilder","isPageHidden":false},"startTime":1764583745448,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":274486,"timestamp":951101744461,"id":166,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","isTurbopack":false},"startTime":1764583745276,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951102018980,"id":220,"parentId":166,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","memory.rss":"336642048","memory.heapUsed":"127699584","memory.heapTotal":"141295616"},"startTime":1764583745550,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":7381,"timestamp":951102024996,"id":221,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","isTurbopack":false},"startTime":1764583745556,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951102032395,"id":222,"parentId":221,"tags":{"url":"/gunbuilder/barrel?_rsc=2b9yl","memory.rss":"337756160","memory.heapUsed":"128927904","memory.heapTotal":"142344192"},"startTime":1764583745564,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":17094,"timestamp":951109824778,"id":223,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764583753356,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":3,"timestamp":951109841977,"id":224,"parentId":223,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"339263488","memory.heapUsed":"130383720","memory.heapTotal":"143376384"},"startTime":1764583753373,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":24420,"timestamp":951121572916,"id":229,"parentId":228,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":26896,"timestamp":951121593921,"id":238,"parentId":237,"tags":{},"startTime":1764583765125,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":27764,"timestamp":951121593060,"id":237,"parentId":236,"tags":{},"startTime":1764583765124,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":44159,"timestamp":951121589486,"id":236,"parentId":227,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764583765121,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":62749,"timestamp":951121573060,"id":233,"parentId":228,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":62747,"timestamp":951121573066,"id":234,"parentId":228,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":62875,"timestamp":951121573037,"id":231,"parentId":228,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":64114,"timestamp":951121573022,"id":230,"parentId":228,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":108,"timestamp":951121638678,"id":240,"parentId":239,"tags":{},"startTime":1764583765170,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":118261,"timestamp":951121715142,"id":242,"parentId":241,"tags":{},"startTime":1764583765246,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":195145,"timestamp":951121638859,"id":241,"parentId":239,"tags":{},"startTime":1764583765170,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":13449,"timestamp":951121834093,"id":243,"parentId":239,"tags":{"astUsed":"true"},"startTime":1764583765365,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":217634,"timestamp":951121637316,"id":239,"parentId":235,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764583765168,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":278879,"timestamp":951121580170,"id":235,"parentId":227,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764583765111,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":36,"timestamp":951121859151,"id":244,"parentId":235,"tags":{},"startTime":1764583765390,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":286156,"timestamp":951121573052,"id":232,"parentId":228,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764583765104,"traceId":"d91921d76e888ff4"},{"name":"make","duration":286798,"timestamp":951121572421,"id":228,"parentId":227,"tags":{},"startTime":1764583765103,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":613,"timestamp":951121860194,"id":246,"parentId":245,"tags":{},"startTime":1764583765391,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":4,"timestamp":951121860818,"id":248,"parentId":245,"tags":{},"startTime":1764583765392,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":24,"timestamp":951121860828,"id":249,"parentId":245,"tags":{},"startTime":1764583765392,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951121860859,"id":250,"parentId":245,"tags":{},"startTime":1764583765392,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951121860870,"id":251,"parentId":245,"tags":{},"startTime":1764583765392,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":251,"timestamp":951121860814,"id":247,"parentId":245,"tags":{},"startTime":1764583765392,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":183,"timestamp":951121861450,"id":252,"parentId":245,"tags":{},"startTime":1764583765393,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1348,"timestamp":951121861638,"id":253,"parentId":245,"tags":{},"startTime":1764583765393,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1574,"timestamp":951121863480,"id":254,"parentId":245,"tags":{},"startTime":1764583765395,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":50,"timestamp":951121865055,"id":255,"parentId":245,"tags":{},"startTime":1764583765396,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":31,"timestamp":951121865101,"id":256,"parentId":245,"tags":{},"startTime":1764583765396,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":5707,"timestamp":951121865135,"id":257,"parentId":245,"tags":{},"startTime":1764583765396,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":28,"timestamp":951121871379,"id":259,"parentId":227,"tags":{},"startTime":1764583765402,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":102,"timestamp":951121871307,"id":258,"parentId":227,"tags":{},"startTime":1764583765402,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":12148,"timestamp":951121859953,"id":245,"parentId":227,"tags":{},"startTime":1764583765391,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":301229,"timestamp":951121570890,"id":227,"parentId":225,"tags":{"name":"client"},"startTime":1764583765102,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2458,"timestamp":951121872128,"id":260,"parentId":225,"tags":{},"startTime":1764583765403,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":313588,"timestamp":951121561401,"id":225,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764583765092,"traceId":"d91921d76e888ff4"},{"name":"client-success","duration":2,"timestamp":951121877736,"id":263,"parentId":3,"tags":{},"startTime":1764583765409,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":4229,"timestamp":951121879087,"id":264,"parentId":262,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764583765410,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":1480,"timestamp":951121882330,"id":268,"parentId":267,"tags":{},"startTime":1764583765413,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":1606,"timestamp":951121882209,"id":267,"parentId":266,"tags":{},"startTime":1764583765413,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":3622,"timestamp":951121881727,"id":266,"parentId":261,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764583765413,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":6683,"timestamp":951121879110,"id":265,"parentId":262,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764583765410,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2978,"timestamp":951121887750,"id":277,"parentId":276,"tags":{},"startTime":1764583765419,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":3077,"timestamp":951121887657,"id":276,"parentId":275,"tags":{},"startTime":1764583765419,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":8487,"timestamp":951121887300,"id":275,"parentId":261,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764583765418,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":334000,"timestamp":951121561857,"id":278,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder/barrel","isPageHidden":true},"startTime":1764583765428,"traceId":"d91921d76e888ff4"},{"name":"make","duration":19774,"timestamp":951121877137,"id":262,"parentId":261,"tags":{},"startTime":1764583765408,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":770,"timestamp":951121898408,"id":280,"parentId":279,"tags":{},"startTime":1764583765429,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951121899186,"id":282,"parentId":279,"tags":{},"startTime":1764583765430,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1090,"timestamp":951121899235,"id":283,"parentId":279,"tags":{},"startTime":1764583765430,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":2,"timestamp":951121900333,"id":284,"parentId":279,"tags":{},"startTime":1764583765431,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951121900347,"id":285,"parentId":279,"tags":{},"startTime":1764583765431,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1448,"timestamp":951121899183,"id":281,"parentId":279,"tags":{},"startTime":1764583765430,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":285,"timestamp":951121901230,"id":286,"parentId":279,"tags":{},"startTime":1764583765432,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1029,"timestamp":951121901521,"id":287,"parentId":279,"tags":{},"startTime":1764583765433,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":918,"timestamp":951121903145,"id":288,"parentId":279,"tags":{},"startTime":1764583765434,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":43,"timestamp":951121904063,"id":289,"parentId":279,"tags":{},"startTime":1764583765435,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":36,"timestamp":951121904102,"id":290,"parentId":279,"tags":{},"startTime":1764583765435,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2339,"timestamp":951121904141,"id":291,"parentId":279,"tags":{},"startTime":1764583765435,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10463,"timestamp":951121898188,"id":279,"parentId":261,"tags":{},"startTime":1764583765429,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":32844,"timestamp":951121876754,"id":261,"parentId":226,"tags":{"name":"server"},"startTime":1764583765408,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1298,"timestamp":951121909611,"id":292,"parentId":226,"tags":{},"startTime":1764583765441,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":349406,"timestamp":951121562006,"id":226,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764583765093,"traceId":"d91921d76e888ff4"}] +[{"name":"handle-request","duration":10525,"timestamp":951121914287,"id":293,"tags":{"url":"/gunbuilder/barrel?_rsc=1o01i","isTurbopack":false},"startTime":1764583765445,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951121924850,"id":294,"parentId":293,"tags":{"url":"/gunbuilder/barrel?_rsc=1o01i","memory.rss":"449085440","memory.heapUsed":"167166600","memory.heapTotal":"213975040"},"startTime":1764583765456,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":20576,"timestamp":951132319168,"id":295,"tags":{"url":"/gunbuilder/upper?_rsc=1acsq","isTurbopack":false},"startTime":1764583775850,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":6,"timestamp":951132339863,"id":296,"parentId":295,"tags":{"url":"/gunbuilder/upper?_rsc=1acsq","memory.rss":"381452288","memory.heapUsed":"136287008","memory.heapTotal":"141656064"},"startTime":1764583775871,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":8955,"timestamp":951132344239,"id":297,"tags":{"url":"/gunbuilder/upper?_rsc=17gjd","isTurbopack":false},"startTime":1764583775875,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951132353230,"id":298,"parentId":297,"tags":{"url":"/gunbuilder/upper?_rsc=17gjd","memory.rss":"382353408","memory.heapUsed":"137217568","memory.heapTotal":"142442496"},"startTime":1764583775884,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":12723,"timestamp":951164303987,"id":299,"tags":{"url":"/gunbuilder?_rsc=x5p1f","isTurbopack":false},"startTime":1764583807835,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951164316770,"id":300,"parentId":299,"tags":{"url":"/gunbuilder?_rsc=x5p1f","memory.rss":"366329856","memory.heapUsed":"136790288","memory.heapTotal":"141393920"},"startTime":1764583807848,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":14693,"timestamp":951506051940,"id":305,"parentId":304,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584149581,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2293,"timestamp":951506065265,"id":309,"parentId":308,"tags":{},"startTime":1764584149595,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2642,"timestamp":951506064923,"id":308,"parentId":307,"tags":{},"startTime":1764584149594,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6582,"timestamp":951506064246,"id":307,"parentId":303,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764584149594,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19757,"timestamp":951506052022,"id":306,"parentId":304,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584149582,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":5133,"timestamp":951506074050,"id":318,"parentId":317,"tags":{},"startTime":1764584149604,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":5254,"timestamp":951506073936,"id":317,"parentId":316,"tags":{},"startTime":1764584149603,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":17206,"timestamp":951506073806,"id":316,"parentId":303,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764584149603,"traceId":"d91921d76e888ff4"},{"name":"make","duration":43117,"timestamp":951506048938,"id":304,"parentId":303,"tags":{},"startTime":1764584149578,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":1416,"timestamp":951506112708,"id":320,"parentId":319,"tags":{},"startTime":1764584149642,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":5,"timestamp":951506114163,"id":322,"parentId":319,"tags":{},"startTime":1764584149644,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":1056,"timestamp":951506114220,"id":323,"parentId":319,"tags":{},"startTime":1764584149644,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":65,"timestamp":951506115315,"id":324,"parentId":319,"tags":{},"startTime":1764584149645,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":4,"timestamp":951506115417,"id":325,"parentId":319,"tags":{},"startTime":1764584149645,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1535,"timestamp":951506114150,"id":321,"parentId":319,"tags":{},"startTime":1764584149644,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":285,"timestamp":951506116903,"id":326,"parentId":319,"tags":{},"startTime":1764584149646,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1218,"timestamp":951506117203,"id":327,"parentId":319,"tags":{},"startTime":1764584149647,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1127,"timestamp":951506119240,"id":328,"parentId":319,"tags":{},"startTime":1764584149649,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":73,"timestamp":951506120367,"id":329,"parentId":319,"tags":{},"startTime":1764584149650,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":51,"timestamp":951506120434,"id":330,"parentId":319,"tags":{},"startTime":1764584149650,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":3403,"timestamp":951506120488,"id":331,"parentId":319,"tags":{},"startTime":1764584149650,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":12780,"timestamp":951506112432,"id":319,"parentId":303,"tags":{},"startTime":1764584149642,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":84382,"timestamp":951506042098,"id":303,"parentId":301,"tags":{"name":"server"},"startTime":1764584149572,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1476,"timestamp":951506126631,"id":332,"parentId":301,"tags":{},"startTime":1764584149656,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":106061,"timestamp":951506022639,"id":301,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764584149552,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3453,"timestamp":951506134282,"id":335,"parentId":334,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5505,"timestamp":951506134330,"id":339,"parentId":334,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":899,"timestamp":951506138954,"id":346,"parentId":345,"tags":{},"startTime":1764584149668,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10583,"timestamp":951506134322,"id":336,"parentId":334,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":10586,"timestamp":951506134326,"id":337,"parentId":334,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":8286,"timestamp":951506136771,"id":344,"parentId":343,"tags":{},"startTime":1764584149666,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":8397,"timestamp":951506136662,"id":343,"parentId":342,"tags":{},"startTime":1764584149666,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":16092,"timestamp":951506136572,"id":342,"parentId":333,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764584149666,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":19194,"timestamp":951506134332,"id":340,"parentId":334,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":28397,"timestamp":951506139899,"id":348,"parentId":347,"tags":{},"startTime":1764584149669,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":28743,"timestamp":951506139878,"id":347,"parentId":345,"tags":{},"startTime":1764584149669,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3620,"timestamp":951506168646,"id":349,"parentId":345,"tags":{"astUsed":"true"},"startTime":1764584149698,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":34541,"timestamp":951506138794,"id":345,"parentId":341,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764584149668,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":40317,"timestamp":951506135918,"id":341,"parentId":333,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764584149665,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":34,"timestamp":951506176380,"id":350,"parentId":341,"tags":{},"startTime":1764584149706,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":42106,"timestamp":951506134328,"id":338,"parentId":334,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584149664,"traceId":"d91921d76e888ff4"},{"name":"make","duration":45378,"timestamp":951506131063,"id":334,"parentId":333,"tags":{},"startTime":1764584149661,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":904,"timestamp":951506182909,"id":352,"parentId":351,"tags":{},"startTime":1764584149712,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":4,"timestamp":951506183833,"id":354,"parentId":351,"tags":{},"startTime":1764584149713,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":37,"timestamp":951506183874,"id":355,"parentId":351,"tags":{},"startTime":1764584149713,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":9,"timestamp":951506183922,"id":356,"parentId":351,"tags":{},"startTime":1764584149713,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":6,"timestamp":951506183940,"id":357,"parentId":351,"tags":{},"startTime":1764584149713,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":412,"timestamp":951506183829,"id":353,"parentId":351,"tags":{},"startTime":1764584149713,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":276,"timestamp":951506193018,"id":358,"parentId":351,"tags":{},"startTime":1764584149723,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1205,"timestamp":951506193302,"id":359,"parentId":351,"tags":{},"startTime":1764584149723,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":2066,"timestamp":951506195293,"id":360,"parentId":351,"tags":{},"startTime":1764584149725,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":60,"timestamp":951506197358,"id":361,"parentId":351,"tags":{},"startTime":1764584149727,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":43,"timestamp":951506197407,"id":362,"parentId":351,"tags":{},"startTime":1764584149727,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":2538,"timestamp":951506197453,"id":363,"parentId":351,"tags":{},"startTime":1764584149727,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":182,"timestamp":951506200855,"id":365,"parentId":333,"tags":{},"startTime":1764584149730,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":321,"timestamp":951506200719,"id":364,"parentId":333,"tags":{},"startTime":1764584149730,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":19193,"timestamp":951506182587,"id":351,"parentId":333,"tags":{},"startTime":1764584149712,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":71334,"timestamp":951506130464,"id":333,"parentId":302,"tags":{"name":"client"},"startTime":1764584149660,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2018,"timestamp":951506201808,"id":366,"parentId":302,"tags":{},"startTime":1764584149731,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":180916,"timestamp":951506023833,"id":302,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764584149553,"traceId":"d91921d76e888ff4"}] +[{"name":"client-success","duration":4,"timestamp":951506205888,"id":367,"parentId":3,"tags":{},"startTime":1764584149735,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":14701,"timestamp":951506207895,"id":368,"tags":{"url":"/gunbuilder?_rsc=9gfev","isTurbopack":false},"startTime":1764584149737,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":0,"timestamp":951506222623,"id":369,"parentId":368,"tags":{"url":"/gunbuilder?_rsc=9gfev","memory.rss":"404570112","memory.heapUsed":"151000976","memory.heapTotal":"171442176"},"startTime":1764584149752,"traceId":"d91921d76e888ff4"},{"name":"client-hmr-latency","duration":203000,"timestamp":951506025092,"id":370,"parentId":3,"tags":{"updatedModules":["[project]/app/gunbuilder/[categoryId]/page.tsx"],"page":"/gunbuilder","isPageHidden":true},"startTime":1764584149759,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":25484,"timestamp":951516725409,"id":371,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","isTurbopack":false},"startTime":1764584160255,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":3,"timestamp":951516751571,"id":372,"parentId":371,"tags":{"url":"/gunbuilder/barrel?_rsc=1acsq","memory.rss":"406945792","memory.heapUsed":"153265112","memory.heapTotal":"174063616"},"startTime":1764584160281,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":12668,"timestamp":951531722570,"id":373,"tags":{"url":"/gunbuilder?_rsc=2t5kv","isTurbopack":false},"startTime":1764584175252,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951531735320,"id":374,"parentId":373,"tags":{"url":"/gunbuilder?_rsc=2t5kv","memory.rss":"407617536","memory.heapUsed":"154017488","memory.heapTotal":"174850048"},"startTime":1764584175265,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":14123,"timestamp":951533624603,"id":375,"tags":{"url":"/gunbuilder/handguard?_rsc=1jn8g","isTurbopack":false},"startTime":1764584177154,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":2,"timestamp":951533638806,"id":376,"parentId":375,"tags":{"url":"/gunbuilder/handguard?_rsc=1jn8g","memory.rss":"407928832","memory.heapUsed":"154876480","memory.heapTotal":"175636480"},"startTime":1764584177168,"traceId":"d91921d76e888ff4"},{"name":"handle-request","duration":11204,"timestamp":951533641802,"id":377,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","isTurbopack":false},"startTime":1764584177171,"traceId":"d91921d76e888ff4"},{"name":"memory-usage","duration":1,"timestamp":951533653036,"id":378,"parentId":377,"tags":{"url":"/gunbuilder/handguard?_rsc=rs5ev","memory.rss":"406962176","memory.heapUsed":"142113576","memory.heapTotal":"151273472"},"startTime":1764584177182,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":13912,"timestamp":951718469218,"id":384,"parentId":382,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2Fpage&page=%2Fgunbuilder%2Fpage&appPaths=%2Fgunbuilder%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584361998,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":2285,"timestamp":951718482351,"id":387,"parentId":386,"tags":{},"startTime":1764584362011,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":2708,"timestamp":951718481933,"id":386,"parentId":385,"tags":{},"startTime":1764584362011,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":6229,"timestamp":951718481296,"id":385,"parentId":381,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"rsc"},"startTime":1764584362010,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":18658,"timestamp":951718469142,"id":383,"parentId":382,"tags":{"request":"next-app-loader?name=app%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&page=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&appPaths=%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage&pagePath=private-next-app-dir%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx&appDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1764584361998,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":4853,"timestamp":951718490939,"id":396,"parentId":395,"tags":{},"startTime":1764584362020,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":5081,"timestamp":951718490716,"id":395,"parentId":394,"tags":{},"startTime":1764584362019,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":16602,"timestamp":951718490433,"id":394,"parentId":381,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"ssr"},"startTime":1764584362019,"traceId":"d91921d76e888ff4"},{"name":"make","duration":41589,"timestamp":951718466601,"id":382,"parentId":381,"tags":{},"startTime":1764584361995,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":787,"timestamp":951718529163,"id":398,"parentId":397,"tags":{},"startTime":1764584362058,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":3,"timestamp":951718529976,"id":400,"parentId":397,"tags":{},"startTime":1764584362059,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":879,"timestamp":951718530017,"id":401,"parentId":397,"tags":{},"startTime":1764584362059,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":60,"timestamp":951718530935,"id":402,"parentId":397,"tags":{},"startTime":1764584362060,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":3,"timestamp":951718531025,"id":403,"parentId":397,"tags":{},"startTime":1764584362060,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":1241,"timestamp":951718529967,"id":399,"parentId":397,"tags":{},"startTime":1764584362059,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":251,"timestamp":951718531716,"id":404,"parentId":397,"tags":{},"startTime":1764584362060,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1320,"timestamp":951718531981,"id":405,"parentId":397,"tags":{},"startTime":1764584362061,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1145,"timestamp":951718534202,"id":406,"parentId":397,"tags":{},"startTime":1764584362063,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":60,"timestamp":951718535347,"id":407,"parentId":397,"tags":{},"startTime":1764584362064,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":49,"timestamp":951718535402,"id":408,"parentId":397,"tags":{},"startTime":1764584362064,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":3285,"timestamp":951718535454,"id":409,"parentId":397,"tags":{},"startTime":1764584362064,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10789,"timestamp":951718528931,"id":397,"parentId":381,"tags":{},"startTime":1764584362058,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":80769,"timestamp":951718460067,"id":381,"parentId":379,"tags":{"name":"server"},"startTime":1764584361989,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":1360,"timestamp":951718540982,"id":410,"parentId":379,"tags":{},"startTime":1764584362070,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-server","duration":102926,"timestamp":951718439976,"id":379,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764584361969,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":3017,"timestamp":951718547528,"id":413,"parentId":412,"tags":{"request":"/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":5377,"timestamp":951718547566,"id":417,"parentId":412,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fapp-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"read-resource","duration":1483,"timestamp":951718551477,"id":424,"parentId":423,"tags":{},"startTime":1764584362080,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9349,"timestamp":951718547560,"id":414,"parentId":412,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":9350,"timestamp":951718547563,"id":415,"parentId":412,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"next-swc-transform","duration":7274,"timestamp":951718549763,"id":422,"parentId":421,"tags":{},"startTime":1764584362078,"traceId":"d91921d76e888ff4"},{"name":"next-swc-loader","duration":7392,"timestamp":951718549647,"id":421,"parentId":420,"tags":{},"startTime":1764584362078,"traceId":"d91921d76e888ff4"},{"name":"build-module-tsx","duration":14333,"timestamp":951718549550,"id":420,"parentId":411,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/page.tsx","layer":"app-pages-browser"},"startTime":1764584362078,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":17117,"timestamp":951718547568,"id":418,"parentId":412,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fgunbuilder%2F%5BcategoryId%5D%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"postcss-process","duration":26813,"timestamp":951718553001,"id":426,"parentId":425,"tags":{},"startTime":1764584362082,"traceId":"d91921d76e888ff4"},{"name":"postcss-loader","duration":27164,"timestamp":951718552984,"id":425,"parentId":423,"tags":{},"startTime":1764584362082,"traceId":"d91921d76e888ff4"},{"name":"css-loader","duration":3394,"timestamp":951718580171,"id":427,"parentId":423,"tags":{"astUsed":"true"},"startTime":1764584362109,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":32833,"timestamp":951718551342,"id":423,"parentId":419,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css.webpack[javascript/auto]!=!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!/Users/sean/Dev/gunbuilder-prototype/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":null},"startTime":1764584362080,"traceId":"d91921d76e888ff4"},{"name":"build-module-css","duration":39209,"timestamp":951718548998,"id":419,"parentId":411,"tags":{"name":"/Users/sean/Dev/gunbuilder-prototype/app/globals.css","layer":"app-pages-browser"},"startTime":1764584362078,"traceId":"d91921d76e888ff4"},{"name":"build-module","duration":30,"timestamp":951718588340,"id":428,"parentId":419,"tags":{},"startTime":1764584362117,"traceId":"d91921d76e888ff4"},{"name":"add-entry","duration":40826,"timestamp":951718547565,"id":416,"parentId":412,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fsean%2FDev%2Fgunbuilder-prototype%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1764584362076,"traceId":"d91921d76e888ff4"},{"name":"make","duration":43244,"timestamp":951718545156,"id":412,"parentId":411,"tags":{},"startTime":1764584362074,"traceId":"d91921d76e888ff4"},{"name":"chunk-graph","duration":636,"timestamp":951718608808,"id":430,"parentId":429,"tags":{},"startTime":1764584362137,"traceId":"d91921d76e888ff4"},{"name":"optimize-modules","duration":2,"timestamp":951718609457,"id":432,"parentId":429,"tags":{},"startTime":1764584362138,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunks","duration":31,"timestamp":951718609489,"id":433,"parentId":429,"tags":{},"startTime":1764584362138,"traceId":"d91921d76e888ff4"},{"name":"optimize-tree","duration":3,"timestamp":951718609532,"id":434,"parentId":429,"tags":{},"startTime":1764584362138,"traceId":"d91921d76e888ff4"},{"name":"optimize-chunk-modules","duration":2,"timestamp":951718609544,"id":435,"parentId":429,"tags":{},"startTime":1764584362138,"traceId":"d91921d76e888ff4"},{"name":"optimize","duration":284,"timestamp":951718609454,"id":431,"parentId":429,"tags":{},"startTime":1764584362138,"traceId":"d91921d76e888ff4"},{"name":"module-hash","duration":242,"timestamp":951718610112,"id":436,"parentId":429,"tags":{},"startTime":1764584362139,"traceId":"d91921d76e888ff4"},{"name":"code-generation","duration":1021,"timestamp":951718610359,"id":437,"parentId":429,"tags":{},"startTime":1764584362139,"traceId":"d91921d76e888ff4"},{"name":"hash","duration":1796,"timestamp":951718612043,"id":438,"parentId":429,"tags":{},"startTime":1764584362141,"traceId":"d91921d76e888ff4"},{"name":"code-generation-jobs","duration":52,"timestamp":951718613839,"id":439,"parentId":429,"tags":{},"startTime":1764584362142,"traceId":"d91921d76e888ff4"},{"name":"module-assets","duration":38,"timestamp":951718613887,"id":440,"parentId":429,"tags":{},"startTime":1764584362143,"traceId":"d91921d76e888ff4"},{"name":"create-chunk-assets","duration":3282,"timestamp":951718613928,"id":441,"parentId":429,"tags":{},"startTime":1764584362143,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-generateClientManifest","duration":181,"timestamp":951718617984,"id":443,"parentId":411,"tags":{},"startTime":1764584362147,"traceId":"d91921d76e888ff4"},{"name":"NextJsBuildManifest-createassets","duration":314,"timestamp":951718617854,"id":442,"parentId":411,"tags":{},"startTime":1764584362147,"traceId":"d91921d76e888ff4"},{"name":"seal","duration":10296,"timestamp":951718608573,"id":429,"parentId":411,"tags":{},"startTime":1764584362137,"traceId":"d91921d76e888ff4"},{"name":"webpack-compilation","duration":74323,"timestamp":951718544563,"id":411,"parentId":380,"tags":{"name":"client"},"startTime":1764584362073,"traceId":"d91921d76e888ff4"},{"name":"emit","duration":2016,"timestamp":951718618901,"id":444,"parentId":380,"tags":{},"startTime":1764584362148,"traceId":"d91921d76e888ff4"},{"name":"webpack-invalidated-client","duration":181702,"timestamp":951718440219,"id":380,"parentId":3,"tags":{"trigger":"app/gunbuilder/[categoryId]/page.tsx"},"startTime":1764584361969,"traceId":"d91921d76e888ff4"}] diff --git a/.next/types/app/gunbuilder/[categoryId]/[partId]/page.ts b/.next/types/app/gunbuilder/[categoryId]/[partId]/page.ts deleted file mode 100644 index 80b6959..0000000 --- a/.next/types/app/gunbuilder/[categoryId]/[partId]/page.ts +++ /dev/null @@ -1,79 +0,0 @@ -// File: /Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/[categoryId]/[partId]/page.tsx -import * as entry from '../../../../../../app/gunbuilder/[categoryId]/[partId]/page.js' -import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js' - -type TEntry = typeof import('../../../../../../app/gunbuilder/[categoryId]/[partId]/page.js') - -// Check that the entry is a valid entry -checkFields | false - dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static' - dynamicParams?: boolean - fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache' - preferredRegion?: 'auto' | 'global' | 'home' | string | string[] - runtime?: 'nodejs' | 'experimental-edge' | 'edge' - maxDuration?: number - - metadata?: any - generateMetadata?: Function - viewport?: any - generateViewport?: Function - -}, TEntry, ''>>() - -// Check the prop type of the entry function -checkFields, 'default'>>() - -// Check the arguments and return type of the generateMetadata function -if ('generateMetadata' in entry) { - checkFields>, 'generateMetadata'>>() - checkFields>, 'generateMetadata'>>() -} - -// Check the arguments and return type of the generateViewport function -if ('generateViewport' in entry) { - checkFields>, 'generateViewport'>>() - checkFields>, 'generateViewport'>>() -} - -// Check the arguments and return type of the generateStaticParams function -if ('generateStaticParams' in entry) { - checkFields>, 'generateStaticParams'>>() - checkFields }, { __tag__: 'generateStaticParams', __return_type__: ReturnType> }>>() -} - -type PageParams = any -export interface PageProps { - params?: any - searchParams?: any -} -export interface LayoutProps { - children?: React.ReactNode - - params?: any -} - -// ============= -// Utility types -type RevalidateRange = T extends { revalidate: any } ? NonNegative : never - -// If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit. -type OmitWithTag = Omit -type Diff = 0 extends (1 & T) ? {} : OmitWithTag - -type FirstArg = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never -type SecondArg = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never -type MaybeField = T extends { [k in K]: infer G } ? G extends Function ? G : never : never - - - -function checkFields<_ extends { [k in keyof any]: never }>() {} - -// https://github.com/sindresorhus/type-fest -type Numeric = number | bigint -type Zero = 0 | 0n -type Negative = T extends Zero ? never : `${T}` extends `-${string}` ? T : never -type NonNegative = T extends Zero ? T : Negative extends never ? T : '__invalid_negative_number__' diff --git a/.next/types/app/gunbuilder/build/page.ts b/.next/types/app/gunbuilder/build/page.ts deleted file mode 100644 index 4110657..0000000 --- a/.next/types/app/gunbuilder/build/page.ts +++ /dev/null @@ -1,79 +0,0 @@ -// File: /Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/build/page.tsx -import * as entry from '../../../../../app/gunbuilder/build/page.js' -import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js' - -type TEntry = typeof import('../../../../../app/gunbuilder/build/page.js') - -// Check that the entry is a valid entry -checkFields | false - dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static' - dynamicParams?: boolean - fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache' - preferredRegion?: 'auto' | 'global' | 'home' | string | string[] - runtime?: 'nodejs' | 'experimental-edge' | 'edge' - maxDuration?: number - - metadata?: any - generateMetadata?: Function - viewport?: any - generateViewport?: Function - -}, TEntry, ''>>() - -// Check the prop type of the entry function -checkFields, 'default'>>() - -// Check the arguments and return type of the generateMetadata function -if ('generateMetadata' in entry) { - checkFields>, 'generateMetadata'>>() - checkFields>, 'generateMetadata'>>() -} - -// Check the arguments and return type of the generateViewport function -if ('generateViewport' in entry) { - checkFields>, 'generateViewport'>>() - checkFields>, 'generateViewport'>>() -} - -// Check the arguments and return type of the generateStaticParams function -if ('generateStaticParams' in entry) { - checkFields>, 'generateStaticParams'>>() - checkFields }, { __tag__: 'generateStaticParams', __return_type__: ReturnType> }>>() -} - -type PageParams = any -export interface PageProps { - params?: any - searchParams?: any -} -export interface LayoutProps { - children?: React.ReactNode - - params?: any -} - -// ============= -// Utility types -type RevalidateRange = T extends { revalidate: any } ? NonNegative : never - -// If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit. -type OmitWithTag = Omit -type Diff = 0 extends (1 & T) ? {} : OmitWithTag - -type FirstArg = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never -type SecondArg = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never -type MaybeField = T extends { [k in K]: infer G } ? G extends Function ? G : never : never - - - -function checkFields<_ extends { [k in keyof any]: never }>() {} - -// https://github.com/sindresorhus/type-fest -type Numeric = number | bigint -type Zero = 0 | 0n -type Negative = T extends Zero ? never : `${T}` extends `-${string}` ? T : never -type NonNegative = T extends Zero ? T : Negative extends never ? T : '__invalid_negative_number__' diff --git a/app/gunbuilder/[categoryId]/page.tsx b/app/gunbuilder/[categoryId]/page.tsx index 2645611..2b0cb37 100644 --- a/app/gunbuilder/[categoryId]/page.tsx +++ b/app/gunbuilder/[categoryId]/page.tsx @@ -32,10 +32,10 @@ const CATEGORY_TO_PART_ROLES: Record = { sights: ["sight"], }; -// NEW: sort options +// sort options type SortOption = "relevance" | "price-asc" | "price-desc" | "brand-asc"; -// NEW: build state type + storage key (matches /gunbuilder) +// build state type + storage key (matches /gunbuilder) type BuildState = Partial>; const STORAGE_KEY = "gunbuilder-build-state"; @@ -49,11 +49,12 @@ export default function CategoryPage() { const [loading, setLoading] = useState(true); const [error, setError] = useState(null); - // NEW: filter + sort state + // filter + sort state const [brandFilter, setBrandFilter] = useState("all"); const [sortBy, setSortBy] = useState("relevance"); + const [searchQuery, setSearchQuery] = useState(""); - // NEW: build state for this page, synced with localStorage + // build state for this page, synced with localStorage const [build, setBuild] = useState(() => { if (typeof window === "undefined") return {}; try { @@ -122,7 +123,7 @@ export default function CategoryPage() { return () => controller.abort(); }, [categoryId]); - // NEW: persist build to localStorage whenever it changes + // persist build to localStorage whenever it changes useEffect(() => { if (typeof window === "undefined") return; try { @@ -132,7 +133,7 @@ export default function CategoryPage() { } }, [build]); - // NEW: handler to toggle Add / Remove for this category + // handler to toggle Add / Remove for this category const handleTogglePart = (categoryId: CategoryId, partId: string) => { const isSelected = build[categoryId] === partId; @@ -153,7 +154,7 @@ export default function CategoryPage() { } }; - // NEW: available brands for filter + // available brands for filter const availableBrands = useMemo( () => Array.from(new Set(parts.map((p) => p.brand))) @@ -162,7 +163,7 @@ export default function CategoryPage() { [parts], ); - // NEW: filtered + sorted parts + // filtered + sorted parts with selected part pinned to top const filteredParts = useMemo(() => { let result = [...parts]; @@ -170,6 +171,18 @@ export default function CategoryPage() { result = result.filter((p) => p.brand === brandFilter); } + const normalizedQuery = searchQuery.trim().toLowerCase(); + if (normalizedQuery) { + result = result.filter((p) => { + const name = p.name.toLowerCase(); + const brand = p.brand.toLowerCase(); + return ( + name.includes(normalizedQuery) || + brand.includes(normalizedQuery) + ); + }); + } + switch (sortBy) { case "price-asc": result.sort((a, b) => a.price - b.price); @@ -186,8 +199,16 @@ export default function CategoryPage() { break; } + // Pin the currently selected part (for this category) to the top, if any + const selectedId = build[categoryId]; + if (selectedId) { + const selected = result.filter((p) => p.id === selectedId); + const others = result.filter((p) => p.id !== selectedId); + result = [...selected, ...others]; + } + return result; - }, [parts, brandFilter, sortBy]); + }, [parts, brandFilter, sortBy, build, categoryId, searchQuery]); if (!category) { return ( @@ -281,6 +302,31 @@ export default function CategoryPage() { parts
+
+ +
+ setSearchQuery(e.target.value)} + placeholder={`Search ${category.name.toLowerCase()}...`} + className="rounded-md border border-zinc-700 bg-zinc-900/70 text-xs text-zinc-200 px-2 py-1 pr-6 focus:outline-none focus:ring-1 focus:ring-amber-400" + /> + {searchQuery && ( + + )} +
+