Files
shadow-gunbuilder-ai-proto/.next/server/app/gunbuilder/page.js
T
2025-12-03 21:16:35 -05:00

289 lines
240 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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/page";
exports.ids = ["app/gunbuilder/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%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!":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?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! ***!
\**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__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: ['__PAGE__', {}, {\n page: [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/gunbuilder/page.tsx */ \"(rsc)/./app/gunbuilder/page.tsx\")), \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\"],\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/page.tsx\"];\n\n\nconst __next_app_require__ = __webpack_require__\nconst __next_app_load_chunk__ = () => Promise.resolve()\nconst originalPathname = \"/gunbuilder/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/page\",\n pathname: \"/gunbuilder\",\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/bmFtZT1hcHAlMkZndW5idWlsZGVyJTJGcGFnZSZwYWdlPSUyRmd1bmJ1aWxkZXIlMkZwYWdlJmFwcFBhdGhzPSUyRmd1bmJ1aWxkZXIlMkZwYWdlJnBhZ2VQYXRoPXByaXZhdGUtbmV4dC1hcHAtZGlyJTJGZ3VuYnVpbGRlciUyRnBhZ2UudHN4JmFwcERpcj0lMkZVc2VycyUyRnNlYW4lMkZEZXYlMkZndW5idWlsZGVyLXByb3RvdHlwZSUyRmFwcCZwYWdlRXh0ZW5zaW9ucz10c3gmcGFnZUV4dGVuc2lvbnM9dHMmcGFnZUV4dGVuc2lvbnM9anN4JnBhZ2VFeHRlbnNpb25zPWpzJnJvb3REaXI9JTJGVXNlcnMlMkZzZWFuJTJGRGV2JTJGZ3VuYnVpbGRlci1wcm90b3R5cGUmaXNEZXY9dHJ1ZSZ0c2NvbmZpZ1BhdGg9dHNjb25maWcuanNvbiZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0QhIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxhQUFhLHNCQUFzQjtBQUNpRTtBQUNyQztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsdUJBQXVCLDhKQUFpRztBQUN4SDtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHlCQUF5Qiw0SUFBd0Y7QUFDakgsb0JBQW9CLDBOQUFnRjtBQUNwRztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDdUI7QUFDNkQ7QUFDcEYsNkJBQTZCLG1CQUFtQjtBQUNoRDtBQUNPO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDdUQ7QUFDdkQ7QUFDTyx3QkFBd0IsOEdBQWtCO0FBQ2pEO0FBQ0EsY0FBYyx5RUFBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLz9kZTI0Il0sInNvdXJjZXNDb250ZW50IjpbIlwiVFVSQk9QQUNLIHsgdHJhbnNpdGlvbjogbmV4dC1zc3IgfVwiO1xuaW1wb3J0IHsgQXBwUGFnZVJvdXRlTW9kdWxlIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLW1vZHVsZXMvYXBwLXBhZ2UvbW9kdWxlLmNvbXBpbGVkXCI7XG5pbXBvcnQgeyBSb3V0ZUtpbmQgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUta2luZFwiO1xuLy8gV2UgaW5qZWN0IHRoZSB0cmVlIGFuZCBwYWdlcyBoZXJlIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGluIHRoZSByb3V0ZVxuLy8gbW9kdWxlLlxuY29uc3QgdHJlZSA9IHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgJycsXG4gICAgICAgIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgJ2d1bmJ1aWxkZXInLFxuICAgICAgICB7XG4gICAgICAgIGNoaWxkcmVuOiBbJ19fUEFHRV9fJywge30sIHtcbiAgICAgICAgICBwYWdlOiBbKCkgPT4gaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2d1bmJ1aWxkZXIvcGFnZS50c3hcIiksIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL2FwcC9ndW5idWlsZGVyL3BhZ2UudHN4XCJdLFxuICAgICAgICAgIFxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICB9XG4gICAgICBdXG4gICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICdsYXlvdXQnOiBbKCkgPT4gaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2xheW91dC50c3hcIiksIFwiL1VzZXJzL3NlYW4vRGV2L2d1bmJ1aWxkZXItcHJvdG90eXBlL2FwcC9sYXlvdXQudHN4XCJdLFxuJ25vdC1mb3VuZCc6IFsoKSA9PiBpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIm5leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9ub3QtZm91bmQtZXJyb3JcIiksIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvclwiXSxcbiAgICAgICAgXG4gICAgICB9XG4gICAgICBdXG4gICAgICB9LmNoaWxkcmVuO1xuY29uc3QgcGFnZXMgPSBbXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2d1bmJ1aWxkZXIvcGFnZS50c3hcIl07XG5leHBvcnQgeyB0cmVlLCBwYWdlcyB9O1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHbG9iYWxFcnJvciB9IGZyb20gXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnlcIjtcbmNvbnN0IF9fbmV4dF9hcHBfcmVxdWlyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfX1xuY29uc3QgX19uZXh0X2FwcF9sb2FkX2NodW5rX18gPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoKVxuZXhwb3J0IGNvbnN0IG9yaWdpbmFsUGF0aG5hbWUgPSBcIi9ndW5idWlsZGVyL3BhZ2VcIjtcbmV4cG9ydCBjb25zdCBfX25leHRfYXBwX18gPSB7XG4gICAgcmVxdWlyZTogX19uZXh0X2FwcF9yZXF1aXJlX18sXG4gICAgbG9hZENodW5rOiBfX25leHRfYXBwX2xvYWRfY2h1bmtfX1xufTtcbmV4cG9ydCAqIGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2FwcC1yZW5kZXIvZW50cnktYmFzZVwiO1xuLy8gQ3JlYXRlIGFuZCBleHBvcnQgdGhlIHJvdXRlIG1vZHVsZSB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG5leHBvcnQgY29uc3Qgcm91dGVNb2R1bGUgPSBuZXcgQXBwUGFnZVJvdXRlTW9kdWxlKHtcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgIGtpbmQ6IFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgcGFnZTogXCIvZ3VuYnVpbGRlci9wYWdlXCIsXG4gICAgICAgIHBhdGhuYW1lOiBcIi9ndW5idWlsZGVyXCIsXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgaW4gcHJvZHVjdGlvbi5cbiAgICAgICAgYnVuZGxlUGF0aDogXCJcIixcbiAgICAgICAgZmlsZW5hbWU6IFwiXCIsXG4gICAgICAgIGFwcFBhdGhzOiBbXVxuICAgIH0sXG4gICAgdXNlcmxhbmQ6IHtcbiAgICAgICAgbG9hZGVyVHJlZTogdHJlZVxuICAgIH1cbn0pO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtcGFnZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?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!\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%2Fgunbuilder%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%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/page.tsx */ \"(ssr)/./app/gunbuilder/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGYXBwJTJGZ3VuYnVpbGRlciUyRnBhZ2UudHN4JTIyJTJDJTIyaWRzJTIyJTNBJTVCJTVEJTdEJnNlcnZlcj10cnVlISIsIm1hcHBpbmdzIjoiQUFBQSw4SkFBaUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8/N2FkYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIi9Vc2Vycy9zZWFuL0Rldi9ndW5idWlsZGVyLXByb3RvdHlwZS9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeFwiKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\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%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%2Fapp%2Flayout.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%2Flayout.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/layout.tsx */ \"(ssr)/./app/layout.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRlVzZXJzJTJGc2VhbiUyRkRldiUyRmd1bmJ1aWxkZXItcHJvdG90eXBlJTJGYXBwJTJGbGF5b3V0LnRzeCUyMiUyQyUyMmlkcyUyMiUzQSU1QiU1RCU3RCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsNElBQXdGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvP2RkNjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCIvVXNlcnMvc2Vhbi9EZXYvZ3VuYnVpbGRlci1wcm90b3R5cGUvYXBwL2xheW91dC50c3hcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\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%2Flayout.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/page.tsx":
/*!*********************************!*\
!*** ./app/gunbuilder/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 */ GunbuilderPage)\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_partRoleMappings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/data/partRoleMappings */ \"(ssr)/./data/partRoleMappings.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\";\nconst STORAGE_KEY = \"gunbuilder-build-state\";\n// Category groups for the main grid\nconst CATEGORY_GROUPS = [\n {\n id: \"lower-group\",\n label: \"Lower Receiver Parts\",\n description: \"Everything from the serialized lower to small parts, fire control, and core controls.\",\n categoryIds: [\n \"lower\",\n \"completeLower\",\n \"lowerParts\",\n \"trigger\",\n \"grip\",\n \"safety\",\n \"buffer\",\n \"stock\"\n ]\n },\n {\n id: \"upper-group\",\n label: \"Upper Receiver Parts\",\n description: \"Barrel, upper, gas system, and the parts that keep the rifle cycling.\",\n categoryIds: [\n \"upper\",\n \"completeUpper\",\n \"bcg\",\n \"barrel\",\n \"gasBlock\",\n \"gasTube\",\n \"muzzleDevice\",\n \"suppressor\",\n \"handguard\",\n \"chargingHandle\",\n \"sights\",\n \"optic\"\n ]\n }\n];\nfunction GunbuilderPage() {\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 (false) {}\n return {};\n });\n const [shareStatus, setShareStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [shareUrl, setShareUrl] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\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(`${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 = _data_partRoleMappings__WEBPACK_IMPORTED_MODULE_5__.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 const buyUrl = p.buyUrl ?? undefined;\n return {\n id: String(p.id),\n categoryId,\n name: p.name,\n brand: p.brand,\n price: p.price ?? 0,\n imageUrl: p.mainImageUrl ?? undefined,\n affiliateUrl: buyUrl,\n url: buyUrl,\n notes: undefined\n };\n }).filter((p)=>p !== null);\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 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 if (false) {}\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 (false) {}\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(([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 (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (true) return;\n // If no parts selected, clear the share URL\n if (Object.keys(build).length === 0) {\n setShareUrl(\"\");\n return;\n }\n try {\n const payload = JSON.stringify(build);\n const encoded = window.btoa(payload);\n const origin = window.location?.origin ?? \"\";\n const url = `${origin}/gunbuilder/build?build=${encodeURIComponent(encoded)}`;\n setShareUrl(url);\n } catch {\n setShareUrl(\"\");\n }\n }, [\n build\n ]);\n const handleSelectPart = (categoryId, partId)=>{\n setBuild((prev)=>({\n ...prev,\n [categoryId]: partId\n }));\n };\n // Use group ordering for the summary as well\n const summaryCategoryOrder = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>CATEGORY_GROUPS.flatMap((group)=>group.categoryIds).filter((id)=>_data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.some((c)=>c.id === id)), []);\n const handleShare = async ()=>{\n if (selectedParts.length === 0) {\n setShareStatus(\"Add a few parts before sharing your build.\");\n return;\n }\n const lines = [];\n lines.push(\"Shadow Standard — The Armory Build\");\n lines.push(\"\");\n lines.push(`Total: $${totalPrice.toFixed(2)}`);\n lines.push(\"\");\n summaryCategoryOrder.forEach((categoryId)=>{\n const cat = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.find((c)=>c.id === categoryId);\n if (!cat) return;\n const selectedPartId = build[cat.id];\n const part = parts.find((p)=>p.id === selectedPartId && p.categoryId === cat.id);\n if (part) {\n lines.push(`${cat.name}: ${part.brand} — ${part.name} ($${part.price.toFixed(2)})`);\n } else {\n lines.push(`${cat.name}: [Not selected]`);\n }\n });\n const text = lines.join(\"\\n\");\n try {\n await navigator.clipboard.writeText(text);\n setShareStatus(\"Build summary copied to clipboard.\");\n } catch {\n setShareStatus(\"Could not access clipboard. You can copy from the build summary page.\");\n }\n };\n const handleCopyLink = async ()=>{\n if (!shareUrl) {\n setShareStatus(\"No shareable link available yet.\");\n return;\n }\n try {\n await navigator.clipboard.writeText(shareUrl);\n setShareStatus(\"Shareable link copied to clipboard.\");\n } catch {\n setShareStatus(\"Could not copy link to clipboard.\");\n }\n };\n const handleNativeShare = async ()=>{\n if (!shareUrl) {\n setShareStatus(\"No shareable link available yet.\");\n return;\n }\n if (navigator.share) {\n try {\n await navigator.share({\n title: \"Shadow Standard — The Armory Build\",\n text: \"Check out my Shadow Standard Armory build.\",\n url: shareUrl\n });\n setShareStatus(\"Share dialog opened.\");\n } catch {\n // User canceled or share failed; keep it quiet but let them know\n setShareStatus(\"Share canceled or unavailable. You can copy the link instead.\");\n }\n } else {\n // Fallback to copying the link\n await handleCopyLink();\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\",\n children: /*#__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 Co.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 339,\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 \"The Build Bench: \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-300\",\n children: \"Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 343,\n columnNumber: 32\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 342,\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: \"Explore components from trusted brands, choose one part per category, track live prices, and watch your total build cost update as you go. This early-access builder keeps your setup saved locally so you can come back and refine it anytime.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 345,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 338,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 337,\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/80 p-3 md:p-4 flex flex-col gap-3 md:flex-row md:items-start md:justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-amber-300\",\n children: \"My Build Breakdown\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 358,\n columnNumber: 13\n }, this),\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)(\"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: 362,\n columnNumber: 15\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: 363,\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 mt-1\",\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: 366,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 361,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex flex-col items-stretch gap-2 sm:flex-row sm:flex-wrap\",\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: `w-full sm:w-auto 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 ${selectedParts.length === 0 ? \"opacity-40 cursor-not-allowed pointer-events-none\" : \"\"}`,\n children: \"Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 373,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleShare,\n className: `w-full sm:w-auto rounded-md px-3 py-2 text-sm font-semibold transition-colors border ${selectedParts.length === 0 ? \"bg-zinc-900/80 text-zinc-600 border-zinc-800 cursor-not-allowed\" : \"bg-zinc-900/80 text-zinc-200 border-zinc-700 hover:bg-zinc-800\"}`,\n disabled: selectedParts.length === 0,\n children: \"Copy Build Summary\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 383,\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 if (false) {}\n },\n disabled: selectedParts.length === 0,\n className: `w-full sm:w-auto 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 ${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: 395,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 372,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 357,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-3 md:items-end md:text-right md:flex-1\",\n children: [\n selectedParts.length > 0 && shareUrl && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full md:w-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-[0.7rem] font-semibold uppercase tracking-[0.16em] text-zinc-400\",\n children: \"Share Your Build\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 417,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-[0.7rem] text-zinc-500\",\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/page.tsx\",\n lineNumber: 420,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-2 flex flex-col gap-2 md:flex-row md:items-center\",\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.65rem] uppercase tracking-[0.16em] text-zinc-500 mb-1\",\n children: \"Shareable URL\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 426,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n readOnly: true,\n value: shareUrl,\n className: \"w-full rounded-md border border-zinc-700 bg-zinc-950/80 px-2 py-1.5 text-[0.7rem] text-zinc-200 font-mono outline-none focus:ring-1 focus:ring-amber-400\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 429,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 425,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 md:flex-none md:mt-5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleNativeShare,\n className: \"flex-1 md:flex-none rounded-md bg-zinc-900/80 px-3 py-1.5 text-[0.75rem] font-semibold text-zinc-100 border border-zinc-700 hover:bg-zinc-800 hover:border-zinc-500 transition-colors\",\n children: \"Share\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 437,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: handleCopyLink,\n className: \"flex-1 md:flex-none rounded-md bg-amber-400 px-3 py-1.5 text-[0.75rem] font-semibold text-black hover:bg-amber-300 transition-colors\",\n children: \"Copy Link\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 444,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 436,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 424,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 416,\n columnNumber: 15\n }, this),\n shareStatus && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-[0.7rem] text-zinc-500\",\n children: shareStatus\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 457,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 414,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 355,\n columnNumber: 17\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 /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mb-4 text-xs text-zinc-500\",\n children: \"Work top-down through the major sections. Each row shows your current pick for that part type, with price and a direct buy link—or a quick way to choose a part if you haven't picked one yet.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 466,\n columnNumber: 11\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 parts from backend…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 474,\n columnNumber: 13\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: 479,\n columnNumber: 13\n }, this),\n !loading && !error && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-6\",\n children: CATEGORY_GROUPS.map((group)=>{\n const groupCategories = _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_4__.CATEGORIES.filter((c)=>group.categoryIds.includes(c.id));\n if (groupCategories.length === 0) {\n return null;\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-baseline justify-between gap-2\",\n children: /*#__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)(\"h2\", {\n className: \"text-sm font-semibold text-zinc-100\",\n children: group.label\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 500,\n columnNumber: 25\n }, this),\n group.description && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-zinc-500 mt-1 max-w-xl\",\n children: group.description\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 504,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 499,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 498,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto rounded-md border border-zinc-800 bg-zinc-950/80\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full text-xs md:text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-b border-zinc-800 bg-zinc-900/60\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-3 py-2 text-left font-semibold text-zinc-400\",\n children: \"Component / Part Type\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 515,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-3 py-2 text-left font-semibold text-zinc-400\",\n children: \"Brand\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 518,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-3 py-2 text-right font-semibold text-zinc-400\",\n children: \"Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 521,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-3 py-2 text-right font-semibold text-zinc-400\",\n children: \"Sale Price\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 524,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-3 py-2 text-left font-semibold text-zinc-400\",\n children: \"Caliber\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 527,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-3 py-2 text-right font-semibold text-zinc-400\",\n children: \"Buy / Choose\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 530,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 514,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 513,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n children: groupCategories.map((category)=>{\n const categoryParts = partsByCategory[category.id] ?? [];\n const selectedPartId = build[category.id];\n const selectedPart = categoryParts.find((p)=>p.id === selectedPartId);\n const hasParts = categoryParts.length > 0;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-t border-zinc-900 hover:bg-zinc-900/60 transition-colors\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-3 py-2 align-top\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-medium text-zinc-100\",\n children: category.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 552,\n columnNumber: 35\n }, this),\n selectedPart ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] text-zinc-500 line-clamp-1\",\n children: selectedPart.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 556,\n columnNumber: 37\n }, this) : hasParts ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] text-zinc-600\",\n children: \"No part selected\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 560,\n columnNumber: 37\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[0.7rem] text-zinc-600\",\n children: \"No parts available yet\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 564,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 551,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-3 py-2 align-top text-zinc-300\",\n children: selectedPart ? selectedPart.brand : \"—\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 571,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-3 py-2 align-top text-right text-amber-300\",\n children: selectedPart ? `$${selectedPart.price.toFixed(2)}` : \"—\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 576,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-3 py-2 align-top text-right text-zinc-400\",\n children: selectedPart ? \"—\" : \"—\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 583,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-3 py-2 align-top text-zinc-400\",\n children: \"—\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 589,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-3 py-2 align-top\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-2\",\n children: selectedPart && selectedPart.url ? /*#__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)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: `/gunbuilder/${category.id}`,\n className: \"hidden md:inline-flex rounded-md border border-zinc-700 bg-zinc-900/70 px-2.5 py-1 text-[0.7rem] font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n children: \"Change Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 599,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: selectedPart.url,\n target: \"_blank\",\n rel: \"noreferrer\",\n className: \"inline-flex rounded-md bg-amber-400 px-2.5 py-1 text-[0.7rem] font-semibold text-black hover:bg-amber-300 transition-colors\",\n children: \"Buy\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 605,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true) : hasParts ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n href: `/gunbuilder/${category.id}`,\n className: \"inline-flex rounded-md border border-zinc-700 bg-zinc-900/70 px-2.5 py-1 text-[0.7rem] font-medium text-zinc-200 hover:bg-zinc-800 hover:border-zinc-600 transition-colors\",\n onClick: ()=>{\n // If you want to pre-select something later, you can handle here.\n },\n children: \"Choose a Part\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 615,\n columnNumber: 39\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[0.7rem] text-zinc-600\",\n children: \"—\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 625,\n columnNumber: 39\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 596,\n columnNumber: 35\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 595,\n columnNumber: 33\n }, this)\n ]\n }, category.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 546,\n columnNumber: 31\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 535,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 512,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 511,\n columnNumber: 21\n }, this)\n ]\n }, group.id, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 497,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 486,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 465,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-amber-300\",\n children: \"What's New in Early Access\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 646,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Live parts and pricing pulled from multiple merchants.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 650,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Grouped layout for lower and upper receiver parts so you can see at a glance which sections of your build are still missing.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 651,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Running build total that updates automatically as you add or swap components.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 655,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Local build persistence so your selections stick around between visits on this device.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 659,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 649,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 645,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"section\", {\n className: \"mt-8 rounded-lg border border-zinc-800 bg-zinc-950/80 p-3 md:p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xs font-semibold uppercase tracking-[0.16em] text-amber-300\",\n children: \"What's on our roadmap\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 668,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mt-2 space-y-1 text-sm text-zinc-400\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Platform filters (AR-15, AR-9, AR-10)\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 672,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• More part categories and furniture\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 673,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Richer pricing/stock sync\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 674,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• Smarter compatibility checks between components\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 675,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: \"• AR9/AR10 support and more\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 676,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 671,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 667,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 335,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/gunbuilder/page.tsx\",\n lineNumber: 333,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FDWiw4REFBQ2dDOzhDQUFHOzs7Ozs7OENBQ0osOERBQUNBOzhDQUFHOzs7Ozs7OENBSUosOERBQUNBOzhDQUFHOzs7Ozs7OENBSUosOERBQUNBOzhDQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OEJBUVIsOERBQUMzQjtvQkFBUUwsV0FBVTs7c0NBQ2pCLDhEQUFDTTs0QkFBR04sV0FBVTtzQ0FBbUU7Ozs7OztzQ0FHakYsOERBQUMrQjs0QkFBRy9CLFdBQVU7OzhDQUNaLDhEQUFDZ0M7OENBQUc7Ozs7Ozs4Q0FDSiw4REFBQ0E7OENBQUc7Ozs7Ozs4Q0FDSiw4REFBQ0E7OENBQUc7Ozs7Ozs4Q0FDSiw4REFBQ0E7OENBQUc7Ozs7Ozs4Q0FDSiw4REFBQ0E7OENBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTWhCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvLi9hcHAvZ3VuYnVpbGRlci9wYWdlLnRzeD8wNTQwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMsIHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IENBVEVHT1JJRVMgfSBmcm9tIFwiQC9kYXRhL2d1bmJ1aWxkZXJQYXJ0c1wiO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yeUlkLCBQYXJ0IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuaW1wb3J0IHsgUEFSVF9ST0xFX1RPX0NBVEVHT1JZIH0gZnJvbSBcIkAvZGF0YS9wYXJ0Um9sZU1hcHBpbmdzXCI7XG5cbnR5cGUgR3VuYnVpbGRlclByb2R1Y3RGcm9tQXBpID0ge1xuICBpZDogbnVtYmVyOyAvLyBiYWNrZW5kIG51bWVyaWMgaWRcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuZDogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBwYXJ0Um9sZTogc3RyaW5nO1xuICBwcmljZTogbnVtYmVyIHwgbnVsbDtcbiAgbWFpbkltYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBidXlVcmw6IHN0cmluZyB8IG51bGw7XG59O1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxudHlwZSBCdWlsZFN0YXRlID0gUGFydGlhbDxSZWNvcmQ8Q2F0ZWdvcnlJZCwgc3RyaW5nPj47IC8vIGNhdGVnb3J5SWQgLT4gcGFydElkXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJndW5idWlsZGVyLWJ1aWxkLXN0YXRlXCI7XG5cbi8vIENhdGVnb3J5IGdyb3VwcyBmb3IgdGhlIG1haW4gZ3JpZFxuY29uc3QgQ0FURUdPUllfR1JPVVBTOiB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjYXRlZ29yeUlkczogQ2F0ZWdvcnlJZFtdO1xufVtdID0gW1xuICB7XG4gICAgaWQ6IFwibG93ZXItZ3JvdXBcIixcbiAgICBsYWJlbDogXCJMb3dlciBSZWNlaXZlciBQYXJ0c1wiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJFdmVyeXRoaW5nIGZyb20gdGhlIHNlcmlhbGl6ZWQgbG93ZXIgdG8gc21hbGwgcGFydHMsIGZpcmUgY29udHJvbCwgYW5kIGNvcmUgY29udHJvbHMuXCIsXG4gICAgY2F0ZWdvcnlJZHM6IFtcbiAgICAgIFwibG93ZXJcIixcbiAgICAgIFwiY29tcGxldGVMb3dlclwiLFxuICAgICAgXCJsb3dlclBhcnRzXCIsXG4gICAgICBcInRyaWdnZXJcIixcbiAgICAgIFwiZ3JpcFwiLFxuICAgICAgXCJzYWZldHlcIixcbiAgICAgIFwiYnVmZmVyXCIsXG4gICAgICBcInN0b2NrXCIsXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInVwcGVyLWdyb3VwXCIsXG4gICAgbGFiZWw6IFwiVXBwZXIgUmVjZWl2ZXIgUGFydHNcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiQmFycmVsLCB1cHBlciwgZ2FzIHN5c3RlbSwgYW5kIHRoZSBwYXJ0cyB0aGF0IGtlZXAgdGhlIHJpZmxlIGN5Y2xpbmcuXCIsXG4gICAgY2F0ZWdvcnlJZHM6IFtcbiAgICAgIFwidXBwZXJcIixcbiAgICAgIFwiY29tcGxldGVVcHBlclwiLFxuICAgICAgXCJiY2dcIixcbiAgICAgIFwiYmFycmVsXCIsXG4gICAgICBcImdhc0Jsb2NrXCIsXG4gICAgICBcImdhc1R1YmVcIixcbiAgICAgIFwibXV6emxlRGV2aWNlXCIsXG4gICAgICBcInN1cHByZXNzb3JcIixcbiAgICAgIFwiaGFuZGd1YXJkXCIsXG4gICAgICBcImNoYXJnaW5nSGFuZGxlXCIsXG4gICAgICBcInNpZ2h0c1wiLFxuICAgICAgXCJvcHRpY1wiLFxuICAgIF0sXG4gIH0sXG4gIC8vIE9wdGlvbmFsOiBmdXR1cmUgZ3JvdXAgZm9yIGFjY2Vzc29yaWVzL2Z1cm5pdHVyZSBpZiBuZWVkZWRcbiAgLy8ge1xuICAvLyAgIGlkOiBcImFjY2Vzc29yaWVzLWdyb3VwXCIsXG4gIC8vICAgbGFiZWw6IFwiQWNjZXNzb3JpZXMgJiBGdXJuaXR1cmVcIixcbiAgLy8gICBkZXNjcmlwdGlvbjogXCJPcHRpY3MsIGxpZ2h0cywgc2xpbmdzLCBhbmQgb3RoZXIgc3VwcG9ydGluZyBnZWFyLlwiLFxuICAvLyAgIGNhdGVnb3J5SWRzOiBbXCJvcHRpY1wiLCBcInNpZ2h0c1wiLCAuLi5dIGFzIENhdGVnb3J5SWRbXSxcbiAgLy8gfSxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEd1bmJ1aWxkZXJQYWdlKCkge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IFtwYXJ0cywgc2V0UGFydHNdID0gdXNlU3RhdGU8UGFydFtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbYnVpbGQsIHNldEJ1aWxkXSA9IHVzZVN0YXRlPEJ1aWxkU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0b3JlZCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH0pO1xuICBjb25zdCBbc2hhcmVTdGF0dXMsIHNldFNoYXJlU3RhdHVzXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbc2hhcmVVcmwsIHNldFNoYXJlVXJsXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcm9kdWN0cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke0FQSV9CQVNFX1VSTH0vYXBpL3Byb2R1Y3RzL2d1bmJ1aWxkZXI/cGxhdGZvcm09QVItMTVgLFxuICAgICAgICAgIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBwcm9kdWN0cyAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IEd1bmJ1aWxkZXJQcm9kdWN0RnJvbUFwaVtdID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkOiBQYXJ0W10gPSBkYXRhXG4gICAgICAgIC5tYXAoKHApOiBQYXJ0IHwgbnVsbCA9PiB7XG4gICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IFBBUlRfUk9MRV9UT19DQVRFR09SWVtwLnBhcnRSb2xlXTtcbiAgICAgICAgICBpZiAoIWNhdGVnb3J5SWQpIHtcbiAgICAgICAgICAgIC8vIFNraXAgYW55IHBhcnRzIHdlIGRvbid0IGtub3cgaG93IHRvIG1hcCB5ZXRcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGJ1eVVybCA9IHAuYnV5VXJsID8/IHVuZGVmaW5lZDtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogU3RyaW5nKHAuaWQpLCAvLyBBTFdBWVMgc3RyaW5nXG4gICAgICAgICAgICBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgICAgYnJhbmQ6IHAuYnJhbmQsXG4gICAgICAgICAgICBwcmljZTogcC5wcmljZSA/PyAwLFxuICAgICAgICAgICAgaW1hZ2VVcmw6IHAubWFpbkltYWdlVXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFmZmlsaWF0ZVVybDogYnV5VXJsLCAvLyBtYWluIGxpbmtcbiAgICAgICAgICAgIHVybDogYnV5VXJsLCAgICAgICAgICAvLyDwn5GIb3B0aW9uYWwgYWxpYXMgaWYgeW91IHN0aWxsIHJlZmVyZW5jZSAudXJsLiBtYXliZSBwcmV0dHkgdXJsP1xuICAgICAgICAgICAgbm90ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0ID0+IHAgIT09IG51bGwpO1xuXG5cbiAgICAgICAgc2V0UGFydHMobm9ybWFsaXplZCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSByZXR1cm47XG4gICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlID8/IFwiRmFpbGVkIHRvIGxvYWQgcHJvZHVjdHNcIik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaFByb2R1Y3RzKCk7XG5cbiAgICByZXR1cm4gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gSGFuZGxlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgZm9yIHBhcnQgc2VsZWN0aW9uICg/c2VsZWN0PXVwcGVyOjE2NSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RQYXJhbSA9IHNlYXJjaFBhcmFtcy5nZXQoXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdFBhcmFtKSB7XG4gICAgICBjb25zdCBbY2F0ZWdvcnlJZCwgcGFydElkXSA9IHNlbGVjdFBhcmFtLnNwbGl0KFwiOlwiKTtcbiAgICAgIGlmIChjYXRlZ29yeUlkICYmIHBhcnRJZCAmJiBDQVRFR09SSUVTLnNvbWUoKGMpID0+IGMuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgIHNldEJ1aWxkKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbY2F0ZWdvcnlJZCBhcyBDYXRlZ29yeUlkXTogcGFydElkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9KTtcblxuICAgICAgICByb3V0ZXIucmVwbGFjZShcIi9ndW5idWlsZGVyXCIsIHsgc2Nyb2xsOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzZWFyY2hQYXJhbXMsIHJvdXRlcl0pO1xuXG4gIC8vIFBlcnNpc3QgYnVpbGQgc3RhdGUgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGJ1aWxkKSk7XG4gICAgfVxuICB9LCBbYnVpbGRdKTtcblxuICBjb25zdCBwYXJ0c0J5Q2F0ZWdvcnk6IFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBlZCA9IHt9IGFzIFJlY29yZDxDYXRlZ29yeUlkLCBQYXJ0W10+O1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgQ0FURUdPUklFUykge1xuICAgICAgZ3JvdXBlZFtjYXRlZ29yeS5pZF0gPSBwYXJ0cy5maWx0ZXIoXG4gICAgICAgIChwKSA9PiBwLmNhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmlkLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwZWQ7XG4gIH0sIFtwYXJ0c10pO1xuXG4gIGNvbnN0IHNlbGVjdGVkUGFydHM6IFBhcnRbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhidWlsZClcbiAgICAgIC5tYXAoKFtjYXRlZ29yeUlkLCBwYXJ0SWRdKSA9PlxuICAgICAgICBwYXJ0cy5maW5kKChwKSA9PiBwLmlkID09PSBwYXJ0SWQgJiYgcC5jYXRlZ29yeUlkID09PSBjYXRlZ29yeUlkKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgUGFydFtdO1xuICB9LCBbYnVpbGQsIHBhcnRzXSk7XG5cbiAgY29uc3QgdG90YWxQcmljZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRQYXJ0cy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgcC5wcmljZSwgMCksXG4gICAgW3NlbGVjdGVkUGFydHNdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblxuICAgIC8vIElmIG5vIHBhcnRzIHNlbGVjdGVkLCBjbGVhciB0aGUgc2hhcmUgVVJMXG4gICAgaWYgKE9iamVjdC5rZXlzKGJ1aWxkKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHNldFNoYXJlVXJsKFwiXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoYnVpbGQpO1xuICAgICAgY29uc3QgZW5jb2RlZCA9IHdpbmRvdy5idG9hKHBheWxvYWQpO1xuICAgICAgY29uc3Qgb3JpZ2luID0gd2luZG93LmxvY2F0aW9uPy5vcmlnaW4gPz8gXCJcIjtcbiAgICAgIGNvbnN0IHVybCA9IGAke29yaWdpbn0vZ3VuYnVpbGRlci9idWlsZD9idWlsZD0ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgZW5jb2RlZCxcbiAgICAgICl9YDtcbiAgICAgIHNldFNoYXJlVXJsKHVybCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBzZXRTaGFyZVVybChcIlwiKTtcbiAgICB9XG4gIH0sIFtidWlsZF0pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFBhcnQgPSAoY2F0ZWdvcnlJZDogQ2F0ZWdvcnlJZCwgcGFydElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRCdWlsZCgocHJldikgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbY2F0ZWdvcnlJZF06IHBhcnRJZCxcbiAgICB9KSk7XG4gIH07XG5cbiAgLy8gVXNlIGdyb3VwIG9yZGVyaW5nIGZvciB0aGUgc3VtbWFyeSBhcyB3ZWxsXG4gIGNvbnN0IHN1bW1hcnlDYXRlZ29yeU9yZGVyOiBDYXRlZ29yeUlkW10gPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBDQVRFR09SWV9HUk9VUFMuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLmNhdGVnb3J5SWRzKS5maWx0ZXIoXG4gICAgICAgIChpZCkgPT4gQ0FURUdPUklFUy5zb21lKChjKSA9PiBjLmlkID09PSBpZCksXG4gICAgICApLFxuICAgIFtdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNoYXJlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2V0U2hhcmVTdGF0dXMoXCJBZGQgYSBmZXcgcGFydHMgYmVmb3JlIHNoYXJpbmcgeW91ciBidWlsZC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgbGluZXMucHVzaChcIlNoYWRvdyBTdGFuZGFyZCDigJQgVGhlIEFybW9yeSBCdWlsZFwiKTtcbiAgICBsaW5lcy5wdXNoKFwiXCIpO1xuICAgIGxpbmVzLnB1c2goYFRvdGFsOiAkJHt0b3RhbFByaWNlLnRvRml4ZWQoMil9YCk7XG4gICAgbGluZXMucHVzaChcIlwiKTtcblxuICAgIHN1bW1hcnlDYXRlZ29yeU9yZGVyLmZvckVhY2goKGNhdGVnb3J5SWQpID0+IHtcbiAgICAgIGNvbnN0IGNhdCA9IENBVEVHT1JJRVMuZmluZCgoYykgPT4gYy5pZCA9PT0gY2F0ZWdvcnlJZCk7XG4gICAgICBpZiAoIWNhdCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZFBhcnRJZCA9IGJ1aWxkW2NhdC5pZF07XG4gICAgICBjb25zdCBwYXJ0ID0gcGFydHMuZmluZChcbiAgICAgICAgKHApID0+IHAuaWQgPT09IHNlbGVjdGVkUGFydElkICYmIHAuY2F0ZWdvcnlJZCA9PT0gY2F0LmlkLFxuICAgICAgKTtcblxuICAgICAgaWYgKHBhcnQpIHtcbiAgICAgICAgbGluZXMucHVzaChcbiAgICAgICAgICBgJHtjYXQubmFtZX06ICR7cGFydC5icmFuZH0g4oCUICR7cGFydC5uYW1lfSAoJCR7cGFydC5wcmljZS50b0ZpeGVkKFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApfSlgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGluZXMucHVzaChgJHtjYXQubmFtZX06IFtOb3Qgc2VsZWN0ZWRdYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZXh0ID0gbGluZXMuam9pbihcIlxcblwiKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KTtcbiAgICAgIHNldFNoYXJlU3RhdHVzKFwiQnVpbGQgc3VtbWFyeSBjb3BpZWQgdG8gY2xpcGJvYXJkLlwiKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHNldFNoYXJlU3RhdHVzKFxuICAgICAgICBcIkNvdWxkIG5vdCBhY2Nlc3MgY2xpcGJvYXJkLiBZb3UgY2FuIGNvcHkgZnJvbSB0aGUgYnVpbGQgc3VtbWFyeSBwYWdlLlwiLFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ29weUxpbmsgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFzaGFyZVVybCkge1xuICAgICAgc2V0U2hhcmVTdGF0dXMoXCJObyBzaGFyZWFibGUgbGluayBhdmFpbGFibGUgeWV0LlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoc2hhcmVVcmwpO1xuICAgICAgc2V0U2hhcmVTdGF0dXMoXCJTaGFyZWFibGUgbGluayBjb3BpZWQgdG8gY2xpcGJvYXJkLlwiKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHNldFNoYXJlU3RhdHVzKFwiQ291bGQgbm90IGNvcHkgbGluayB0byBjbGlwYm9hcmQuXCIpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVOYXRpdmVTaGFyZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXNoYXJlVXJsKSB7XG4gICAgICBzZXRTaGFyZVN0YXR1cyhcIk5vIHNoYXJlYWJsZSBsaW5rIGF2YWlsYWJsZSB5ZXQuXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuYXZpZ2F0b3Iuc2hhcmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG5hdmlnYXRvci5zaGFyZSh7XG4gICAgICAgICAgdGl0bGU6IFwiU2hhZG93IFN0YW5kYXJkIOKAlCBUaGUgQXJtb3J5IEJ1aWxkXCIsXG4gICAgICAgICAgdGV4dDogXCJDaGVjayBvdXQgbXkgU2hhZG93IFN0YW5kYXJkIEFybW9yeSBidWlsZC5cIixcbiAgICAgICAgICB1cmw6IHNoYXJlVXJsLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hhcmVTdGF0dXMoXCJTaGFyZSBkaWFsb2cgb3BlbmVkLlwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBVc2VyIGNhbmNlbGVkIG9yIHNoYXJlIGZhaWxlZDsga2VlcCBpdCBxdWlldCBidXQgbGV0IHRoZW0ga25vd1xuICAgICAgICBzZXRTaGFyZVN0YXR1cyhcIlNoYXJlIGNhbmNlbGVkIG9yIHVuYXZhaWxhYmxlLiBZb3UgY2FuIGNvcHkgdGhlIGxpbmsgaW5zdGVhZC5cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGNvcHlpbmcgdGhlIGxpbmtcbiAgICAgIGF3YWl0IGhhbmRsZUNvcHlMaW5rKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWJsYWNrIHRleHQtemluYy01MFwiPlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctNnhsIHB4LTQgcHktNiBsZzpweS0xMFwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgU2hhZG93IFN0YW5kYXJkIENvLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cIm10LTEgdGV4dC0yeGwgbWQ6dGV4dC0zeGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodFwiPlxuICAgICAgICAgICAgICBUaGUgQnVpbGQgQmVuY2g6IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYW1iZXItMzAwXCI+RWFybHkgQWNjZXNzPC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXppbmMtNDAwIG1heC13LXhsXCI+XG4gICAgICAgICAgICAgIEV4cGxvcmUgY29tcG9uZW50cyBmcm9tIHRydXN0ZWQgYnJhbmRzLCBjaG9vc2Ugb25lIHBhcnQgcGVyXG4gICAgICAgICAgICAgIGNhdGVnb3J5LCB0cmFjayBsaXZlIHByaWNlcywgYW5kIHdhdGNoIHlvdXIgdG90YWwgYnVpbGQgY29zdFxuICAgICAgICAgICAgICB1cGRhdGUgYXMgeW91IGdvLiBUaGlzIGVhcmx5LWFjY2VzcyBidWlsZGVyIGtlZXBzIHlvdXIgc2V0dXAgc2F2ZWRcbiAgICAgICAgICAgICAgbG9jYWxseSBzbyB5b3UgY2FuIGNvbWUgYmFjayBhbmQgcmVmaW5lIGl0IGFueXRpbWUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgICAgICAgICAgey8qIEJ1aWxkIHN1bW1hcnkgcGFuZWwgKi99XG4gICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibWItNiByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNCBmbGV4IGZsZXgtY29sIGdhcC0zIG1kOmZsZXgtcm93IG1kOml0ZW1zLXN0YXJ0IG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIHsvKiBMZWZ0OiB0aXRsZSArIHRvdGFscyArIHByaW1hcnkgYWN0aW9ucyAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgIE15IEJ1aWxkIEJyZWFrZG93blxuICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNDAwXCI+Q3VycmVudCBidWlsZCB0b3RhbDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0zMDBcIj5cbiAgICAgICAgICAgICAgICAke3RvdGFsUHJpY2UudG9GaXhlZCgyKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwIG10LTFcIj5cbiAgICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGh9IC8ge0NBVEVHT1JJRVMubGVuZ3RofSBjYXRlZ29yaWVzIGZpbGxlZFxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogUHJpbWFyeSBhY3Rpb25zIG5vdyBsaXZlIHVuZGVyIHRoZSB0b3RhbCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0cmV0Y2ggZ2FwLTIgc206ZmxleC1yb3cgc206ZmxleC13cmFwXCI+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9ndW5idWlsZGVyL2J1aWxkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgc206dy1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1hbWJlci00MDAvNjAgYmctYW1iZXItNDAwLzEwIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYW1iZXItMjAwIGhvdmVyOmJnLWFtYmVyLTQwMC8xNSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBcIm9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEJ1aWxkIFN1bW1hcnlcbiAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2hhcmV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHNtOnctYXV0byByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdHJhbnNpdGlvbi1jb2xvcnMgYm9yZGVyICR7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IFwiYmctemluYy05MDAvODAgdGV4dC16aW5jLTYwMCBib3JkZXItemluYy04MDAgY3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcImJnLXppbmMtOTAwLzgwIHRleHQtemluYy0yMDAgYm9yZGVyLXppbmMtNzAwIGhvdmVyOmJnLXppbmMtODAwXCJcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDb3B5IEJ1aWxkIFN1bW1hcnlcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRCdWlsZCh7fSk7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHNtOnctYXV0byByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItemluYy03MDAgYmctemluYy05MDAvNTAgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFydHMubGVuZ3RoID09PSAwID8gXCJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZFwiIDogXCJcIlxuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ2xlYXIgQnVpbGRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBSaWdodDogU2hhcmUgWW91ciBCdWlsZCAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTMgbWQ6aXRlbXMtZW5kIG1kOnRleHQtcmlnaHQgbWQ6ZmxleC0xXCI+XG4gICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0cy5sZW5ndGggPiAwICYmIHNoYXJlVXJsICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWQ6dy1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTZlbV0gdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgU2hhcmUgWW91ciBCdWlsZFxuICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LVswLjdyZW1dIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgICAgICAgIFNoYXJlIHRoaXMgbGluayB0byBsZXQgb3RoZXJzIHZpZXcgeW91ciBidWlsZCBvciBib29rbWFyayBpdCB0byBjb21lXG4gICAgICAgICAgICAgICAgICBiYWNrIGxhdGVyLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmxleCBmbGV4LWNvbCBnYXAtMiBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC42NXJlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtemluYy01MDAgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIFNoYXJlYWJsZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICByZWFkT25seVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzaGFyZVVybH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTUwLzgwIHB4LTIgcHktMS41IHRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTIwMCBmb250LW1vbm8gb3V0bGluZS1ub25lIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWFtYmVyLTQwMFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMiBtZDpmbGV4LW5vbmUgbWQ6bXQtNVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTmF0aXZlU2hhcmV9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIG1kOmZsZXgtbm9uZSByb3VuZGVkLW1kIGJnLXppbmMtOTAwLzgwIHB4LTMgcHktMS41IHRleHQtWzAuNzVyZW1dIGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTEwMCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGhvdmVyOmJnLXppbmMtODAwIGhvdmVyOmJvcmRlci16aW5jLTUwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBTaGFyZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvcHlMaW5rfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBtZDpmbGV4LW5vbmUgcm91bmRlZC1tZCBiZy1hbWJlci00MDAgcHgtMyBweS0xLjUgdGV4dC1bMC43NXJlbV0gZm9udC1zZW1pYm9sZCB0ZXh0LWJsYWNrIGhvdmVyOmJnLWFtYmVyLTMwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBDb3B5IExpbmtcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7c2hhcmVTdGF0dXMgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTUwMFwiPlxuICAgICAgICAgICAgICAgIHtzaGFyZVN0YXR1c31cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIHsvKiBMYXlvdXQgKi99XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci16aW5jLTgwMCBiZy16aW5jLTk1MC82MCBwLTMgbWQ6cC00XCI+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwibWItNCB0ZXh0LXhzIHRleHQtemluYy01MDBcIj5cbiAgICAgICAgICAgIFdvcmsgdG9wLWRvd24gdGhyb3VnaCB0aGUgbWFqb3Igc2VjdGlvbnMuIEVhY2ggcm93IHNob3dzIHlvdXJcbiAgICAgICAgICAgIGN1cnJlbnQgcGljayBmb3IgdGhhdCBwYXJ0IHR5cGUsIHdpdGggcHJpY2UgYW5kIGEgZGlyZWN0IGJ1eVxuICAgICAgICAgICAgbGlua+KAlG9yIGEgcXVpY2sgd2F5IHRvIGNob29zZSBhIHBhcnQgaWYgeW91IGhhdmVuJmFwb3M7dCBwaWNrZWRcbiAgICAgICAgICAgIG9uZSB5ZXQuXG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXppbmMtNTAwXCI+XG4gICAgICAgICAgICAgIExvYWRpbmcgcGFydHMgZnJvbSBiYWNrZW5k4oCmXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7ZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC00MDBcIj5cbiAgICAgICAgICAgICAge2Vycm9yfSDigJQgY2hlY2sgdGhhdCB0aGUgQmFsbGlzdGljIEFQSSBpcyBydW5uaW5nIGFuZCBDT1JTIGlzXG4gICAgICAgICAgICAgIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTZcIj5cbiAgICAgICAgICAgICAge0NBVEVHT1JZX0dST1VQUy5tYXAoKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBDYXRlZ29yaWVzID0gQ0FURUdPUklFUy5maWx0ZXIoKGMpID0+XG4gICAgICAgICAgICAgICAgICBncm91cC5jYXRlZ29yeUlkcy5pbmNsdWRlcyhjLmlkIGFzIENhdGVnb3J5SWQpLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBDYXRlZ29yaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtncm91cC5pZH0gY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1iYXNlbGluZSBqdXN0aWZ5LWJldHdlZW4gZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtncm91cC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z3JvdXAuZGVzY3JpcHRpb24gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtemluYy01MDAgbXQtMSBtYXgtdy14bFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtncm91cC5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdmVyZmxvdy14LWF1dG8gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cIm1pbi13LWZ1bGwgdGV4dC14cyBtZDp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItemluYy04MDAgYmctemluYy05MDAvNjBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHgtMyBweS0yIHRleHQtbGVmdCBmb250LXNlbWlib2xkIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudCAvIFBhcnQgVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTMgcHktMiB0ZXh0LWxlZnQgZm9udC1zZW1pYm9sZCB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTMgcHktMiB0ZXh0LXJpZ2h0IGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC0zIHB5LTIgdGV4dC1yaWdodCBmb250LXNlbWlib2xkIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbGUgUHJpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC0zIHB5LTIgdGV4dC1sZWZ0IGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsaWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTMgcHktMiB0ZXh0LXJpZ2h0IGZvbnQtc2VtaWJvbGQgdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnV5IC8gQ2hvb3NlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtncm91cENhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5UGFydHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNCeUNhdGVnb3J5W2NhdGVnb3J5LmlkXSA/PyBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcnRJZCA9IGJ1aWxkW2NhdGVnb3J5LmlkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcnQgPSBjYXRlZ29yeVBhcnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5pZCA9PT0gc2VsZWN0ZWRQYXJ0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNQYXJ0cyA9IGNhdGVnb3J5UGFydHMubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXQgYm9yZGVyLXppbmMtOTAwIGhvdmVyOmJnLXppbmMtOTAwLzYwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIENvbXBvbmVudCAvIFBhcnQgVHlwZSAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTMgcHktMiBhbGlnbi10b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtIHRleHQtemluYy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjYXRlZ29yeS5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZFBhcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTUwMCBsaW5lLWNsYW1wLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3NlbGVjdGVkUGFydC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IGhhc1BhcnRzID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LVswLjdyZW1dIHRleHQtemluYy02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gcGFydCBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bMC43cmVtXSB0ZXh0LXppbmMtNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHBhcnRzIGF2YWlsYWJsZSB5ZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIEJyYW5kICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtMyBweS0yIGFsaWduLXRvcCB0ZXh0LXppbmMtMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3NlbGVjdGVkUGFydCA/IHNlbGVjdGVkUGFydC5icmFuZCA6IFwi4oCUXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIFByaWNlICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtMyBweS0yIGFsaWduLXRvcCB0ZXh0LXJpZ2h0IHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3NlbGVjdGVkUGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgJCR7c2VsZWN0ZWRQYXJ0LnByaWNlLnRvRml4ZWQoMil9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIuKAlFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBTYWxlIFByaWNlIChwbGFjZWhvbGRlciB1bnRpbCB3ZSB3aXJlIHRocm91Z2ggc2FsZS9vcmlnaW5hbCkgKi99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC0zIHB5LTIgYWxpZ24tdG9wIHRleHQtcmlnaHQgdGV4dC16aW5jLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBUT0RPOiB3aXJlIGluIHNhbGUvb3JpZ2luYWwgcHJpY2VzIGZyb20gYmFja2VuZCAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0ID8gXCLigJRcIiA6IFwi4oCUXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIENhbGliZXIgKHBsYWNlaG9sZGVyIGZvciBub3cpICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtMyBweS0yIGFsaWduLXRvcCB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIFRPRE86IHdpcmUgaW4gY2FsaWJlciBmcm9tIFByb2R1Y3RTdW1tYXJ5RHRvIHdoZW4gYXZhaWxhYmxlICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKAlFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBCdXkgLyBDaG9vc2UgKi99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC0zIHB5LTIgYWxpZ24tdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRQYXJ0ICYmIHNlbGVjdGVkUGFydC51cmwgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6aW5saW5lLWZsZXggcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHB4LTIuNSBweS0xIHRleHQtWzAuN3JlbV0gZm9udC1tZWRpdW0gdGV4dC16aW5jLTMwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZSBQYXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtzZWxlY3RlZFBhcnQudXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggcm91bmRlZC1tZCBiZy1hbWJlci00MDAgcHgtMi41IHB5LTEgdGV4dC1bMC43cmVtXSBmb250LXNlbWlib2xkIHRleHQtYmxhY2sgaG92ZXI6YmctYW1iZXItMzAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IGhhc1BhcnRzID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2AvZ3VuYnVpbGRlci8ke2NhdGVnb3J5LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzcwIHB4LTIuNSBweS0xIHRleHQtWzAuN3JlbV0gZm9udC1tZWRpdW0gdGV4dC16aW5jLTIwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy02MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHlvdSB3YW50IHRvIHByZS1zZWxlY3Qgc29tZXRoaW5nIGxhdGVyLCB5b3UgY2FuIGhhbmRsZSBoZXJlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgYSBQYXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtWzAuN3JlbV0gdGV4dC16aW5jLTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKAlFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICB7LyogV2hhdCdzIE5ldyAqL31cbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibXQtOCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItemluYy04MDAgYmctemluYy05NTAvODAgcC0zIG1kOnAtNFwiPlxuICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE2ZW1dIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICBXaGF0JmFwb3M7cyBOZXcgaW4gRWFybHkgQWNjZXNzXG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibXQtMiBzcGFjZS15LTEgdGV4dC1zbSB0ZXh0LXppbmMtNDAwXCI+XG4gICAgICAgICAgICA8bGk+4oCiIExpdmUgcGFydHMgYW5kIHByaWNpbmcgcHVsbGVkIGZyb20gbXVsdGlwbGUgbWVyY2hhbnRzLjwvbGk+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIOKAoiBHcm91cGVkIGxheW91dCBmb3IgbG93ZXIgYW5kIHVwcGVyIHJlY2VpdmVyIHBhcnRzIHNvIHlvdSBjYW4gc2VlXG4gICAgICAgICAgICAgIGF0IGEgZ2xhbmNlIHdoaWNoIHNlY3Rpb25zIG9mIHlvdXIgYnVpbGQgYXJlIHN0aWxsIG1pc3NpbmcuXG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICDigKIgUnVubmluZyBidWlsZCB0b3RhbCB0aGF0IHVwZGF0ZXMgYXV0b21hdGljYWxseSBhcyB5b3UgYWRkIG9yXG4gICAgICAgICAgICAgIHN3YXAgY29tcG9uZW50cy5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIOKAoiBMb2NhbCBidWlsZCBwZXJzaXN0ZW5jZSBzbyB5b3VyIHNlbGVjdGlvbnMgc3RpY2sgYXJvdW5kIGJldHdlZW5cbiAgICAgICAgICAgICAgdmlzaXRzIG9uIHRoaXMgZGV2aWNlLlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgey8qIFJvYWRtYXAgKi99XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm10LTggcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXppbmMtODAwIGJnLXppbmMtOTUwLzgwIHAtMyBtZDpwLTRcIj5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy1bMC4xNmVtXSB0ZXh0LWFtYmVyLTMwMFwiPlxuICAgICAgICAgICAgV2hhdCZhcG9zO3Mgb24gb3VyIHJvYWRtYXBcbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC0yIHNwYWNlLXktMSB0ZXh0LXNtIHRleHQtemluYy00MDBcIj5cbiAgICAgICAgICAgIDxsaT7igKIgUGxhdGZvcm0gZmlsdGVycyAoQVItMTUsIEFSLTksIEFSLTEwKTwvbGk+XG4gICAgICAgICAgICA8bGk+4oCiIE1vcmUgcGFydCBjYXRlZ29yaWVzIGFuZCBmdXJuaXR1cmU8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBSaWNoZXIgcHJpY2luZy9zdG9jayBzeW5jPC9saT5cbiAgICAgICAgICAgIDxsaT7igKIgU21hcnRlciBjb21wYXRpYmlsaXR5IGNoZWNrcyBiZXR3ZWVuIGNvbXBvbmVudHM8L2xpPlxuICAgICAgICAgICAgPGxpPuKAoiBBUjkvQVIxMCBzdXBwb3J0IGFuZCBtb3JlPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21haW4+XG4gICk7XG59Il0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkxpbmsiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VSb3V0ZXIiLCJDQVRFR09SSUVTIiwiUEFSVF9ST0xFX1RPX0NBVEVHT1JZIiwiQVBJX0JBU0VfVVJMIiwicHJvY2VzcyIsImVudiIsIk5FWFRfUFVCTElDX0FQSV9CQVNFX1VSTCIsIlNUT1JBR0VfS0VZIiwiQ0FURUdPUllfR1JPVVBTIiwiaWQiLCJsYWJlbCIsImRlc2NyaXB0aW9uIiwiY2F0ZWdvcnlJZHMiLCJHdW5idWlsZGVyUGFnZSIsInNlYXJjaFBhcmFtcyIsInJvdXRlciIsInBhcnRzIiwic2V0UGFydHMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImVycm9yIiwic2V0RXJyb3IiLCJidWlsZCIsInNldEJ1aWxkIiwic3RvcmVkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsInNoYXJlU3RhdHVzIiwic2V0U2hhcmVTdGF0dXMiLCJzaGFyZVVybCIsInNldFNoYXJlVXJsIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImZldGNoUHJvZHVjdHMiLCJyZXMiLCJmZXRjaCIsInNpZ25hbCIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJkYXRhIiwianNvbiIsIm5vcm1hbGl6ZWQiLCJtYXAiLCJwIiwiY2F0ZWdvcnlJZCIsInBhcnRSb2xlIiwiYnV5VXJsIiwidW5kZWZpbmVkIiwiU3RyaW5nIiwibmFtZSIsImJyYW5kIiwicHJpY2UiLCJpbWFnZVVybCIsIm1haW5JbWFnZVVybCIsImFmZmlsaWF0ZVVybCIsInVybCIsIm5vdGVzIiwiZmlsdGVyIiwiZXJyIiwibWVzc2FnZSIsImFib3J0Iiwic2VsZWN0UGFyYW0iLCJnZXQiLCJwYXJ0SWQiLCJzcGxpdCIsInNvbWUiLCJjIiwicHJldiIsInVwZGF0ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsInNjcm9sbCIsInBhcnRzQnlDYXRlZ29yeSIsImdyb3VwZWQiLCJjYXRlZ29yeSIsInNlbGVjdGVkUGFydHMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsIkJvb2xlYW4iLCJ0b3RhbFByaWNlIiwicmVkdWNlIiwic3VtIiwia2V5cyIsImxlbmd0aCIsInBheWxvYWQiLCJlbmNvZGVkIiwid2luZG93IiwiYnRvYSIsIm9yaWdpbiIsImxvY2F0aW9uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaGFuZGxlU2VsZWN0UGFydCIsInN1bW1hcnlDYXRlZ29yeU9yZGVyIiwiZmxhdE1hcCIsImdyb3VwIiwiaGFuZGxlU2hhcmUiLCJsaW5lcyIsInB1c2giLCJ0b0ZpeGVkIiwiZm9yRWFjaCIsImNhdCIsInNlbGVjdGVkUGFydElkIiwicGFydCIsInRleHQiLCJqb2luIiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwiaGFuZGxlQ29weUxpbmsiLCJoYW5kbGVOYXRpdmVTaGFyZSIsInNoYXJlIiwidGl0bGUiLCJtYWluIiwiY2xhc3NOYW1lIiwiZGl2IiwiaGVhZGVyIiwiaDEiLCJzcGFuIiwic2VjdGlvbiIsImgyIiwiaHJlZiIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwiZGlzYWJsZWQiLCJyZW1vdmVJdGVtIiwiaDMiLCJpbnB1dCIsInJlYWRPbmx5IiwidmFsdWUiLCJncm91cENhdGVnb3JpZXMiLCJpbmNsdWRlcyIsInRhYmxlIiwidGhlYWQiLCJ0ciIsInRoIiwidGJvZHkiLCJjYXRlZ29yeVBhcnRzIiwic2VsZWN0ZWRQYXJ0IiwiaGFzUGFydHMiLCJ0ZCIsImEiLCJ0YXJnZXQiLCJyZWwiLCJ1bCIsImxpIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./app/gunbuilder/page.tsx\n");
/***/ }),
/***/ "(ssr)/./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 */ });\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 _globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./globals.css */ \"(ssr)/./app/globals.css\");\n/* harmony import */ var _context_AuthContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/context/AuthContext */ \"(ssr)/./context/AuthContext.tsx\");\n/* harmony import */ var _components_TopNav__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/TopNav */ \"(ssr)/./components/TopNav.tsx\");\n/* harmony import */ var _components_BuilderNav__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/BuilderNav */ \"(ssr)/./components/BuilderNav.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n // or default import if that's how you exported it\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 className: \"bg-black text-zinc-100\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_context_AuthContext__WEBPACK_IMPORTED_MODULE_2__.AuthProvider, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_TopNav__WEBPACK_IMPORTED_MODULE_3__.TopNav, {}, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 15,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_BuilderNav__WEBPACK_IMPORTED_MODULE_4__.BuilderNav, {}, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 16,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"min-h-screen\",\n children: children\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 17,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/app/layout.tsx\",\n lineNumber: 14,\n columnNumber: 9\n }, this)\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9hcHAvbGF5b3V0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUV1QjtBQUU4QjtBQUNSLENBQUMsa0RBQWtEO0FBQzNDO0FBRXRDLFNBQVNHLFdBQVcsRUFBRUMsUUFBUSxFQUEyQjtJQUN0RSxxQkFDRSw4REFBQ0M7UUFBS0MsTUFBSztrQkFDVCw0RUFBQ0M7WUFBS0MsV0FBVTtzQkFFZCw0RUFBQ1IsOERBQVlBOztrQ0FDWCw4REFBQ0Msc0RBQU1BOzs7OztrQ0FDUCw4REFBQ0MsOERBQVVBOzs7OztrQ0FDWCw4REFBQ087d0JBQUtELFdBQVU7a0NBQWdCSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUsxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2d1bmJ1aWxkZXItcHJvdG90eXBlLy4vYXBwL2xheW91dC50c3g/OTk4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IFwiLi9nbG9iYWxzLmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEF1dGhQcm92aWRlciB9IGZyb20gXCJAL2NvbnRleHQvQXV0aENvbnRleHRcIjtcbmltcG9ydCB7IFRvcE5hdiB9IGZyb20gXCJAL2NvbXBvbmVudHMvVG9wTmF2XCI7IC8vIG9yIGRlZmF1bHQgaW1wb3J0IGlmIHRoYXQncyBob3cgeW91IGV4cG9ydGVkIGl0XG5pbXBvcnQgeyBCdWlsZGVyTmF2IH0gZnJvbSBcIkAvY29tcG9uZW50cy9CdWlsZGVyTmF2XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJvb3RMYXlvdXQoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfSkge1xuICByZXR1cm4gKFxuICAgIDxodG1sIGxhbmc9XCJlblwiPlxuICAgICAgPGJvZHkgY2xhc3NOYW1lPVwiYmctYmxhY2sgdGV4dC16aW5jLTEwMFwiPlxuICAgICAgICB7LyogQXV0aFByb3ZpZGVyIHdyYXBzIGV2ZXJ5dGhpbmcgdGhhdCB1c2VzIHVzZUF1dGggKi99XG4gICAgICAgIDxBdXRoUHJvdmlkZXI+XG4gICAgICAgICAgPFRvcE5hdiAvPlxuICAgICAgICAgIDxCdWlsZGVyTmF2IC8+XG4gICAgICAgICAgPG1haW4gY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuXCI+e2NoaWxkcmVufTwvbWFpbj5cbiAgICAgICAgPC9BdXRoUHJvdmlkZXI+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufSJdLCJuYW1lcyI6WyJBdXRoUHJvdmlkZXIiLCJUb3BOYXYiLCJCdWlsZGVyTmF2IiwiUm9vdExheW91dCIsImNoaWxkcmVuIiwiaHRtbCIsImxhbmciLCJib2R5IiwiY2xhc3NOYW1lIiwibWFpbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./app/layout.tsx\n");
/***/ }),
/***/ "(ssr)/./components/BuilderNav.tsx":
/*!***********************************!*\
!*** ./components/BuilderNav.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 */ BuilderNav: () => (/* binding */ BuilderNav),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\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 next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/data/gunbuilderParts */ \"(ssr)/./data/gunbuilderParts.ts\");\n/* __next_internal_client_entry_do_not_use__ BuilderNav,default auto */ \n\n\n\n// Helper to group categories for the dropdowns\nfunction groupCategories(group) {\n return _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.filter((c)=>c.group === group);\n}\nfunction BuilderNav({ activeCategoryId }) {\n const searchParams = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useSearchParams)();\n const lower = groupCategories(\"lower\");\n const upper = groupCategories(\"upper\");\n const accessories = groupCategories(\"accessories\");\n const currentCategory = activeCategoryId ?? searchParams.get(\"category\") ?? undefined;\n const baseHref = \"/gunbuilder\";\n const renderDropdown = (label, items)=>{\n if (!items.length) return null;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative group\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: `inline-flex items-center gap-1 font-medium tracking-wide transition-colors uppercase text-[11px] ${items.some((cat)=>cat.id === currentCategory) ? \"text-white\" : \"text-neutral-200 hover:text-white\"}`,\n children: [\n label,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[9px]\",\n children: \"▾\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 43,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 34,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"invisible opacity-0 group-hover:visible group-hover:opacity-100 transition-all absolute left-0 mt-2 rounded-md border border-neutral-800 bg-black/95 shadow-xl z-40 min-w-[220px]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"py-2 text-sm\",\n children: items.map((cat)=>{\n const isActive = currentCategory === cat.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: `${baseHref}/${cat.id}`,\n className: [\n \"block w-full px-3 py-1.5 text-left text-sm transition-colors\",\n isActive ? \"bg-neutral-800 text-white\" : \"text-neutral-300 hover:bg-neutral-800 hover:text-white\"\n ].join(\" \"),\n children: cat.name\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 52,\n columnNumber: 19\n }, this)\n }, cat.id, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 51,\n columnNumber: 17\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 46,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 33,\n columnNumber: 7\n }, this);\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-6xl mx-auto w-full\",\n children: [\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"flex items-center gap-6 border-b border-neutral-900 px-6 py-3 text-sm bg-black/95 backdrop-blur-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: baseHref,\n className: \"font-semibold text-neutral-100 hover:text-white tracking-[0.25em] uppercase text-[11px]\",\n children: \"Builder\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 76,\n columnNumber: 9\n }, this),\n renderDropdown(\"Lower Parts\", lower),\n renderDropdown(\"Upper Parts\", upper),\n renderDropdown(\"Accessories\", accessories),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: \"/builds\",\n className: \"font-medium text-neutral-300 hover:text-white tracking-[0.25em] uppercase text-[11px]\",\n children: \"Builds\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 87,\n columnNumber: 9\n }, this),\n currentCategory && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"ml-auto flex items-center gap-2 text-neutral-400 text-xs\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"uppercase tracking-wide text-[10px]\",\n children: \"Viewing\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 97,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium text-neutral-100\",\n children: _data_gunbuilderParts__WEBPACK_IMPORTED_MODULE_3__.CATEGORIES.find((c)=>c.id === currentCategory)?.name ?? currentCategory\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 98,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: baseHref,\n className: \"rounded border border-neutral-700 px-2 py-0.5 text-[10px] uppercase tracking-wide hover:bg-neutral-800 hover:text-white\",\n children: \"Clear\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 102,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 96,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 74,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/BuilderNav.tsx\",\n lineNumber: 73,\n columnNumber: 5\n }, this);\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BuilderNav);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL0J1aWxkZXJOYXYudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRTZCO0FBQ3FCO0FBQ0U7QUFPcEQsK0NBQStDO0FBQy9DLFNBQVNHLGdCQUFnQkMsS0FBd0M7SUFDL0QsT0FBT0YsNkRBQVVBLENBQUNHLE1BQU0sQ0FBQyxDQUFDQyxJQUFNQSxFQUFFRixLQUFLLEtBQUtBO0FBQzlDO0FBRU8sU0FBU0csV0FBVyxFQUFFQyxnQkFBZ0IsRUFBbUI7SUFDOUQsTUFBTUMsZUFBZVIsZ0VBQWVBO0lBRXBDLE1BQU1TLFFBQVFQLGdCQUFnQjtJQUM5QixNQUFNUSxRQUFRUixnQkFBZ0I7SUFDOUIsTUFBTVMsY0FBY1QsZ0JBQWdCO0lBRXBDLE1BQU1VLGtCQUNKTCxvQkFBb0JDLGFBQWFLLEdBQUcsQ0FBQyxlQUFlQztJQUV0RCxNQUFNQyxXQUFXO0lBRWpCLE1BQU1DLGlCQUFpQixDQUFDQyxPQUFlQztRQUNyQyxJQUFJLENBQUNBLE1BQU1DLE1BQU0sRUFBRSxPQUFPO1FBRTFCLHFCQUNFLDhEQUFDQztZQUFJQyxXQUFVOzs4QkFDYiw4REFBQ0M7b0JBQ0NDLE1BQUs7b0JBQ0xGLFdBQVcsQ0FBQyxpR0FBaUcsRUFDM0dILE1BQU1NLElBQUksQ0FBQ0MsQ0FBQUEsTUFBT0EsSUFBSUMsRUFBRSxLQUFLZCxtQkFDekIsZUFDQSxvQ0FDTCxDQUFDOzt3QkFFREs7c0NBQ0QsOERBQUNVOzRCQUFLTixXQUFVO3NDQUFhOzs7Ozs7Ozs7Ozs7OEJBRy9CLDhEQUFDRDtvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ087d0JBQUdQLFdBQVU7a0NBQ1hILE1BQU1XLEdBQUcsQ0FBQyxDQUFDSjs0QkFDVixNQUFNSyxXQUFXbEIsb0JBQW9CYSxJQUFJQyxFQUFFOzRCQUMzQyxxQkFDRSw4REFBQ0s7MENBQ0MsNEVBQUNoQyxpREFBSUE7b0NBQ0hpQyxNQUFNLENBQUMsRUFBRWpCLFNBQVMsQ0FBQyxFQUFFVSxJQUFJQyxFQUFFLENBQUMsQ0FBQztvQ0FDN0JMLFdBQVc7d0NBQ1Q7d0NBQ0FTLFdBQ0ksOEJBQ0E7cUNBQ0wsQ0FBQ0csSUFBSSxDQUFDOzhDQUVOUixJQUFJUyxJQUFJOzs7Ozs7K0JBVkpULElBQUlDLEVBQUU7Ozs7O3dCQWNuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFLVjtJQUVBLHFCQUNFLDhEQUFDTjtRQUFJQyxXQUFVOztZQUEyQjswQkFDeEMsOERBQUNjO2dCQUFJZCxXQUFVOztrQ0FFYiw4REFBQ3RCLGlEQUFJQTt3QkFDSGlDLE1BQU1qQjt3QkFDTk0sV0FBVTtrQ0FDWDs7Ozs7O29CQUlBTCxlQUFlLGVBQWVQO29CQUM5Qk8sZUFBZSxlQUFlTjtvQkFDOUJNLGVBQWUsZUFBZUw7a0NBRS9CLDhEQUFDWixpREFBSUE7d0JBQ0hpQyxNQUFLO3dCQUNMWCxXQUFVO2tDQUNYOzs7Ozs7b0JBS0FULGlDQUNDLDhEQUFDUTt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNNO2dDQUFLTixXQUFVOzBDQUFzQzs7Ozs7OzBDQUN0RCw4REFBQ007Z0NBQUtOLFdBQVU7MENBQ2JwQiw2REFBVUEsQ0FBQ21DLElBQUksQ0FBQyxDQUFDL0IsSUFBTUEsRUFBRXFCLEVBQUUsS0FBS2Qsa0JBQWtCc0IsUUFDakR0Qjs7Ozs7OzBDQUVKLDhEQUFDYixpREFBSUE7Z0NBQ0hpQyxNQUFNakI7Z0NBQ05NLFdBQVU7MENBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFiO0FBRUEsaUVBQWVmLFVBQVVBLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2NvbXBvbmVudHMvQnVpbGRlck5hdi50c3g/YzFkNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IExpbmsgZnJvbSBcIm5leHQvbGlua1wiO1xuaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgQ0FURUdPUklFUyB9IGZyb20gXCJAL2RhdGEvZ3VuYnVpbGRlclBhcnRzXCI7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3J5IH0gZnJvbSBcIkAvdHlwZXMvZ3VuYnVpbGRlclwiO1xuXG50eXBlIEJ1aWxkZXJOYXZQcm9wcyA9IHtcbiAgYWN0aXZlQ2F0ZWdvcnlJZD86IHN0cmluZyB8IG51bGw7XG59O1xuXG4vLyBIZWxwZXIgdG8gZ3JvdXAgY2F0ZWdvcmllcyBmb3IgdGhlIGRyb3Bkb3duc1xuZnVuY3Rpb24gZ3JvdXBDYXRlZ29yaWVzKGdyb3VwOiBcImxvd2VyXCIgfCBcInVwcGVyXCIgfCBcImFjY2Vzc29yaWVzXCIpOiBDYXRlZ29yeVtdIHtcbiAgcmV0dXJuIENBVEVHT1JJRVMuZmlsdGVyKChjKSA9PiBjLmdyb3VwID09PSBncm91cCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCdWlsZGVyTmF2KHsgYWN0aXZlQ2F0ZWdvcnlJZCB9OiBCdWlsZGVyTmF2UHJvcHMpIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKCk7XG5cbiAgY29uc3QgbG93ZXIgPSBncm91cENhdGVnb3JpZXMoXCJsb3dlclwiKTtcbiAgY29uc3QgdXBwZXIgPSBncm91cENhdGVnb3JpZXMoXCJ1cHBlclwiKTtcbiAgY29uc3QgYWNjZXNzb3JpZXMgPSBncm91cENhdGVnb3JpZXMoXCJhY2Nlc3Nvcmllc1wiKTtcblxuICBjb25zdCBjdXJyZW50Q2F0ZWdvcnkgPVxuICAgIGFjdGl2ZUNhdGVnb3J5SWQgPz8gc2VhcmNoUGFyYW1zLmdldChcImNhdGVnb3J5XCIpID8/IHVuZGVmaW5lZDtcblxuICBjb25zdCBiYXNlSHJlZiA9IFwiL2d1bmJ1aWxkZXJcIjtcblxuICBjb25zdCByZW5kZXJEcm9wZG93biA9IChsYWJlbDogc3RyaW5nLCBpdGVtczogQ2F0ZWdvcnlbXSkgPT4ge1xuICAgIGlmICghaXRlbXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGdyb3VwXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e2BpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgZm9udC1tZWRpdW0gdHJhY2tpbmctd2lkZSB0cmFuc2l0aW9uLWNvbG9ycyB1cHBlcmNhc2UgdGV4dC1bMTFweF0gJHtcbiAgICAgICAgICAgIGl0ZW1zLnNvbWUoY2F0ID0+IGNhdC5pZCA9PT0gY3VycmVudENhdGVnb3J5KVxuICAgICAgICAgICAgICA/IFwidGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgIDogXCJ0ZXh0LW5ldXRyYWwtMjAwIGhvdmVyOnRleHQtd2hpdGVcIlxuICAgICAgICAgIH1gfVxuICAgICAgICA+XG4gICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtWzlweF1cIj7ilr48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW52aXNpYmxlIG9wYWNpdHktMCBncm91cC1ob3Zlcjp2aXNpYmxlIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tYWxsIGFic29sdXRlIGxlZnQtMCBtdC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1uZXV0cmFsLTgwMCBiZy1ibGFjay85NSBzaGFkb3cteGwgei00MCBtaW4tdy1bMjIwcHhdXCI+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInB5LTIgdGV4dC1zbVwiPlxuICAgICAgICAgICAge2l0ZW1zLm1hcCgoY2F0KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gY3VycmVudENhdGVnb3J5ID09PSBjYXQuaWQ7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGxpIGtleT17Y2F0LmlkfT5cbiAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9e2Ake2Jhc2VIcmVmfS8ke2NhdC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1tcbiAgICAgICAgICAgICAgICAgICAgICBcImJsb2NrIHctZnVsbCBweC0zIHB5LTEuNSB0ZXh0LWxlZnQgdGV4dC1zbSB0cmFuc2l0aW9uLWNvbG9yc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiYmctbmV1dHJhbC04MDAgdGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwidGV4dC1uZXV0cmFsLTMwMCBob3ZlcjpiZy1uZXV0cmFsLTgwMCBob3Zlcjp0ZXh0LXdoaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIF0uam9pbihcIiBcIil9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtjYXQubmFtZX1cbiAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy02eGwgbXgtYXV0byB3LWZ1bGxcIj4gICB7Lyog4oaQIGFsaWducyB3aXRoIHRvcG5hdiAqL31cbiAgICAgIDxuYXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTYgYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtOTAwIHB4LTYgcHktMyB0ZXh0LXNtIGJnLWJsYWNrLzk1IGJhY2tkcm9wLWJsdXItc21cIj5cbiAgICAgICAgey8qIFByaW1hcnkgYnVpbGRlciBsaW5rICovfVxuICAgICAgICA8TGlua1xuICAgICAgICAgIGhyZWY9e2Jhc2VIcmVmfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgdGV4dC1uZXV0cmFsLTEwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYWNraW5nLVswLjI1ZW1dIHVwcGVyY2FzZSB0ZXh0LVsxMXB4XVwiXG4gICAgICAgID5cbiAgICAgICAgICBCdWlsZGVyXG4gICAgICAgIDwvTGluaz5cblxuICAgICAgICB7cmVuZGVyRHJvcGRvd24oXCJMb3dlciBQYXJ0c1wiLCBsb3dlcil9XG4gICAgICAgIHtyZW5kZXJEcm9wZG93bihcIlVwcGVyIFBhcnRzXCIsIHVwcGVyKX1cbiAgICAgICAge3JlbmRlckRyb3Bkb3duKFwiQWNjZXNzb3JpZXNcIiwgYWNjZXNzb3JpZXMpfVxuXG4gICAgICAgIDxMaW5rXG4gICAgICAgICAgaHJlZj1cIi9idWlsZHNcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtIHRleHQtbmV1dHJhbC0zMDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFja2luZy1bMC4yNWVtXSB1cHBlcmNhc2UgdGV4dC1bMTFweF1cIlxuICAgICAgICA+XG4gICAgICAgICAgQnVpbGRzXG4gICAgICAgIDwvTGluaz5cblxuICAgICAgICB7LyogUmlnaHQg4oaSIEN1cnJlbnQgZmlsdGVyICovfVxuICAgICAgICB7Y3VycmVudENhdGVnb3J5ICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1sLWF1dG8gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1uZXV0cmFsLTQwMCB0ZXh0LXhzXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSB0ZXh0LVsxMHB4XVwiPlZpZXdpbmc8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bSB0ZXh0LW5ldXRyYWwtMTAwXCI+XG4gICAgICAgICAgICAgIHtDQVRFR09SSUVTLmZpbmQoKGMpID0+IGMuaWQgPT09IGN1cnJlbnRDYXRlZ29yeSk/Lm5hbWUgPz9cbiAgICAgICAgICAgICAgICBjdXJyZW50Q2F0ZWdvcnl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICBocmVmPXtiYXNlSHJlZn1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZCBib3JkZXIgYm9yZGVyLW5ldXRyYWwtNzAwIHB4LTIgcHktMC41IHRleHQtWzEwcHhdIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIGhvdmVyOmJnLW5ldXRyYWwtODAwIGhvdmVyOnRleHQtd2hpdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9uYXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1aWxkZXJOYXY7Il0sIm5hbWVzIjpbIkxpbmsiLCJ1c2VTZWFyY2hQYXJhbXMiLCJDQVRFR09SSUVTIiwiZ3JvdXBDYXRlZ29yaWVzIiwiZ3JvdXAiLCJmaWx0ZXIiLCJjIiwiQnVpbGRlck5hdiIsImFjdGl2ZUNhdGVnb3J5SWQiLCJzZWFyY2hQYXJhbXMiLCJsb3dlciIsInVwcGVyIiwiYWNjZXNzb3JpZXMiLCJjdXJyZW50Q2F0ZWdvcnkiLCJnZXQiLCJ1bmRlZmluZWQiLCJiYXNlSHJlZiIsInJlbmRlckRyb3Bkb3duIiwibGFiZWwiLCJpdGVtcyIsImxlbmd0aCIsImRpdiIsImNsYXNzTmFtZSIsImJ1dHRvbiIsInR5cGUiLCJzb21lIiwiY2F0IiwiaWQiLCJzcGFuIiwidWwiLCJtYXAiLCJpc0FjdGl2ZSIsImxpIiwiaHJlZiIsImpvaW4iLCJuYW1lIiwibmF2IiwiZmluZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./components/BuilderNav.tsx\n");
/***/ }),
/***/ "(ssr)/./components/TopNav.tsx":
/*!*******************************!*\
!*** ./components/TopNav.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 */ TopNav: () => (/* binding */ TopNav)\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 next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(ssr)/./node_modules/next/dist/api/link.js\");\n/* harmony import */ var _context_AuthContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/context/AuthContext */ \"(ssr)/./context/AuthContext.tsx\");\n// components/TopNav.tsx\n/* __next_internal_client_entry_do_not_use__ TopNav auto */ \n\n\nfunction TopNav() {\n const { user, logout, loading } = (0,_context_AuthContext__WEBPACK_IMPORTED_MODULE_2__.useAuth)();\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"border-b border-zinc-800 bg-black/95 backdrop-blur\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b border-amber-500/20 bg-amber-500/5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl flex-col gap-1 px-4 py-2 text-[0.75rem] text-amber-100 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: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"rounded-sm bg-amber-500/20 px-2 py-0.5 text-[0.65rem] font-semibold uppercase tracking-[0.18em] text-amber-300\",\n children: \"Early Access Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 15,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"hidden text-amber-100/90 md:inline\",\n children: \"You're using an early-access prototype of The Armory. Data, pricing, and available parts are still evolving.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 18,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 14,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-amber-100/90 md:hidden\",\n children: \"Early-access prototype. Data and pricing may change.\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 23,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 13,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 12,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex max-w-6xl items-center justify-between px-4 py-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: \"/\",\n className: \"text-xs font-semibold tracking-[0.2em] uppercase text-zinc-400\",\n children: \"The Build Bench\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 30,\n columnNumber: 9\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)(\"button\", {\n type: \"button\",\n className: \"inline-flex h-8 w-8 items-center justify-center rounded-full border border-zinc-700 bg-zinc-900/60 text-zinc-400 hover:text-zinc-200 hover:bg-zinc-800 hover:border-zinc-500 transition-colors\",\n \"aria-label\": \"Search (coming soon)\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"h-4 w-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n cx: \"11\",\n cy: \"11\",\n r: \"6\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 55,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"line\", {\n x1: \"16.5\",\n y1: \"16.5\",\n x2: \"21\",\n y2: \"21\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 56,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 45,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 40,\n columnNumber: 11\n }, this),\n loading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-zinc-500\",\n children: \"Checking session…\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 61,\n columnNumber: 13\n }, this) : user ? /*#__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: \"text-xs text-zinc-300\",\n children: user.displayName || user.email\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 64,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: logout,\n className: \"text-xs font-medium text-zinc-400 hover:text-zinc-100 transition-colors\",\n children: \"Log Out\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 67,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true) : /*#__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)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: \"/login\",\n className: \"text-xs font-medium text-zinc-400 hover:text-zinc-100 transition-colors\",\n children: \"Log In\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 77,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_link__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n href: \"/register\",\n className: \"rounded-md border border-amber-400/70 bg-amber-400/10 px-3 py-1.5 text-xs font-semibold text-amber-200 hover:bg-amber-400/20 transition-colors\",\n children: \"Join Beta\"\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 83,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 38,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 28,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/components/TopNav.tsx\",\n lineNumber: 11,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL1RvcE5hdi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSx3QkFBd0I7O0FBR0s7QUFDbUI7QUFFekMsU0FBU0U7SUFDZCxNQUFNLEVBQUVDLElBQUksRUFBRUMsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBR0osNkRBQU9BO0lBRXpDLHFCQUNFLDhEQUFDSztRQUFPQyxXQUFVOzswQkFDaEIsOERBQUNDO2dCQUFJRCxXQUFVOzBCQUNiLDRFQUFDQztvQkFBSUQsV0FBVTs7c0NBQ2IsOERBQUNDOzRCQUFJRCxXQUFVOzs4Q0FDYiw4REFBQ0U7b0NBQUtGLFdBQVU7OENBQWlIOzs7Ozs7OENBR2pJLDhEQUFDRTtvQ0FBS0YsV0FBVTs4Q0FBcUM7Ozs7Ozs7Ozs7OztzQ0FLdkQsOERBQUNFOzRCQUFLRixXQUFVO3NDQUE4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBS2xELDhEQUFDQztnQkFBSUQsV0FBVTs7a0NBRWIsOERBQUNQLGlEQUFJQTt3QkFDSFUsTUFBSzt3QkFDTEgsV0FBVTtrQ0FDWDs7Ozs7O2tDQUtELDhEQUFDQzt3QkFBSUQsV0FBVTs7MENBRWIsOERBQUNJO2dDQUNDQyxNQUFLO2dDQUNMTCxXQUFVO2dDQUNWTSxjQUFXOzBDQUVYLDRFQUFDQztvQ0FDQ0MsT0FBTTtvQ0FDTkMsU0FBUTtvQ0FDUkMsTUFBSztvQ0FDTEMsUUFBTztvQ0FDUEMsYUFBYTtvQ0FDYkMsZUFBYztvQ0FDZEMsZ0JBQWU7b0NBQ2ZkLFdBQVU7O3NEQUVWLDhEQUFDZTs0Q0FBT0MsSUFBRzs0Q0FBS0MsSUFBRzs0Q0FBS0MsR0FBRTs7Ozs7O3NEQUMxQiw4REFBQ0M7NENBQUtDLElBQUc7NENBQU9DLElBQUc7NENBQU9DLElBQUc7NENBQUtDLElBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7OzRCQUl4Q3pCLHdCQUNDLDhEQUFDSTtnQ0FBS0YsV0FBVTswQ0FBd0I7Ozs7O3VDQUN0Q0oscUJBQ0Y7O2tEQUNFLDhEQUFDTTt3Q0FBS0YsV0FBVTtrREFDYkosS0FBSzRCLFdBQVcsSUFBSTVCLEtBQUs2QixLQUFLOzs7Ozs7a0RBRWpDLDhEQUFDckI7d0NBQ0NDLE1BQUs7d0NBQ0xxQixTQUFTN0I7d0NBQ1RHLFdBQVU7a0RBQ1g7Ozs7Ozs7NkRBS0g7O2tEQUNFLDhEQUFDUCxpREFBSUE7d0NBQ0hVLE1BQUs7d0NBQ0xILFdBQVU7a0RBQ1g7Ozs7OztrREFHRCw4REFBQ1AsaURBQUlBO3dDQUNIVSxNQUFLO3dDQUNMSCxXQUFVO2tEQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvLi9jb21wb25lbnRzL1RvcE5hdi50c3g/ZGY1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjb21wb25lbnRzL1RvcE5hdi50c3hcblwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgTGluayBmcm9tIFwibmV4dC9saW5rXCI7XG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSBcIkAvY29udGV4dC9BdXRoQ29udGV4dFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gVG9wTmF2KCkge1xuICBjb25zdCB7IHVzZXIsIGxvZ291dCwgbG9hZGluZyB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiAoXG4gICAgPGhlYWRlciBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItemluYy04MDAgYmctYmxhY2svOTUgYmFja2Ryb3AtYmx1clwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItYW1iZXItNTAwLzIwIGJnLWFtYmVyLTUwMC81XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBmbGV4IG1heC13LTZ4bCBmbGV4LWNvbCBnYXAtMSBweC00IHB5LTIgdGV4dC1bMC43NXJlbV0gdGV4dC1hbWJlci0xMDAgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInJvdW5kZWQtc20gYmctYW1iZXItNTAwLzIwIHB4LTIgcHktMC41IHRleHQtWzAuNjVyZW1dIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjE4ZW1dIHRleHQtYW1iZXItMzAwXCI+XG4gICAgICAgICAgICAgIEVhcmx5IEFjY2VzcyBCZXRhXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gdGV4dC1hbWJlci0xMDAvOTAgbWQ6aW5saW5lXCI+XG4gICAgICAgICAgICAgIFlvdSZhcG9zO3JlIHVzaW5nIGFuIGVhcmx5LWFjY2VzcyBwcm90b3R5cGUgb2YgVGhlIEFybW9yeS4gRGF0YSxcbiAgICAgICAgICAgICAgcHJpY2luZywgYW5kIGF2YWlsYWJsZSBwYXJ0cyBhcmUgc3RpbGwgZXZvbHZpbmcuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1hbWJlci0xMDAvOTAgbWQ6aGlkZGVuXCI+XG4gICAgICAgICAgICBFYXJseS1hY2Nlc3MgcHJvdG90eXBlLiBEYXRhIGFuZCBwcmljaW5nIG1heSBjaGFuZ2UuXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIGZsZXggbWF4LXctNnhsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNCBweS0yXCI+XG4gICAgICAgIHsvKiBCcmFuZCAvIEhvbWUgbGluayAqL31cbiAgICAgICAgPExpbmtcbiAgICAgICAgICBocmVmPVwiL1wiXG4gICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLVswLjJlbV0gdXBwZXJjYXNlIHRleHQtemluYy00MDBcIlxuICAgICAgICA+XG4gICAgICAgICAgVGhlIEJ1aWxkIEJlbmNoXG4gICAgICAgIDwvTGluaz5cblxuICAgICAgICB7LyogUmlnaHQgc2lkZSBhY3Rpb25zICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgey8qIFNlYXJjaCBwbGFjZWhvbGRlciAqL31cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGgtOCB3LTggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLXppbmMtNzAwIGJnLXppbmMtOTAwLzYwIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTIwMCBob3ZlcjpiZy16aW5jLTgwMCBob3Zlcjpib3JkZXItemluYy01MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCAoY29taW5nIHNvb24pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICBzdHJva2VXaWR0aD17Mn1cbiAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNCB3LTRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjZcIiAvPlxuICAgICAgICAgICAgICA8bGluZSB4MT1cIjE2LjVcIiB5MT1cIjE2LjVcIiB4Mj1cIjIxXCIgeTI9XCIyMVwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXppbmMtNTAwXCI+Q2hlY2tpbmcgc2Vzc2lvbuKApjwvc3Bhbj5cbiAgICAgICAgICApIDogdXNlciA/IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC16aW5jLTMwMFwiPlxuICAgICAgICAgICAgICAgIHt1c2VyLmRpc3BsYXlOYW1lIHx8IHVzZXIuZW1haWx9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2xvZ291dH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtemluYy00MDAgaG92ZXI6dGV4dC16aW5jLTEwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBMb2cgT3V0XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgaHJlZj1cIi9sb2dpblwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXppbmMtNDAwIGhvdmVyOnRleHQtemluYy0xMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgTG9nIEluXG4gICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICBocmVmPVwiL3JlZ2lzdGVyXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYW1iZXItNDAwLzcwIGJnLWFtYmVyLTQwMC8xMCBweC0zIHB5LTEuNSB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1hbWJlci0yMDAgaG92ZXI6YmctYW1iZXItNDAwLzIwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEpvaW4gQmV0YVxuICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuICApO1xufSJdLCJuYW1lcyI6WyJMaW5rIiwidXNlQXV0aCIsIlRvcE5hdiIsInVzZXIiLCJsb2dvdXQiLCJsb2FkaW5nIiwiaGVhZGVyIiwiY2xhc3NOYW1lIiwiZGl2Iiwic3BhbiIsImhyZWYiLCJidXR0b24iLCJ0eXBlIiwiYXJpYS1sYWJlbCIsInN2ZyIsInhtbG5zIiwidmlld0JveCIsImZpbGwiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsImNpcmNsZSIsImN4IiwiY3kiLCJyIiwibGluZSIsIngxIiwieTEiLCJ4MiIsInkyIiwiZGlzcGxheU5hbWUiLCJlbWFpbCIsIm9uQ2xpY2siXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/TopNav.tsx\n");
/***/ }),
/***/ "(ssr)/./context/AuthContext.tsx":
/*!*********************************!*\
!*** ./context/AuthContext.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 */ AuthProvider: () => (/* binding */ AuthProvider),\n/* harmony export */ useAuth: () => (/* binding */ useAuth)\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/* __next_internal_client_entry_do_not_use__ AuthProvider,useAuth auto */ \n\nconst API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL ?? \"http://localhost:8080\";\nconst AuthContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(undefined);\nconst TOKEN_KEY = \"ballistic_auth_token\";\nconst USER_KEY = \"ballistic_auth_user\";\nfunction AuthProvider({ children }) {\n const [user, setUser] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [token, setToken] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true); // start true while we hydrate + reuse for calls\n // hydrate from localStorage\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n try {\n if (true) return;\n const storedToken = window.localStorage.getItem(TOKEN_KEY);\n const storedUser = window.localStorage.getItem(USER_KEY);\n if (storedToken && storedUser) {\n setToken(storedToken);\n setUser(JSON.parse(storedUser));\n }\n } catch {\n // ignore\n } finally{\n setLoading(false);\n }\n }, []);\n const setSession = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((newToken, newUser)=>{\n setToken(newToken);\n setUser(newUser);\n if (false) {}\n }, []);\n const clearSession = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{\n setToken(null);\n setUser(null);\n if (false) {}\n }, []);\n const register = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(async (params)=>{\n setLoading(true);\n try {\n const res = await fetch(`${API_BASE_URL}/api/auth/register`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n email: params.email,\n password: params.password,\n displayName: params.displayName\n })\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(text || \"Failed to create account\");\n }\n const data = await res.json();\n setSession(data.token, {\n email: data.email,\n displayName: data.displayName ?? null,\n role: data.role\n });\n } finally{\n setLoading(false);\n }\n }, [\n setSession\n ]);\n const login = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(async (params)=>{\n setLoading(true);\n try {\n const res = await fetch(`${API_BASE_URL}/api/auth/login`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n email: params.email,\n password: params.password\n })\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(text || \"Failed to log in\");\n }\n const data = await res.json();\n setSession(data.token, {\n email: data.email,\n displayName: data.displayName ?? null,\n role: data.role\n });\n } finally{\n setLoading(false);\n }\n }, [\n setSession\n ]);\n const logout = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{\n clearSession();\n }, [\n clearSession\n ]);\n const getAuthHeaders = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(()=>{\n if (!token) return {};\n return {\n Authorization: `Bearer ${token}`\n };\n }, [\n token\n ]);\n const value = {\n user,\n token,\n loading,\n login,\n register,\n logout,\n getAuthHeaders\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(AuthContext.Provider, {\n value: value,\n children: children\n }, void 0, false, {\n fileName: \"/Users/sean/Dev/gunbuilder-prototype/context/AuthContext.tsx\",\n lineNumber: 183,\n columnNumber: 10\n }, this);\n}\nfunction useAuth() {\n const ctx = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(AuthContext);\n if (!ctx) {\n throw new Error(\"useAuth must be used within an AuthProvider\");\n }\n return ctx;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFNLElBQUlDLE1BQU1ELFFBQVE7WUFDMUI7WUFFQSxNQUFNRSxPQUtGLE1BQU1YLElBQUlZLElBQUk7WUFFbEJyQixXQUFXb0IsS0FBSy9CLEtBQUssRUFBRTtnQkFDckJ5QixPQUFPTSxLQUFLTixLQUFLO2dCQUNqQkUsYUFBYUksS0FBS0osV0FBVyxJQUFJO2dCQUNqQ00sTUFBTUYsS0FBS0UsSUFBSTtZQUNqQjtRQUNGLFNBQVU7WUFDUjlCLFdBQVc7UUFDYjtJQUNGLEdBQ0E7UUFBQ1E7S0FBVztJQUdkLE1BQU13QixTQUFTbkQsa0RBQVdBLENBQUM7UUFDekJnQztJQUNGLEdBQUc7UUFBQ0E7S0FBYTtJQUVqQixNQUFNb0IsaUJBQWlCcEQsa0RBQVdBLENBQUM7UUFDakMsSUFBSSxDQUFDZ0IsT0FBTyxPQUFPLENBQUM7UUFDcEIsT0FBTztZQUNMcUMsZUFBZSxDQUFDLE9BQU8sRUFBRXJDLE1BQU0sQ0FBQztRQUNsQztJQUNGLEdBQUc7UUFBQ0E7S0FBTTtJQUVWLE1BQU1zQyxRQUEwQjtRQUM5QnhDO1FBQ0FFO1FBQ0FFO1FBQ0FnQztRQUNBaEI7UUFDQWlCO1FBQ0FDO0lBQ0Y7SUFFQSxxQkFBTyw4REFBQzVDLFlBQVkrQyxRQUFRO1FBQUNELE9BQU9BO2tCQUFRekM7Ozs7OztBQUM5QztBQUVPLFNBQVMyQztJQUNkLE1BQU1DLE1BQU14RCxpREFBVUEsQ0FBQ087SUFDdkIsSUFBSSxDQUFDaUQsS0FBSztRQUNSLE1BQU0sSUFBSVgsTUFBTTtJQUNsQjtJQUNBLE9BQU9XO0FBQ1QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2NvbnRleHQvQXV0aENvbnRleHQudHN4P2ZkZmYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0LFxuICB1c2VFZmZlY3QsXG4gIHVzZVN0YXRlLFxuICBSZWFjdE5vZGUsXG59IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBBUElfQkFTRV9VUkwgPVxuICBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwgPz8gXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIjtcblxudHlwZSBBdXRoVXNlciA9IHtcbiAgZW1haWw6IHN0cmluZztcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICByb2xlOiBzdHJpbmc7XG59IHwgbnVsbDtcblxudHlwZSBBdXRoQ29udGV4dFZhbHVlID0ge1xuICB1c2VyOiBBdXRoVXNlcjtcbiAgdG9rZW46IHN0cmluZyB8IG51bGw7IFxuICBsb2FkaW5nOiBib29sZWFuOyAvLyBjb3ZlcnMgaW5pdGlhbCBoeWRyYXRlICsgYWN0aXZlIGF1dGggcmVxdWVzdHNcbiAgbG9naW46IChwYXJhbXM6IHsgZW1haWw6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9KSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWdpc3RlcjogKHBhcmFtczoge1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgbG9nb3V0OiAoKSA9PiB2b2lkO1xuICBnZXRBdXRoSGVhZGVyczogKCkgPT4gSGVhZGVyc0luaXQ7XG59O1xuXG5jb25zdCBBdXRoQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QXV0aENvbnRleHRWYWx1ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuY29uc3QgVE9LRU5fS0VZID0gXCJiYWxsaXN0aWNfYXV0aF90b2tlblwiO1xuY29uc3QgVVNFUl9LRVkgPSBcImJhbGxpc3RpY19hdXRoX3VzZXJcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIEF1dGhQcm92aWRlcih7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9KSB7XG4gIGNvbnN0IFt1c2VyLCBzZXRVc2VyXSA9IHVzZVN0YXRlPEF1dGhVc2VyPihudWxsKTtcbiAgY29uc3QgW3Rva2VuLCBzZXRUb2tlbl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7IC8vIHN0YXJ0IHRydWUgd2hpbGUgd2UgaHlkcmF0ZSArIHJldXNlIGZvciBjYWxsc1xuXG4gIC8vIGh5ZHJhdGUgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblxuICAgICAgY29uc3Qgc3RvcmVkVG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVE9LRU5fS0VZKTtcbiAgICAgIGNvbnN0IHN0b3JlZFVzZXIgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oVVNFUl9LRVkpO1xuXG4gICAgICBpZiAoc3RvcmVkVG9rZW4gJiYgc3RvcmVkVXNlcikge1xuICAgICAgICBzZXRUb2tlbihzdG9yZWRUb2tlbik7XG4gICAgICAgIHNldFVzZXIoSlNPTi5wYXJzZShzdG9yZWRVc2VyKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3Qgc2V0U2Vzc2lvbiA9IHVzZUNhbGxiYWNrKChuZXdUb2tlbjogc3RyaW5nLCBuZXdVc2VyOiBBdXRoVXNlcikgPT4ge1xuICAgIHNldFRva2VuKG5ld1Rva2VuKTtcbiAgICBzZXRVc2VyKG5ld1VzZXIpO1xuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShUT0tFTl9LRVksIG5ld1Rva2VuKTtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShVU0VSX0tFWSwgSlNPTi5zdHJpbmdpZnkobmV3VXNlcikpO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGNvbnN0IGNsZWFyU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUb2tlbihudWxsKTtcbiAgICBzZXRVc2VyKG51bGwpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oVE9LRU5fS0VZKTtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShVU0VSX0tFWSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3QgcmVnaXN0ZXIgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFyYW1zOiB7IGVtYWlsOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmc7IGRpc3BsYXlOYW1lPzogc3RyaW5nIH0pID0+IHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtBUElfQkFTRV9VUkx9L2FwaS9hdXRoL3JlZ2lzdGVyYCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBlbWFpbDogcGFyYW1zLmVtYWlsLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzd29yZCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBwYXJhbXMuZGlzcGxheU5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRleHQgfHwgXCJGYWlsZWQgdG8gY3JlYXRlIGFjY291bnRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhOiB7XG4gICAgICAgICAgdG9rZW46IHN0cmluZztcbiAgICAgICAgICBlbWFpbDogc3RyaW5nO1xuICAgICAgICAgIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICAgICAgICAgIHJvbGU6IHN0cmluZztcbiAgICAgICAgfSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICAgICAgc2V0U2Vzc2lvbihkYXRhLnRva2VuLCB7XG4gICAgICAgICAgZW1haWw6IGRhdGEuZW1haWwsXG4gICAgICAgICAgZGlzcGxheU5hbWU6IGRhdGEuZGlzcGxheU5hbWUgPz8gbnVsbCxcbiAgICAgICAgICByb2xlOiBkYXRhLnJvbGUsXG4gICAgICAgIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbc2V0U2Vzc2lvbl0sXG4gICk7XG5cbiAgY29uc3QgbG9naW4gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFyYW1zOiB7IGVtYWlsOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke0FQSV9CQVNFX1VSTH0vYXBpL2F1dGgvbG9naW5gLCB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGVtYWlsOiBwYXJhbXMuZW1haWwsXG4gICAgICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3N3b3JkLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0ZXh0IHx8IFwiRmFpbGVkIHRvIGxvZyBpblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGE6IHtcbiAgICAgICAgICB0b2tlbjogc3RyaW5nO1xuICAgICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgcm9sZTogc3RyaW5nO1xuICAgICAgICB9ID0gYXdhaXQgcmVzLmpzb24oKTtcblxuICAgICAgICBzZXRTZXNzaW9uKGRhdGEudG9rZW4sIHtcbiAgICAgICAgICBlbWFpbDogZGF0YS5lbWFpbCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogZGF0YS5kaXNwbGF5TmFtZSA/PyBudWxsLFxuICAgICAgICAgIHJvbGU6IGRhdGEucm9sZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZXRTZXNzaW9uXSxcbiAgKTtcblxuICBjb25zdCBsb2dvdXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2xlYXJTZXNzaW9uKCk7XG4gIH0sIFtjbGVhclNlc3Npb25dKTtcblxuICBjb25zdCBnZXRBdXRoSGVhZGVycyA9IHVzZUNhbGxiYWNrKCgpOiBIZWFkZXJzSW5pdCA9PiB7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuIHt9O1xuICAgIHJldHVybiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICB9O1xuICB9LCBbdG9rZW5dKTtcblxuICBjb25zdCB2YWx1ZTogQXV0aENvbnRleHRWYWx1ZSA9IHtcbiAgICB1c2VyLFxuICAgIHRva2VuLFxuICAgIGxvYWRpbmcsXG4gICAgbG9naW4sXG4gICAgcmVnaXN0ZXIsXG4gICAgbG9nb3V0LFxuICAgIGdldEF1dGhIZWFkZXJzLFxuICB9O1xuXG4gIHJldHVybiA8QXV0aENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9BdXRoQ29udGV4dC5Qcm92aWRlcj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRoKCk6IEF1dGhDb250ZXh0VmFsdWUge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KEF1dGhDb250ZXh0KTtcbiAgaWYgKCFjdHgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VBdXRoIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gQXV0aFByb3ZpZGVyXCIpO1xuICB9XG4gIHJldHVybiBjdHg7XG59Il0sIm5hbWVzIjpbImNyZWF0ZUNvbnRleHQiLCJ1c2VDYWxsYmFjayIsInVzZUNvbnRleHQiLCJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsIkFQSV9CQVNFX1VSTCIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfQkFTRV9VUkwiLCJBdXRoQ29udGV4dCIsInVuZGVmaW5lZCIsIlRPS0VOX0tFWSIsIlVTRVJfS0VZIiwiQXV0aFByb3ZpZGVyIiwiY2hpbGRyZW4iLCJ1c2VyIiwic2V0VXNlciIsInRva2VuIiwic2V0VG9rZW4iLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsInN0b3JlZFRva2VuIiwid2luZG93IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInN0b3JlZFVzZXIiLCJKU09OIiwicGFyc2UiLCJzZXRTZXNzaW9uIiwibmV3VG9rZW4iLCJuZXdVc2VyIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImNsZWFyU2Vzc2lvbiIsInJlbW92ZUl0ZW0iLCJyZWdpc3RlciIsInBhcmFtcyIsInJlcyIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJlbWFpbCIsInBhc3N3b3JkIiwiZGlzcGxheU5hbWUiLCJvayIsInRleHQiLCJFcnJvciIsImRhdGEiLCJqc29uIiwicm9sZSIsImxvZ2luIiwibG9nb3V0IiwiZ2V0QXV0aEhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwidmFsdWUiLCJQcm92aWRlciIsInVzZUF1dGgiLCJjdHgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./context/AuthContext.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 */ });\nconst CATEGORIES = [\n // LOWER\n {\n id: \"lower\",\n name: \"Stripped Lowers\",\n description: \"Serialized lower the foundation of the build.\",\n group: \"lower\"\n },\n {\n id: \"completeLower\",\n name: \"Complete Lowers\",\n description: \"Factory-built lower with stock, buffer system, and controls.\",\n group: \"lower\"\n },\n {\n id: \"lowerParts\",\n name: \"Lower Parts Kits\",\n description: \"Pins, springs, and controls for the lower.\",\n group: \"lower\"\n },\n {\n id: \"trigger\",\n name: \"Trigger / Fire Control\",\n description: \"Single-stage, two-stage, and match triggers.\",\n group: \"lower\"\n },\n {\n id: \"grip\",\n name: \"Pistol Grip\",\n description: \"Grips that shape how the rifle handles.\",\n group: \"lower\"\n },\n {\n id: \"safety\",\n name: \"Safety / Selector\",\n description: \"Ambi selectors and control upgrades.\",\n group: \"lower\"\n },\n {\n id: \"buffer\",\n name: \"Buffer System\",\n description: \"Buffer tube, buffer, spring, and related parts.\",\n group: \"lower\"\n },\n {\n id: \"stock\",\n name: \"Stock / Brace\",\n description: \"Adjustable, fixed, and minimalist stocks.\",\n group: \"lower\"\n },\n // UPPER\n {\n id: \"upper\",\n name: \"Stripped Uppers\",\n description: \"The core of the top half of your build.\",\n group: \"upper\"\n },\n {\n id: \"completeUpper\",\n name: \"Complete Uppers\",\n description: \"Pre-assembled uppers ready to pin and shoot.\",\n group: \"upper\"\n },\n {\n id: \"bcg\",\n name: \"Bolt Carriers\",\n description: \"The heartbeat of the rifles cycling.\",\n group: \"upper\"\n },\n {\n id: \"barrel\",\n name: \"Barrels\",\n description: \"Different lengths, profiles, and calibers.\",\n group: \"upper\"\n },\n {\n id: \"gasBlock\",\n name: \"Gas Blocks\",\n description: \"Standard and adjustable gas blocks.\",\n group: \"upper\"\n },\n {\n id: \"gasTube\",\n name: \"Gas Tubes\",\n description: \"Carbine, mid, rifle, and more.\",\n group: \"upper\"\n },\n {\n id: \"muzzleDevice\",\n name: \"Muzzle Devices\",\n description: \"Brakes, comps, and flash hiders.\",\n group: \"upper\"\n },\n {\n id: \"suppressor\",\n name: \"Suppressors\",\n description: \"Hearing-safe setups and hosts.\",\n group: \"upper\"\n },\n {\n id: \"handguard\",\n name: \"Handguards / Rails\",\n description: \"M-LOK rails and front-end furniture.\",\n group: \"upper\"\n },\n {\n id: \"chargingHandle\",\n name: \"Charging Handles\",\n description: \"Standard and ambi charging handles.\",\n group: \"upper\"\n },\n {\n id: \"sights\",\n name: \"Iron Sights\",\n description: \"Backup and primary irons.\",\n group: \"upper\"\n },\n {\n id: \"optic\",\n name: \"Optics\",\n description: \"LPVOs, red dots, and magnifiers.\",\n group: \"upper\"\n },\n // ACCESSORIES GROUP\n {\n id: \"magazine\",\n name: \"Magazines\",\n group: \"accessories\"\n },\n {\n id: \"weaponLight\",\n name: \"Weapon Lights & Lasers\",\n group: \"accessories\"\n },\n {\n id: \"foregrip\",\n name: \"Vertical / Angled Grips\",\n group: \"accessories\"\n },\n {\n id: \"bipod\",\n name: \"Bipods\",\n group: \"accessories\"\n },\n {\n id: \"sling\",\n name: \"Slings & Mounts\",\n group: \"accessories\"\n },\n {\n id: \"railAccessory\",\n name: \"Rail Sections & Covers\",\n group: \"accessories\"\n },\n {\n id: \"tools\",\n name: \"Tools & Maintenance\",\n group: \"accessories\"\n }\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9kYXRhL2d1bmJ1aWxkZXJQYXJ0cy50cyIsIm1hcHBpbmdzIjoiOzs7O0FBRU8sTUFBTUEsYUFBeUI7SUFDcEMsUUFBUTtJQUNSO1FBQ0VDLElBQUk7UUFDSkMsTUFBTTtRQUNOQyxhQUFhO1FBQ2JDLE9BQU87SUFDVDtJQUNBO1FBQ0VILElBQUk7UUFDSkMsTUFBTTtRQUNOQyxhQUFhO1FBQ2JDLE9BQU87SUFDVDtJQUNBO1FBQ0VILElBQUk7UUFDSkMsTUFBTTtRQUNOQyxhQUFhO1FBQ2JDLE9BQU87SUFDVDtJQUNBO1FBQ0VILElBQUk7UUFDSkMsTUFBTTtRQUNOQyxhQUFhO1FBQ2JDLE9BQU87SUFDVDtJQUNBO1FBQ0VILElBQUk7UUFDSkMsTUFBTTtRQUNOQyxhQUFhO1FBQ2JDLE9BQU87SUFDVDtJQUNBO1FBQ0VILElBQUk7UUFDSkMsTUFBTTtRQUNOQyxhQUFhO1FBQ2JDLE9BQU87SUFDVDtJQUNBO1FBQ0VILElBQUk7UUFDSkMsTUFBTTtRQUNOQyxhQUFhO1FBQ2JDLE9BQU87SUFDVDtJQUNBO1FBQ0VILElBQUk7UUFDSkMsTUFBTTtRQUNOQyxhQUFhO1FBQ2JDLE9BQU87SUFDVDtJQUVBLFFBQVE7SUFDUjtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsYUFBYTtRQUNiQyxPQUFPO0lBQ1Q7SUFDQSxvQkFBb0I7SUFDcEI7UUFDRUgsSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87SUFDVDtJQUNBO1FBQ0VILElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztJQUNUO0lBQ0E7UUFDRUgsSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87SUFDVDtJQUNBO1FBQ0VILElBQUk7UUFDSkMsTUFBTTtRQUNORSxPQUFPO0lBQ1Q7SUFDQTtRQUNFSCxJQUFJO1FBQ0pDLE1BQU07UUFDTkUsT0FBTztJQUNUO0lBQ0E7UUFDRUgsSUFBSTtRQUNKQyxNQUFNO1FBQ05FLE9BQU87SUFDVDtDQUNELENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2RhdGEvZ3VuYnVpbGRlclBhcnRzLnRzPzczYWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYXRlZ29yeSwgUGFydCB9IGZyb20gXCJAL3R5cGVzL2d1bmJ1aWxkZXJcIjtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JJRVM6IENhdGVnb3J5W10gPSBbXG4gIC8vIExPV0VSXG4gIHtcbiAgICBpZDogXCJsb3dlclwiLFxuICAgIG5hbWU6IFwiU3RyaXBwZWQgTG93ZXJzXCIsXG4gICAgZGVzY3JpcHRpb246IFwiU2VyaWFsaXplZCBsb3dlciDigJMgdGhlIGZvdW5kYXRpb24gb2YgdGhlIGJ1aWxkLlwiLFxuICAgIGdyb3VwOiBcImxvd2VyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb21wbGV0ZUxvd2VyXCIsXG4gICAgbmFtZTogXCJDb21wbGV0ZSBMb3dlcnNcIixcbiAgICBkZXNjcmlwdGlvbjogXCJGYWN0b3J5LWJ1aWx0IGxvd2VyIHdpdGggc3RvY2ssIGJ1ZmZlciBzeXN0ZW0sIGFuZCBjb250cm9scy5cIixcbiAgICBncm91cDogXCJsb3dlclwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibG93ZXJQYXJ0c1wiLFxuICAgIG5hbWU6IFwiTG93ZXIgUGFydHMgS2l0c1wiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlBpbnMsIHNwcmluZ3MsIGFuZCBjb250cm9scyBmb3IgdGhlIGxvd2VyLlwiLFxuICAgIGdyb3VwOiBcImxvd2VyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0cmlnZ2VyXCIsXG4gICAgbmFtZTogXCJUcmlnZ2VyIC8gRmlyZSBDb250cm9sXCIsXG4gICAgZGVzY3JpcHRpb246IFwiU2luZ2xlLXN0YWdlLCB0d28tc3RhZ2UsIGFuZCBtYXRjaCB0cmlnZ2Vycy5cIixcbiAgICBncm91cDogXCJsb3dlclwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiZ3JpcFwiLFxuICAgIG5hbWU6IFwiUGlzdG9sIEdyaXBcIixcbiAgICBkZXNjcmlwdGlvbjogXCJHcmlwcyB0aGF0IHNoYXBlIGhvdyB0aGUgcmlmbGUgaGFuZGxlcy5cIixcbiAgICBncm91cDogXCJsb3dlclwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic2FmZXR5XCIsXG4gICAgbmFtZTogXCJTYWZldHkgLyBTZWxlY3RvclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkFtYmkgc2VsZWN0b3JzIGFuZCBjb250cm9sIHVwZ3JhZGVzLlwiLFxuICAgIGdyb3VwOiBcImxvd2VyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJidWZmZXJcIixcbiAgICBuYW1lOiBcIkJ1ZmZlciBTeXN0ZW1cIixcbiAgICBkZXNjcmlwdGlvbjogXCJCdWZmZXIgdHViZSwgYnVmZmVyLCBzcHJpbmcsIGFuZCByZWxhdGVkIHBhcnRzLlwiLFxuICAgIGdyb3VwOiBcImxvd2VyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzdG9ja1wiLFxuICAgIG5hbWU6IFwiU3RvY2sgLyBCcmFjZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkFkanVzdGFibGUsIGZpeGVkLCBhbmQgbWluaW1hbGlzdCBzdG9ja3MuXCIsXG4gICAgZ3JvdXA6IFwibG93ZXJcIixcbiAgfSxcblxuICAvLyBVUFBFUlxuICB7XG4gICAgaWQ6IFwidXBwZXJcIixcbiAgICBuYW1lOiBcIlN0cmlwcGVkIFVwcGVyc1wiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBjb3JlIG9mIHRoZSB0b3AgaGFsZiBvZiB5b3VyIGJ1aWxkLlwiLFxuICAgIGdyb3VwOiBcInVwcGVyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb21wbGV0ZVVwcGVyXCIsXG4gICAgbmFtZTogXCJDb21wbGV0ZSBVcHBlcnNcIixcbiAgICBkZXNjcmlwdGlvbjogXCJQcmUtYXNzZW1ibGVkIHVwcGVycyByZWFkeSB0byBwaW4gYW5kIHNob290LlwiLFxuICAgIGdyb3VwOiBcInVwcGVyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJiY2dcIixcbiAgICBuYW1lOiBcIkJvbHQgQ2FycmllcnNcIixcbiAgICBkZXNjcmlwdGlvbjogXCJUaGUgaGVhcnRiZWF0IG9mIHRoZSByaWZsZeKAmXMgY3ljbGluZy5cIixcbiAgICBncm91cDogXCJ1cHBlclwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYmFycmVsXCIsXG4gICAgbmFtZTogXCJCYXJyZWxzXCIsXG4gICAgZGVzY3JpcHRpb246IFwiRGlmZmVyZW50IGxlbmd0aHMsIHByb2ZpbGVzLCBhbmQgY2FsaWJlcnMuXCIsXG4gICAgZ3JvdXA6IFwidXBwZXJcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcImdhc0Jsb2NrXCIsXG4gICAgbmFtZTogXCJHYXMgQmxvY2tzXCIsXG4gICAgZGVzY3JpcHRpb246IFwiU3RhbmRhcmQgYW5kIGFkanVzdGFibGUgZ2FzIGJsb2Nrcy5cIixcbiAgICBncm91cDogXCJ1cHBlclwiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiZ2FzVHViZVwiLFxuICAgIG5hbWU6IFwiR2FzIFR1YmVzXCIsXG4gICAgZGVzY3JpcHRpb246IFwiQ2FyYmluZSwgbWlkLCByaWZsZSwgYW5kIG1vcmUuXCIsXG4gICAgZ3JvdXA6IFwidXBwZXJcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcIm11enpsZURldmljZVwiLFxuICAgIG5hbWU6IFwiTXV6emxlIERldmljZXNcIixcbiAgICBkZXNjcmlwdGlvbjogXCJCcmFrZXMsIGNvbXBzLCBhbmQgZmxhc2ggaGlkZXJzLlwiLFxuICAgIGdyb3VwOiBcInVwcGVyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzdXBwcmVzc29yXCIsXG4gICAgbmFtZTogXCJTdXBwcmVzc29yc1wiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkhlYXJpbmctc2FmZSBzZXR1cHMgYW5kIGhvc3RzLlwiLFxuICAgIGdyb3VwOiBcInVwcGVyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJoYW5kZ3VhcmRcIixcbiAgICBuYW1lOiBcIkhhbmRndWFyZHMgLyBSYWlsc1wiLFxuICAgIGRlc2NyaXB0aW9uOiBcIk0tTE9LIHJhaWxzIGFuZCBmcm9udC1lbmQgZnVybml0dXJlLlwiLFxuICAgIGdyb3VwOiBcInVwcGVyXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjaGFyZ2luZ0hhbmRsZVwiLFxuICAgIG5hbWU6IFwiQ2hhcmdpbmcgSGFuZGxlc1wiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlN0YW5kYXJkIGFuZCBhbWJpIGNoYXJnaW5nIGhhbmRsZXMuXCIsXG4gICAgZ3JvdXA6IFwidXBwZXJcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcInNpZ2h0c1wiLFxuICAgIG5hbWU6IFwiSXJvbiBTaWdodHNcIixcbiAgICBkZXNjcmlwdGlvbjogXCJCYWNrdXAgYW5kIHByaW1hcnkgaXJvbnMuXCIsXG4gICAgZ3JvdXA6IFwidXBwZXJcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcIm9wdGljXCIsXG4gICAgbmFtZTogXCJPcHRpY3NcIixcbiAgICBkZXNjcmlwdGlvbjogXCJMUFZPcywgcmVkIGRvdHMsIGFuZCBtYWduaWZpZXJzLlwiLFxuICAgIGdyb3VwOiBcInVwcGVyXCIsXG4gIH0sXG4gIC8vIEFDQ0VTU09SSUVTIEdST1VQXG4gIHtcbiAgICBpZDogXCJtYWdhemluZVwiLFxuICAgIG5hbWU6IFwiTWFnYXppbmVzXCIsXG4gICAgZ3JvdXA6IFwiYWNjZXNzb3JpZXNcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcIndlYXBvbkxpZ2h0XCIsXG4gICAgbmFtZTogXCJXZWFwb24gTGlnaHRzICYgTGFzZXJzXCIsXG4gICAgZ3JvdXA6IFwiYWNjZXNzb3JpZXNcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcImZvcmVncmlwXCIsXG4gICAgbmFtZTogXCJWZXJ0aWNhbCAvIEFuZ2xlZCBHcmlwc1wiLFxuICAgIGdyb3VwOiBcImFjY2Vzc29yaWVzXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJiaXBvZFwiLFxuICAgIG5hbWU6IFwiQmlwb2RzXCIsXG4gICAgZ3JvdXA6IFwiYWNjZXNzb3JpZXNcIixcbiAgfSxcbiAge1xuICAgIGlkOiBcInNsaW5nXCIsXG4gICAgbmFtZTogXCJTbGluZ3MgJiBNb3VudHNcIixcbiAgICBncm91cDogXCJhY2Nlc3Nvcmllc1wiLFxuICB9LFxuICB7XG4gICAgaWQ6IFwicmFpbEFjY2Vzc29yeVwiLFxuICAgIG5hbWU6IFwiUmFpbCBTZWN0aW9ucyAmIENvdmVyc1wiLFxuICAgIGdyb3VwOiBcImFjY2Vzc29yaWVzXCIsXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0b29sc1wiLFxuICAgIG5hbWU6IFwiVG9vbHMgJiBNYWludGVuYW5jZVwiLFxuICAgIGdyb3VwOiBcImFjY2Vzc29yaWVzXCIsXG4gIH0sXG5dO1xuIl0sIm5hbWVzIjpbIkNBVEVHT1JJRVMiLCJpZCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImdyb3VwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./data/gunbuilderParts.ts\n");
/***/ }),
/***/ "(ssr)/./data/partRoleMappings.ts":
/*!**********************************!*\
!*** ./data/partRoleMappings.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 */ CATEGORY_TO_PART_ROLES: () => (/* binding */ CATEGORY_TO_PART_ROLES),\n/* harmony export */ PART_ROLE_TO_CATEGORY: () => (/* binding */ PART_ROLE_TO_CATEGORY)\n/* harmony export */ });\n// CategoryId -> partRoles\nconst CATEGORY_TO_PART_ROLES = {\n // CORE / EXISTING\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 lower: [\n \"lower-receiver\"\n ],\n optic: [\n \"optic\"\n ],\n stock: [\n \"stock\"\n ],\n // NEW LOWER PARTS\n trigger: [\n \"trigger\",\n \"trigger-kit\"\n ],\n grip: [\n \"pistol-grip\",\n \"grip\"\n ],\n safety: [\n \"safety\",\n \"safety-selector\"\n ],\n completeLower: [\n \"complete-lower\"\n ],\n // NEW UPPER PARTS\n completeUpper: [\n \"complete-upper\"\n ],\n bcg: [\n \"bcg\",\n \"bolt-carrier-group\"\n ],\n gasBlock: [\n \"gas-block\"\n ],\n gasTube: [\n \"gas-tube\"\n ],\n muzzleDevice: [\n \"muzzle-device\",\n \"compensator\",\n \"brake\"\n ],\n suppressor: [\n \"suppressor\"\n ],\n // ===== ACCESSORIES =====\n // Magazines\n magazine: [\n \"magazine\",\n \"mag\",\n \"magazine-ar15\",\n \"magazine-308\",\n \"drum-magazine\"\n ],\n // Lights / Lasers\n weaponLight: [\n \"weapon-light\",\n \"light\",\n \"weapon-light-laser\",\n \"light-laser-combo\",\n \"laser\"\n ],\n // Foregrips\n foregrip: [\n \"vertical-grip\",\n \"angled-foregrip\",\n \"foregrip\",\n \"handstop\"\n ],\n // Bipods\n bipod: [\n \"bipod\"\n ],\n // Slings & mounts\n sling: [\n \"sling\",\n \"sling-mount\",\n \"sling-swivel\",\n \"qd-sling-mount\"\n ],\n // Rail sections & covers\n railAccessory: [\n \"rail-section\",\n \"picatinny-rail-section\",\n \"m-lok-rail-section\",\n \"keymod-rail-section\",\n \"rail-cover\",\n \"rail-panel\"\n ],\n // Tools & maintenance\n tools: [\n \"tool\",\n \"armorer-tool\",\n \"armorer-wrench\",\n \"cleaning-kit\",\n \"bore-snake\",\n \"vise-block\",\n \"torque-wrench\"\n ]\n};\n// Invert to get partRole -> CategoryId\nconst PART_ROLE_TO_CATEGORY = Object.entries(CATEGORY_TO_PART_ROLES).reduce((acc, [categoryId, roles])=>{\n for (const role of roles){\n acc[role] = categoryId;\n }\n return acc;\n}, {});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9kYXRhL3BhcnRSb2xlTWFwcGluZ3MudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSwwQkFBMEI7QUFDbkIsTUFBTUEseUJBQXVEO0lBQ2xFLGtCQUFrQjtJQUNsQkMsT0FBTztRQUFDO0tBQWlCO0lBQ3pCQyxRQUFRO1FBQUM7S0FBUztJQUNsQkMsV0FBVztRQUFDO0tBQVk7SUFDeEJDLGdCQUFnQjtRQUFDO0tBQWtCO0lBQ25DQyxRQUFRO1FBQUM7S0FBYTtJQUN0QkMsWUFBWTtRQUFDO0tBQWtCO0lBQy9CQyxRQUFRO1FBQUM7S0FBUTtJQUNqQkMsT0FBTztRQUFDO0tBQWlCO0lBQ3pCQyxPQUFPO1FBQUM7S0FBUTtJQUNoQkMsT0FBTztRQUFDO0tBQVE7SUFFaEIsa0JBQWtCO0lBQ2xCQyxTQUFTO1FBQUM7UUFBVztLQUFjO0lBQ25DQyxNQUFNO1FBQUM7UUFBZTtLQUFPO0lBQzdCQyxRQUFRO1FBQUM7UUFBVTtLQUFrQjtJQUNyQ0MsZUFBZTtRQUFDO0tBQWlCO0lBRWpDLGtCQUFrQjtJQUNsQkMsZUFBZTtRQUFDO0tBQWlCO0lBQ2pDQyxLQUFLO1FBQUM7UUFBTztLQUFxQjtJQUNsQ0MsVUFBVTtRQUFDO0tBQVk7SUFDdkJDLFNBQVM7UUFBQztLQUFXO0lBQ3JCQyxjQUFjO1FBQUM7UUFBaUI7UUFBZTtLQUFRO0lBQ3ZEQyxZQUFZO1FBQUM7S0FBYTtJQUUxQiwwQkFBMEI7SUFFMUIsWUFBWTtJQUNaQyxVQUFVO1FBQ1I7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNEO0lBRUQsa0JBQWtCO0lBQ2xCQyxhQUFhO1FBQ1g7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNEO0lBRUQsWUFBWTtJQUNaQyxVQUFVO1FBQ1I7UUFDQTtRQUNBO1FBQ0E7S0FDRDtJQUVELFNBQVM7SUFDVEMsT0FBTztRQUNMO0tBQ0Q7SUFFRCxrQkFBa0I7SUFDbEJDLE9BQU87UUFDTDtRQUNBO1FBQ0E7UUFDQTtLQUNEO0lBRUQseUJBQXlCO0lBQ3pCQyxlQUFlO1FBQ2I7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO0tBQ0Q7SUFFRCxzQkFBc0I7SUFDdEJDLE9BQU87UUFDTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNEO0FBQ0gsRUFBRTtBQUVGLHVDQUF1QztBQUNoQyxNQUFNQyx3QkFBb0RDLE9BQU9DLE9BQU8sQ0FDN0U5Qix3QkFDQStCLE1BQU0sQ0FBQyxDQUFDQyxLQUFLLENBQUNDLFlBQVlDLE1BQU07SUFDaEMsS0FBSyxNQUFNQyxRQUFRRCxNQUFPO1FBQ3hCRixHQUFHLENBQUNHLEtBQUssR0FBR0Y7SUFDZDtJQUNBLE9BQU9EO0FBQ1QsR0FBRyxDQUFDLEdBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3VuYnVpbGRlci1wcm90b3R5cGUvLi9kYXRhL3BhcnRSb2xlTWFwcGluZ3MudHM/YzYyNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhdGVnb3J5SWQgfSBmcm9tIFwiQC90eXBlcy9ndW5idWlsZGVyXCI7XG5cbi8vIENhdGVnb3J5SWQgLT4gcGFydFJvbGVzXG5leHBvcnQgY29uc3QgQ0FURUdPUllfVE9fUEFSVF9ST0xFUzogUmVjb3JkPENhdGVnb3J5SWQsIHN0cmluZ1tdPiA9IHtcbiAgLy8gQ09SRSAvIEVYSVNUSU5HXG4gIHVwcGVyOiBbXCJ1cHBlci1yZWNlaXZlclwiXSxcbiAgYmFycmVsOiBbXCJiYXJyZWxcIl0sXG4gIGhhbmRndWFyZDogW1wiaGFuZGd1YXJkXCJdLFxuICBjaGFyZ2luZ0hhbmRsZTogW1wiY2hhcmdpbmctaGFuZGxlXCJdLFxuICBidWZmZXI6IFtcImJ1ZmZlci1raXRcIl0sXG4gIGxvd2VyUGFydHM6IFtcImxvd2VyLXBhcnRzLWtpdFwiXSxcbiAgc2lnaHRzOiBbXCJzaWdodFwiXSxcbiAgbG93ZXI6IFtcImxvd2VyLXJlY2VpdmVyXCJdLFxuICBvcHRpYzogW1wib3B0aWNcIl0sXG4gIHN0b2NrOiBbXCJzdG9ja1wiXSxcblxuICAvLyBORVcgTE9XRVIgUEFSVFNcbiAgdHJpZ2dlcjogW1widHJpZ2dlclwiLCBcInRyaWdnZXIta2l0XCJdLFxuICBncmlwOiBbXCJwaXN0b2wtZ3JpcFwiLCBcImdyaXBcIl0sXG4gIHNhZmV0eTogW1wic2FmZXR5XCIsIFwic2FmZXR5LXNlbGVjdG9yXCJdLFxuICBjb21wbGV0ZUxvd2VyOiBbXCJjb21wbGV0ZS1sb3dlclwiXSxcblxuICAvLyBORVcgVVBQRVIgUEFSVFNcbiAgY29tcGxldGVVcHBlcjogW1wiY29tcGxldGUtdXBwZXJcIl0sXG4gIGJjZzogW1wiYmNnXCIsIFwiYm9sdC1jYXJyaWVyLWdyb3VwXCJdLFxuICBnYXNCbG9jazogW1wiZ2FzLWJsb2NrXCJdLFxuICBnYXNUdWJlOiBbXCJnYXMtdHViZVwiXSxcbiAgbXV6emxlRGV2aWNlOiBbXCJtdXp6bGUtZGV2aWNlXCIsIFwiY29tcGVuc2F0b3JcIiwgXCJicmFrZVwiXSxcbiAgc3VwcHJlc3NvcjogW1wic3VwcHJlc3NvclwiXSxcblxuICAvLyA9PT09PSBBQ0NFU1NPUklFUyA9PT09PVxuXG4gIC8vIE1hZ2F6aW5lc1xuICBtYWdhemluZTogW1xuICAgIFwibWFnYXppbmVcIixcbiAgICBcIm1hZ1wiLFxuICAgIFwibWFnYXppbmUtYXIxNVwiLFxuICAgIFwibWFnYXppbmUtMzA4XCIsXG4gICAgXCJkcnVtLW1hZ2F6aW5lXCIsXG4gIF0sXG5cbiAgLy8gTGlnaHRzIC8gTGFzZXJzXG4gIHdlYXBvbkxpZ2h0OiBbXG4gICAgXCJ3ZWFwb24tbGlnaHRcIixcbiAgICBcImxpZ2h0XCIsXG4gICAgXCJ3ZWFwb24tbGlnaHQtbGFzZXJcIixcbiAgICBcImxpZ2h0LWxhc2VyLWNvbWJvXCIsXG4gICAgXCJsYXNlclwiLFxuICBdLFxuXG4gIC8vIEZvcmVncmlwc1xuICBmb3JlZ3JpcDogW1xuICAgIFwidmVydGljYWwtZ3JpcFwiLFxuICAgIFwiYW5nbGVkLWZvcmVncmlwXCIsXG4gICAgXCJmb3JlZ3JpcFwiLFxuICAgIFwiaGFuZHN0b3BcIixcbiAgXSxcblxuICAvLyBCaXBvZHNcbiAgYmlwb2Q6IFtcbiAgICBcImJpcG9kXCIsXG4gIF0sXG5cbiAgLy8gU2xpbmdzICYgbW91bnRzXG4gIHNsaW5nOiBbXG4gICAgXCJzbGluZ1wiLFxuICAgIFwic2xpbmctbW91bnRcIixcbiAgICBcInNsaW5nLXN3aXZlbFwiLFxuICAgIFwicWQtc2xpbmctbW91bnRcIixcbiAgXSxcblxuICAvLyBSYWlsIHNlY3Rpb25zICYgY292ZXJzXG4gIHJhaWxBY2Nlc3Nvcnk6IFtcbiAgICBcInJhaWwtc2VjdGlvblwiLFxuICAgIFwicGljYXRpbm55LXJhaWwtc2VjdGlvblwiLFxuICAgIFwibS1sb2stcmFpbC1zZWN0aW9uXCIsXG4gICAgXCJrZXltb2QtcmFpbC1zZWN0aW9uXCIsXG4gICAgXCJyYWlsLWNvdmVyXCIsXG4gICAgXCJyYWlsLXBhbmVsXCIsXG4gIF0sXG5cbiAgLy8gVG9vbHMgJiBtYWludGVuYW5jZVxuICB0b29sczogW1xuICAgIFwidG9vbFwiLFxuICAgIFwiYXJtb3Jlci10b29sXCIsXG4gICAgXCJhcm1vcmVyLXdyZW5jaFwiLFxuICAgIFwiY2xlYW5pbmcta2l0XCIsXG4gICAgXCJib3JlLXNuYWtlXCIsXG4gICAgXCJ2aXNlLWJsb2NrXCIsXG4gICAgXCJ0b3JxdWUtd3JlbmNoXCIsXG4gIF0sXG59O1xuXG4vLyBJbnZlcnQgdG8gZ2V0IHBhcnRSb2xlIC0+IENhdGVnb3J5SWRcbmV4cG9ydCBjb25zdCBQQVJUX1JPTEVfVE9fQ0FURUdPUlk6IFJlY29yZDxzdHJpbmcsIENhdGVnb3J5SWQ+ID0gT2JqZWN0LmVudHJpZXMoXG4gIENBVEVHT1JZX1RPX1BBUlRfUk9MRVMsXG4pLnJlZHVjZSgoYWNjLCBbY2F0ZWdvcnlJZCwgcm9sZXNdKSA9PiB7XG4gIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgIGFjY1tyb2xlXSA9IGNhdGVnb3J5SWQgYXMgQ2F0ZWdvcnlJZDtcbiAgfVxuICByZXR1cm4gYWNjO1xufSwge30gYXMgUmVjb3JkPHN0cmluZywgQ2F0ZWdvcnlJZD4pOyJdLCJuYW1lcyI6WyJDQVRFR09SWV9UT19QQVJUX1JPTEVTIiwidXBwZXIiLCJiYXJyZWwiLCJoYW5kZ3VhcmQiLCJjaGFyZ2luZ0hhbmRsZSIsImJ1ZmZlciIsImxvd2VyUGFydHMiLCJzaWdodHMiLCJsb3dlciIsIm9wdGljIiwic3RvY2siLCJ0cmlnZ2VyIiwiZ3JpcCIsInNhZmV0eSIsImNvbXBsZXRlTG93ZXIiLCJjb21wbGV0ZVVwcGVyIiwiYmNnIiwiZ2FzQmxvY2siLCJnYXNUdWJlIiwibXV6emxlRGV2aWNlIiwic3VwcHJlc3NvciIsIm1hZ2F6aW5lIiwid2VhcG9uTGlnaHQiLCJmb3JlZ3JpcCIsImJpcG9kIiwic2xpbmciLCJyYWlsQWNjZXNzb3J5IiwidG9vbHMiLCJQQVJUX1JPTEVfVE9fQ0FURUdPUlkiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiYWNjIiwiY2F0ZWdvcnlJZCIsInJvbGVzIiwicm9sZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./data/partRoleMappings.ts\n");
/***/ }),
/***/ "(ssr)/./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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9hcHAvZ2xvYmFscy5jc3MiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlFQUFlLGNBQWM7QUFDN0IsSUFBSSxLQUFVLEVBQUUsRUFBdUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ndW5idWlsZGVyLXByb3RvdHlwZS8uL2FwcC9nbG9iYWxzLmNzcz80ZDQxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiOGUzYjk3OGY2MDgwXCJcbmlmIChtb2R1bGUuaG90KSB7IG1vZHVsZS5ob3QuYWNjZXB0KCkgfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./app/globals.css\n");
/***/ }),
/***/ "(rsc)/./app/gunbuilder/page.tsx":
/*!*********************************!*\
!*** ./app/gunbuilder/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/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/page.tsx#default`));
/***/ }),
/***/ "(rsc)/./app/layout.tsx":
/*!************************!*\
!*** ./app/layout.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/layout.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/layout.tsx#default`));
/***/ })
};
;
// 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%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!")));
module.exports = __webpack_exports__;
})();