diff --git a/frontend/.next/cache/webpack/client-development/7.pack.gz b/frontend/.next/cache/webpack/client-development/7.pack.gz index b054bd4..d9d6a47 100644 Binary files a/frontend/.next/cache/webpack/client-development/7.pack.gz and b/frontend/.next/cache/webpack/client-development/7.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/9.pack.gz b/frontend/.next/cache/webpack/client-development/9.pack.gz new file mode 100644 index 0000000..d73a275 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/9.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/index.pack.gz b/frontend/.next/cache/webpack/client-development/index.pack.gz index dc35c51..8eb9d59 100644 Binary files a/frontend/.next/cache/webpack/client-development/index.pack.gz and b/frontend/.next/cache/webpack/client-development/index.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/index.pack.gz.old b/frontend/.next/cache/webpack/client-development/index.pack.gz.old index 9943bd4..dc35c51 100644 Binary files a/frontend/.next/cache/webpack/client-development/index.pack.gz.old and b/frontend/.next/cache/webpack/client-development/index.pack.gz.old differ diff --git a/frontend/.next/cache/webpack/server-development/13.pack.gz b/frontend/.next/cache/webpack/server-development/13.pack.gz index f348e3c..27a6cfe 100644 Binary files a/frontend/.next/cache/webpack/server-development/13.pack.gz and b/frontend/.next/cache/webpack/server-development/13.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/14.pack.gz b/frontend/.next/cache/webpack/server-development/14.pack.gz new file mode 100644 index 0000000..2a91770 Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/14.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/15.pack.gz b/frontend/.next/cache/webpack/server-development/15.pack.gz new file mode 100644 index 0000000..839e395 Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/15.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/6.pack.gz b/frontend/.next/cache/webpack/server-development/6.pack.gz index d6c4c18..c0f77be 100644 Binary files a/frontend/.next/cache/webpack/server-development/6.pack.gz and b/frontend/.next/cache/webpack/server-development/6.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/index.pack.gz b/frontend/.next/cache/webpack/server-development/index.pack.gz index 87cfab8..7455144 100644 Binary files a/frontend/.next/cache/webpack/server-development/index.pack.gz and b/frontend/.next/cache/webpack/server-development/index.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/index.pack.gz.old b/frontend/.next/cache/webpack/server-development/index.pack.gz.old index c83342c..87cfab8 100644 Binary files a/frontend/.next/cache/webpack/server-development/index.pack.gz.old and b/frontend/.next/cache/webpack/server-development/index.pack.gz.old differ diff --git a/frontend/.next/server/app-paths-manifest.json b/frontend/.next/server/app-paths-manifest.json index 774e6aa..0fe2192 100644 --- a/frontend/.next/server/app-paths-manifest.json +++ b/frontend/.next/server/app-paths-manifest.json @@ -1,7 +1,7 @@ { "/login/page": "app/login/page.js", - "/generate/page": "app/generate/page.js", + "/learn/page": "app/learn/page.js", "/dashboard/page": "app/dashboard/page.js", - "/register/page": "app/register/page.js", + "/generate/page": "app/generate/page.js", "/flashcards/page": "app/flashcards/page.js" } \ No newline at end of file diff --git a/frontend/.next/server/app/dashboard/page.js b/frontend/.next/server/app/dashboard/page.js index 79a31b7..3bf75d6 100644 --- a/frontend/.next/server/app/dashboard/page.js +++ b/frontend/.next/server/app/dashboard/page.js @@ -115,7 +115,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__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 */ Navigation: () => (/* binding */ Navigation)\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/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/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\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 _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(ssr)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \n\n\n\nfunction Navigation() {\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n },\n {\n href: '/generate',\n label: 'AI 生成'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: `font-medium transition-colors ${pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'}`,\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 28,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 22,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 46,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 45,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: user?.username?.[0]?.toUpperCase() || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 53,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: user?.displayName || user?.username\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 56,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 57,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 52,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 43,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 21,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 20,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 19,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL05hdmlnYXRpb24udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRTRCO0FBQ2lCO0FBQ0c7QUFFekMsU0FBU0c7SUFDZCxNQUFNLEVBQUVDLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdILDhEQUFPQTtJQUNoQyxNQUFNSSxXQUFXTCw0REFBV0E7SUFFNUIsTUFBTU0sV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO1FBQzlCO1lBQUVELE1BQU07WUFBYUMsT0FBTztRQUFRO0tBQ3JDO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDWCxrREFBSUE7Z0NBQUNRLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDZCxrREFBSUE7d0NBRUhRLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsQ0FBQyw4QkFBOEIsRUFDeENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0EscUNBQ0o7a0RBRURNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTs7MENBRWIsOERBQUNJO2dDQUFPSixXQUFVOzBDQUNoQiw0RUFBQ0s7b0NBQUlMLFdBQVU7b0NBQVVNLE1BQUs7b0NBQU9DLFFBQU87b0NBQWVDLFNBQVE7OENBQ2pFLDRFQUFDQzt3Q0FBS0MsZUFBYzt3Q0FBUUMsZ0JBQWU7d0NBQVFDLGFBQWE7d0NBQUdDLEdBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7MENBS3pFLDhEQUFDWjtnQ0FBSUQsV0FBVTs7a0RBQ2IsOERBQUNDO3dDQUFJRCxXQUFVO2tEQUNaUCxNQUFNcUIsVUFBVSxDQUFDLEVBQUUsRUFBRUMsaUJBQWlCOzs7Ozs7a0RBRXpDLDhEQUFDQzt3Q0FBS2hCLFdBQVU7a0RBQXVCUCxNQUFNd0IsZUFBZXhCLE1BQU1xQjs7Ozs7O2tEQUNsRSw4REFBQ1Y7d0NBQ0NjLFNBQVN4Qjt3Q0FDVE0sV0FBVTtrREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmIiwic291cmNlcyI6WyIvVXNlcnMvamV0dGNoZW5nMTAxOC9jb2RlL2RyYW1hbGluZy12b2NhYi1sZWFybmluZy9mcm9udGVuZC9jb21wb25lbnRzL05hdmlnYXRpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xyXG5cclxuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJ1xyXG5pbXBvcnQgeyB1c2VQYXRobmFtZSB9IGZyb20gJ25leHQvbmF2aWdhdGlvbidcclxuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJ0AvY29udGV4dHMvQXV0aENvbnRleHQnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTmF2aWdhdGlvbigpIHtcclxuICBjb25zdCB7IHVzZXIsIGxvZ291dCB9ID0gdXNlQXV0aCgpXHJcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VQYXRobmFtZSgpXHJcblxyXG4gIGNvbnN0IG5hdkl0ZW1zID0gW1xyXG4gICAgeyBocmVmOiAnL2Rhc2hib2FyZCcsIGxhYmVsOiAn5YSA6KGo5p2/JyB9LFxyXG4gICAgeyBocmVmOiAnL2ZsYXNoY2FyZHMnLCBsYWJlbDogJ+ipnuWNoScgfSxcclxuICAgIHsgaHJlZjogJy9sZWFybicsIGxhYmVsOiAn5a2457+SJyB9LFxyXG4gICAgeyBocmVmOiAnL2dlbmVyYXRlJywgbGFiZWw6ICdBSSDnlJ/miJAnIH0sXHJcbiAgXVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPG5hdiBjbGFzc05hbWU9XCJiZy13aGl0ZSBzaGFkb3ctc20gYm9yZGVyLWJcIj5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy03eGwgbXgtYXV0byBweC00IHNtOnB4LTYgbGc6cHgtOFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaC0xNlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LThcIj5cclxuICAgICAgICAgICAgPExpbmsgaHJlZj1cIi9kYXNoYm9hcmRcIiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgRHJhbWFMaW5nXHJcbiAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleCBzcGFjZS14LTZcIj5cclxuICAgICAgICAgICAgICB7bmF2SXRlbXMubWFwKChpdGVtKSA9PiAoXHJcbiAgICAgICAgICAgICAgICA8TGlua1xyXG4gICAgICAgICAgICAgICAgICBrZXk9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgaHJlZj17aXRlbS5ocmVmfVxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyAke1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lID09PSBpdGVtLmhyZWZcclxuICAgICAgICAgICAgICAgICAgICAgID8gJ3RleHQtcHJpbWFyeSdcclxuICAgICAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcclxuICAgICAgICAgICAgICAgICAgfWB9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHtpdGVtLmxhYmVsfVxyXG4gICAgICAgICAgICAgICAgPC9MaW5rPlxyXG4gICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC00XCI+XHJcbiAgICAgICAgICAgIHsvKiDpgJrnn6XmjInpiJUgKi99XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwicC0yIHRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDE3aDVsLTEuNDA1LTEuNDA1QTIuMDMyIDIuMDMyIDAgMDExOCAxNC4xNThWMTFhNi4wMDIgNi4wMDIgMCAwMC00LTUuNjU5VjVhMiAyIDAgMTAtNCAwdi4zNDFDNy42NyA2LjE2NSA2IDguMzg4IDYgMTF2My4xNTljMCAuNTM4LS4yMTQgMS4wNTUtLjU5NSAxLjQzNkw0IDE3aDVtNiAwdjFhMyAzIDAgMTEtNiAwdi0xbTYgMEg5XCIgLz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICB7Lyog55So5oi26LOH6KiKICovfVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCBiZy1wcmltYXJ5IHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtc2VtaWJvbGRcIj5cclxuICAgICAgICAgICAgICAgIHt1c2VyPy51c2VybmFtZT8uWzBdPy50b1VwcGVyQ2FzZSgpIHx8ICdVJ31cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+e3VzZXI/LmRpc3BsYXlOYW1lIHx8IHVzZXI/LnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtsb2dvdXR9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtbC00IHRleHQtc20gdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICDnmbvlh7pcclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25hdj5cclxuICApXHJcbn0iXSwibmFtZXMiOlsiTGluayIsInVzZVBhdGhuYW1lIiwidXNlQXV0aCIsIk5hdmlnYXRpb24iLCJ1c2VyIiwibG9nb3V0IiwicGF0aG5hbWUiLCJuYXZJdGVtcyIsImhyZWYiLCJsYWJlbCIsIm5hdiIsImNsYXNzTmFtZSIsImRpdiIsIm1hcCIsIml0ZW0iLCJidXR0b24iLCJzdmciLCJmaWxsIiwic3Ryb2tlIiwidmlld0JveCIsInBhdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsImQiLCJ1c2VybmFtZSIsInRvVXBwZXJDYXNlIiwic3BhbiIsImRpc3BsYXlOYW1lIiwib25DbGljayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/Navigation.tsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\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/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/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\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 _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(ssr)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \n\n\n\nfunction Navigation({ showExitLearning = false, onExitLearning } = {}) {\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: `font-medium transition-colors ${pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'}`,\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: showExitLearning ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onExitLearning,\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 59,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: user?.username?.[0]?.toUpperCase() || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: user?.displayName || user?.username\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 70,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 71,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL05hdmlnYXRpb24udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRTRCO0FBQ2lCO0FBQ0c7QUFPekMsU0FBU0csV0FBVyxFQUFFQyxtQkFBbUIsS0FBSyxFQUFFQyxjQUFjLEVBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQzNGLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEVBQUUsR0FBR0wsOERBQU9BO0lBQ2hDLE1BQU1NLFdBQVdQLDREQUFXQTtJQUU1QixNQUFNUSxXQUFXO1FBQ2Y7WUFBRUMsTUFBTTtZQUFjQyxPQUFPO1FBQU07UUFDbkM7WUFBRUQsTUFBTTtZQUFlQyxPQUFPO1FBQUs7UUFDbkM7WUFBRUQsTUFBTTtZQUFVQyxPQUFPO1FBQUs7S0FDL0I7SUFFRCxxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVTtrQkFDYiw0RUFBQ0M7WUFBSUQsV0FBVTtzQkFDYiw0RUFBQ0M7Z0JBQUlELFdBQVU7O2tDQUNiLDhEQUFDQzt3QkFBSUQsV0FBVTs7MENBQ2IsOERBQUNiLGtEQUFJQTtnQ0FBQ1UsTUFBSztnQ0FBYUcsV0FBVTswQ0FBa0M7Ozs7OzswQ0FHcEUsOERBQUNDO2dDQUFJRCxXQUFVOzBDQUNaSixTQUFTTSxHQUFHLENBQUMsQ0FBQ0MscUJBQ2IsOERBQUNoQixrREFBSUE7d0NBRUhVLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsQ0FBQyw4QkFBOEIsRUFDeENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0EscUNBQ0o7a0RBRURNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTtrQ0FFWlQsaUNBQ0MsOERBQUNhOzRCQUNDQyxTQUFTYjs0QkFDVFEsV0FBVTtzQ0FDWDs7Ozs7aURBSUQ7OzhDQUVFLDhEQUFDSTtvQ0FBT0osV0FBVTs4Q0FDaEIsNEVBQUNNO3dDQUFJTixXQUFVO3dDQUFVTyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzhDQUt6RSw4REFBQ2I7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTtzREFDWlAsTUFBTXNCLFVBQVUsQ0FBQyxFQUFFLEVBQUVDLGlCQUFpQjs7Ozs7O3NEQUV6Qyw4REFBQ0M7NENBQUtqQixXQUFVO3NEQUF1QlAsTUFBTXlCLGVBQWV6QixNQUFNc0I7Ozs7OztzREFDbEUsOERBQUNYOzRDQUNDQyxTQUFTWDs0Q0FDVE0sV0FBVTtzREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXbkIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXHJcblxyXG5pbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnXHJcbmltcG9ydCB7IHVzZVBhdGhuYW1lIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xyXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnQC9jb250ZXh0cy9BdXRoQ29udGV4dCdcclxuXHJcbmludGVyZmFjZSBOYXZpZ2F0aW9uUHJvcHMge1xyXG4gIHNob3dFeGl0TGVhcm5pbmc/OiBib29sZWFuXHJcbiAgb25FeGl0TGVhcm5pbmc/OiAoKSA9PiB2b2lkXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBOYXZpZ2F0aW9uKHsgc2hvd0V4aXRMZWFybmluZyA9IGZhbHNlLCBvbkV4aXRMZWFybmluZyB9OiBOYXZpZ2F0aW9uUHJvcHMgPSB7fSkge1xyXG4gIGNvbnN0IHsgdXNlciwgbG9nb3V0IH0gPSB1c2VBdXRoKClcclxuICBjb25zdCBwYXRobmFtZSA9IHVzZVBhdGhuYW1lKClcclxuXHJcbiAgY29uc3QgbmF2SXRlbXMgPSBbXHJcbiAgICB7IGhyZWY6ICcvZGFzaGJvYXJkJywgbGFiZWw6ICflhIDooajmnb8nIH0sXHJcbiAgICB7IGhyZWY6ICcvZmxhc2hjYXJkcycsIGxhYmVsOiAn6Kme5Y2hJyB9LFxyXG4gICAgeyBocmVmOiAnL2xlYXJuJywgbGFiZWw6ICflrbjnv5InIH1cclxuICBdXHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8bmF2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHNoYWRvdy1zbSBib3JkZXItYlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTd4bCBteC1hdXRvIHB4LTQgc206cHgtNiBsZzpweC04XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBoLTE2XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtOFwiPlxyXG4gICAgICAgICAgICA8TGluayBocmVmPVwiL2Rhc2hib2FyZFwiIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICBEcmFtYUxpbmdcclxuICAgICAgICAgICAgPC9MaW5rPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpmbGV4IHNwYWNlLXgtNlwiPlxyXG4gICAgICAgICAgICAgIHtuYXZJdGVtcy5tYXAoKGl0ZW0pID0+IChcclxuICAgICAgICAgICAgICAgIDxMaW5rXHJcbiAgICAgICAgICAgICAgICAgIGtleT17aXRlbS5ocmVmfVxyXG4gICAgICAgICAgICAgICAgICBocmVmPXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzICR7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUgPT09IGl0ZW0uaHJlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgPyAndGV4dC1wcmltYXJ5J1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xyXG4gICAgICAgICAgICAgICAgICB9YH1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge2l0ZW0ubGFiZWx9XHJcbiAgICAgICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTRcIj5cclxuICAgICAgICAgICAgey8qIOWtuOe/kuaooeW8j+eahOe1kOadn+WtuOe/kuaMiemIlSAqL31cclxuICAgICAgICAgICAge3Nob3dFeGl0TGVhcm5pbmcgPyAoXHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17b25FeGl0TGVhcm5pbmd9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIMOXIOe1kOadn+WtuOe/klxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICB7Lyog6YCa55+l5oyJ6YiVICovfVxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJwLTIgdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgey8qIOeUqOaItuizh+ioiiAqL31cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCBiZy1wcmltYXJ5IHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtc2VtaWJvbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7dXNlcj8udXNlcm5hbWU/LlswXT8udG9VcHBlckNhc2UoKSB8fCAnVSd9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+e3VzZXI/LmRpc3BsYXlOYW1lIHx8IHVzZXI/LnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2xvZ291dH1cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtbC00IHRleHQtc20gdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIOeZu+WHulxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uYXY+XHJcbiAgKVxyXG59Il0sIm5hbWVzIjpbIkxpbmsiLCJ1c2VQYXRobmFtZSIsInVzZUF1dGgiLCJOYXZpZ2F0aW9uIiwic2hvd0V4aXRMZWFybmluZyIsIm9uRXhpdExlYXJuaW5nIiwidXNlciIsImxvZ291dCIsInBhdGhuYW1lIiwibmF2SXRlbXMiLCJocmVmIiwibGFiZWwiLCJuYXYiLCJjbGFzc05hbWUiLCJkaXYiLCJtYXAiLCJpdGVtIiwiYnV0dG9uIiwib25DbGljayIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInVzZXJuYW1lIiwidG9VcHBlckNhc2UiLCJzcGFuIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/Navigation.tsx\n"); /***/ }), diff --git a/frontend/.next/server/app/flashcards/page.js b/frontend/.next/server/app/flashcards/page.js index 97d0afd..6d3d370 100644 --- a/frontend/.next/server/app/flashcards/page.js +++ b/frontend/.next/server/app/flashcards/page.js @@ -126,7 +126,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__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 */ Navigation: () => (/* binding */ Navigation)\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/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/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\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 _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(ssr)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \n\n\n\nfunction Navigation() {\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n },\n {\n href: '/generate',\n label: 'AI 生成'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: `font-medium transition-colors ${pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'}`,\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 28,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 22,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 46,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 45,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: user?.username?.[0]?.toUpperCase() || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 53,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: user?.displayName || user?.username\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 56,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 57,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 52,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 43,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 21,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 20,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 19,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL05hdmlnYXRpb24udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRTRCO0FBQ2lCO0FBQ0c7QUFFekMsU0FBU0c7SUFDZCxNQUFNLEVBQUVDLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdILDhEQUFPQTtJQUNoQyxNQUFNSSxXQUFXTCw0REFBV0E7SUFFNUIsTUFBTU0sV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO1FBQzlCO1lBQUVELE1BQU07WUFBYUMsT0FBTztRQUFRO0tBQ3JDO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDWCxrREFBSUE7Z0NBQUNRLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDZCxrREFBSUE7d0NBRUhRLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsQ0FBQyw4QkFBOEIsRUFDeENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0EscUNBQ0o7a0RBRURNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTs7MENBRWIsOERBQUNJO2dDQUFPSixXQUFVOzBDQUNoQiw0RUFBQ0s7b0NBQUlMLFdBQVU7b0NBQVVNLE1BQUs7b0NBQU9DLFFBQU87b0NBQWVDLFNBQVE7OENBQ2pFLDRFQUFDQzt3Q0FBS0MsZUFBYzt3Q0FBUUMsZ0JBQWU7d0NBQVFDLGFBQWE7d0NBQUdDLEdBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7MENBS3pFLDhEQUFDWjtnQ0FBSUQsV0FBVTs7a0RBQ2IsOERBQUNDO3dDQUFJRCxXQUFVO2tEQUNaUCxNQUFNcUIsVUFBVSxDQUFDLEVBQUUsRUFBRUMsaUJBQWlCOzs7Ozs7a0RBRXpDLDhEQUFDQzt3Q0FBS2hCLFdBQVU7a0RBQXVCUCxNQUFNd0IsZUFBZXhCLE1BQU1xQjs7Ozs7O2tEQUNsRSw4REFBQ1Y7d0NBQ0NjLFNBQVN4Qjt3Q0FDVE0sV0FBVTtrREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmIiwic291cmNlcyI6WyIvVXNlcnMvamV0dGNoZW5nMTAxOC9jb2RlL2RyYW1hbGluZy12b2NhYi1sZWFybmluZy9mcm9udGVuZC9jb21wb25lbnRzL05hdmlnYXRpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xyXG5cclxuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJ1xyXG5pbXBvcnQgeyB1c2VQYXRobmFtZSB9IGZyb20gJ25leHQvbmF2aWdhdGlvbidcclxuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJ0AvY29udGV4dHMvQXV0aENvbnRleHQnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTmF2aWdhdGlvbigpIHtcclxuICBjb25zdCB7IHVzZXIsIGxvZ291dCB9ID0gdXNlQXV0aCgpXHJcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VQYXRobmFtZSgpXHJcblxyXG4gIGNvbnN0IG5hdkl0ZW1zID0gW1xyXG4gICAgeyBocmVmOiAnL2Rhc2hib2FyZCcsIGxhYmVsOiAn5YSA6KGo5p2/JyB9LFxyXG4gICAgeyBocmVmOiAnL2ZsYXNoY2FyZHMnLCBsYWJlbDogJ+ipnuWNoScgfSxcclxuICAgIHsgaHJlZjogJy9sZWFybicsIGxhYmVsOiAn5a2457+SJyB9LFxyXG4gICAgeyBocmVmOiAnL2dlbmVyYXRlJywgbGFiZWw6ICdBSSDnlJ/miJAnIH0sXHJcbiAgXVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPG5hdiBjbGFzc05hbWU9XCJiZy13aGl0ZSBzaGFkb3ctc20gYm9yZGVyLWJcIj5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy03eGwgbXgtYXV0byBweC00IHNtOnB4LTYgbGc6cHgtOFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaC0xNlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LThcIj5cclxuICAgICAgICAgICAgPExpbmsgaHJlZj1cIi9kYXNoYm9hcmRcIiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgRHJhbWFMaW5nXHJcbiAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleCBzcGFjZS14LTZcIj5cclxuICAgICAgICAgICAgICB7bmF2SXRlbXMubWFwKChpdGVtKSA9PiAoXHJcbiAgICAgICAgICAgICAgICA8TGlua1xyXG4gICAgICAgICAgICAgICAgICBrZXk9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgaHJlZj17aXRlbS5ocmVmfVxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Bmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyAke1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lID09PSBpdGVtLmhyZWZcclxuICAgICAgICAgICAgICAgICAgICAgID8gJ3RleHQtcHJpbWFyeSdcclxuICAgICAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcclxuICAgICAgICAgICAgICAgICAgfWB9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHtpdGVtLmxhYmVsfVxyXG4gICAgICAgICAgICAgICAgPC9MaW5rPlxyXG4gICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC00XCI+XHJcbiAgICAgICAgICAgIHsvKiDpgJrnn6XmjInpiJUgKi99XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwicC0yIHRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDE3aDVsLTEuNDA1LTEuNDA1QTIuMDMyIDIuMDMyIDAgMDExOCAxNC4xNThWMTFhNi4wMDIgNi4wMDIgMCAwMC00LTUuNjU5VjVhMiAyIDAgMTAtNCAwdi4zNDFDNy42NyA2LjE2NSA2IDguMzg4IDYgMTF2My4xNTljMCAuNTM4LS4yMTQgMS4wNTUtLjU5NSAxLjQzNkw0IDE3aDVtNiAwdjFhMyAzIDAgMTEtNiAwdi0xbTYgMEg5XCIgLz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICB7Lyog55So5oi26LOH6KiKICovfVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCBiZy1wcmltYXJ5IHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtc2VtaWJvbGRcIj5cclxuICAgICAgICAgICAgICAgIHt1c2VyPy51c2VybmFtZT8uWzBdPy50b1VwcGVyQ2FzZSgpIHx8ICdVJ31cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+e3VzZXI/LmRpc3BsYXlOYW1lIHx8IHVzZXI/LnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtsb2dvdXR9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtbC00IHRleHQtc20gdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICDnmbvlh7pcclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25hdj5cclxuICApXHJcbn0iXSwibmFtZXMiOlsiTGluayIsInVzZVBhdGhuYW1lIiwidXNlQXV0aCIsIk5hdmlnYXRpb24iLCJ1c2VyIiwibG9nb3V0IiwicGF0aG5hbWUiLCJuYXZJdGVtcyIsImhyZWYiLCJsYWJlbCIsIm5hdiIsImNsYXNzTmFtZSIsImRpdiIsIm1hcCIsIml0ZW0iLCJidXR0b24iLCJzdmciLCJmaWxsIiwic3Ryb2tlIiwidmlld0JveCIsInBhdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsImQiLCJ1c2VybmFtZSIsInRvVXBwZXJDYXNlIiwic3BhbiIsImRpc3BsYXlOYW1lIiwib25DbGljayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/Navigation.tsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\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/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/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\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 _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(ssr)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \n\n\n\nfunction Navigation({ showExitLearning = false, onExitLearning } = {}) {\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: `font-medium transition-colors ${pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'}`,\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: showExitLearning ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onExitLearning,\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 59,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: user?.username?.[0]?.toUpperCase() || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: user?.displayName || user?.username\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 70,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 71,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL05hdmlnYXRpb24udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRTRCO0FBQ2lCO0FBQ0c7QUFPekMsU0FBU0csV0FBVyxFQUFFQyxtQkFBbUIsS0FBSyxFQUFFQyxjQUFjLEVBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQzNGLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEVBQUUsR0FBR0wsOERBQU9BO0lBQ2hDLE1BQU1NLFdBQVdQLDREQUFXQTtJQUU1QixNQUFNUSxXQUFXO1FBQ2Y7WUFBRUMsTUFBTTtZQUFjQyxPQUFPO1FBQU07UUFDbkM7WUFBRUQsTUFBTTtZQUFlQyxPQUFPO1FBQUs7UUFDbkM7WUFBRUQsTUFBTTtZQUFVQyxPQUFPO1FBQUs7S0FDL0I7SUFFRCxxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVTtrQkFDYiw0RUFBQ0M7WUFBSUQsV0FBVTtzQkFDYiw0RUFBQ0M7Z0JBQUlELFdBQVU7O2tDQUNiLDhEQUFDQzt3QkFBSUQsV0FBVTs7MENBQ2IsOERBQUNiLGtEQUFJQTtnQ0FBQ1UsTUFBSztnQ0FBYUcsV0FBVTswQ0FBa0M7Ozs7OzswQ0FHcEUsOERBQUNDO2dDQUFJRCxXQUFVOzBDQUNaSixTQUFTTSxHQUFHLENBQUMsQ0FBQ0MscUJBQ2IsOERBQUNoQixrREFBSUE7d0NBRUhVLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsQ0FBQyw4QkFBOEIsRUFDeENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0EscUNBQ0o7a0RBRURNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTtrQ0FFWlQsaUNBQ0MsOERBQUNhOzRCQUNDQyxTQUFTYjs0QkFDVFEsV0FBVTtzQ0FDWDs7Ozs7aURBSUQ7OzhDQUVFLDhEQUFDSTtvQ0FBT0osV0FBVTs4Q0FDaEIsNEVBQUNNO3dDQUFJTixXQUFVO3dDQUFVTyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzhDQUt6RSw4REFBQ2I7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTtzREFDWlAsTUFBTXNCLFVBQVUsQ0FBQyxFQUFFLEVBQUVDLGlCQUFpQjs7Ozs7O3NEQUV6Qyw4REFBQ0M7NENBQUtqQixXQUFVO3NEQUF1QlAsTUFBTXlCLGVBQWV6QixNQUFNc0I7Ozs7OztzREFDbEUsOERBQUNYOzRDQUNDQyxTQUFTWDs0Q0FDVE0sV0FBVTtzREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXbkIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXHJcblxyXG5pbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnXHJcbmltcG9ydCB7IHVzZVBhdGhuYW1lIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xyXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnQC9jb250ZXh0cy9BdXRoQ29udGV4dCdcclxuXHJcbmludGVyZmFjZSBOYXZpZ2F0aW9uUHJvcHMge1xyXG4gIHNob3dFeGl0TGVhcm5pbmc/OiBib29sZWFuXHJcbiAgb25FeGl0TGVhcm5pbmc/OiAoKSA9PiB2b2lkXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBOYXZpZ2F0aW9uKHsgc2hvd0V4aXRMZWFybmluZyA9IGZhbHNlLCBvbkV4aXRMZWFybmluZyB9OiBOYXZpZ2F0aW9uUHJvcHMgPSB7fSkge1xyXG4gIGNvbnN0IHsgdXNlciwgbG9nb3V0IH0gPSB1c2VBdXRoKClcclxuICBjb25zdCBwYXRobmFtZSA9IHVzZVBhdGhuYW1lKClcclxuXHJcbiAgY29uc3QgbmF2SXRlbXMgPSBbXHJcbiAgICB7IGhyZWY6ICcvZGFzaGJvYXJkJywgbGFiZWw6ICflhIDooajmnb8nIH0sXHJcbiAgICB7IGhyZWY6ICcvZmxhc2hjYXJkcycsIGxhYmVsOiAn6Kme5Y2hJyB9LFxyXG4gICAgeyBocmVmOiAnL2xlYXJuJywgbGFiZWw6ICflrbjnv5InIH1cclxuICBdXHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8bmF2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHNoYWRvdy1zbSBib3JkZXItYlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTd4bCBteC1hdXRvIHB4LTQgc206cHgtNiBsZzpweC04XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBoLTE2XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtOFwiPlxyXG4gICAgICAgICAgICA8TGluayBocmVmPVwiL2Rhc2hib2FyZFwiIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICBEcmFtYUxpbmdcclxuICAgICAgICAgICAgPC9MaW5rPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpmbGV4IHNwYWNlLXgtNlwiPlxyXG4gICAgICAgICAgICAgIHtuYXZJdGVtcy5tYXAoKGl0ZW0pID0+IChcclxuICAgICAgICAgICAgICAgIDxMaW5rXHJcbiAgICAgICAgICAgICAgICAgIGtleT17aXRlbS5ocmVmfVxyXG4gICAgICAgICAgICAgICAgICBocmVmPXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzICR7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUgPT09IGl0ZW0uaHJlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgPyAndGV4dC1wcmltYXJ5J1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xyXG4gICAgICAgICAgICAgICAgICB9YH1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge2l0ZW0ubGFiZWx9XHJcbiAgICAgICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTRcIj5cclxuICAgICAgICAgICAgey8qIOWtuOe/kuaooeW8j+eahOe1kOadn+WtuOe/kuaMiemIlSAqL31cclxuICAgICAgICAgICAge3Nob3dFeGl0TGVhcm5pbmcgPyAoXHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17b25FeGl0TGVhcm5pbmd9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIMOXIOe1kOadn+WtuOe/klxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICB7Lyog6YCa55+l5oyJ6YiVICovfVxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJwLTIgdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgey8qIOeUqOaItuizh+ioiiAqL31cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCBiZy1wcmltYXJ5IHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtc2VtaWJvbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7dXNlcj8udXNlcm5hbWU/LlswXT8udG9VcHBlckNhc2UoKSB8fCAnVSd9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+e3VzZXI/LmRpc3BsYXlOYW1lIHx8IHVzZXI/LnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2xvZ291dH1cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtbC00IHRleHQtc20gdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIOeZu+WHulxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uYXY+XHJcbiAgKVxyXG59Il0sIm5hbWVzIjpbIkxpbmsiLCJ1c2VQYXRobmFtZSIsInVzZUF1dGgiLCJOYXZpZ2F0aW9uIiwic2hvd0V4aXRMZWFybmluZyIsIm9uRXhpdExlYXJuaW5nIiwidXNlciIsImxvZ291dCIsInBhdGhuYW1lIiwibmF2SXRlbXMiLCJocmVmIiwibGFiZWwiLCJuYXYiLCJjbGFzc05hbWUiLCJkaXYiLCJtYXAiLCJpdGVtIiwiYnV0dG9uIiwib25DbGljayIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInVzZXJuYW1lIiwidG9VcHBlckNhc2UiLCJzcGFuIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/Navigation.tsx\n"); /***/ }), diff --git a/frontend/.next/server/app/learn/page.js b/frontend/.next/server/app/learn/page.js index 99cf864..5537f0a 100644 --- a/frontend/.next/server/app/learn/page.js +++ b/frontend/.next/server/app/learn/page.js @@ -104,7 +104,18 @@ eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__w /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LearnPage)\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/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/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/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\nfunction LearnPage() {\n const [currentCardIndex, setCurrentCardIndex] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [isFlipped, setIsFlipped] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('flip');\n const [score, setScore] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n correct: 0,\n total: 0\n });\n const [selectedAnswer, setSelectedAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showResult, setShowResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [fillAnswer, setFillAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [showHint, setShowHint] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [isRecording, setIsRecording] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [audioPlaying, setAudioPlaying] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [modalImage, setModalImage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showReportModal, setShowReportModal] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [reportReason, setReportReason] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [reportingCard, setReportingCard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Mock data with real example images\n const cards = [\n {\n id: 1,\n word: 'brought',\n partOfSpeech: 'verb',\n pronunciation: '/brɔːt/',\n translation: '提出、帶來',\n definition: 'Past tense of bring; to mention or introduce a topic in conversation',\n example: 'He brought this thing up during our meeting and no one agreed.',\n exampleTranslation: '他在我們的會議中提出了這件事,但沒有人同意。',\n exampleImage: '/images/examples/bring_up.png',\n synonyms: [\n 'mentioned',\n 'raised',\n 'introduced'\n ],\n difficulty: 'B1'\n },\n {\n id: 2,\n word: 'instincts',\n partOfSpeech: 'noun',\n pronunciation: '/ˈɪnstɪŋkts/',\n translation: '本能、直覺',\n definition: 'Natural abilities that help living things survive without learning',\n example: 'Animals use their instincts to find food and stay safe.',\n exampleTranslation: '動物利用本能來尋找食物並保持安全。',\n exampleImage: '/images/examples/instinct.png',\n synonyms: [\n 'intuition',\n 'impulse',\n 'tendency'\n ],\n difficulty: 'B2'\n },\n {\n id: 3,\n word: 'warrants',\n partOfSpeech: 'noun',\n pronunciation: '/ˈwɔːrənts/',\n translation: '搜查令、授權令',\n definition: 'Official documents that give police permission to do something',\n example: 'The police obtained warrants to search the building.',\n exampleTranslation: '警方取得了搜查令來搜查這棟建築物。',\n exampleImage: '/images/examples/warrant.png',\n synonyms: [\n 'authorization',\n 'permit',\n 'license'\n ],\n difficulty: 'C1'\n }\n ];\n const currentCard = cards[currentCardIndex];\n // Quiz mode options - dynamically generate from current cards\n const quizOptions = [\n cards[currentCardIndex].translation,\n ...cards.filter((_, idx)=>idx !== currentCardIndex).map((card)=>card.translation).slice(0, 2),\n '建議、提議' // additional wrong option\n ].sort(()=>Math.random() - 0.5) // shuffle options\n ;\n const handleFlip = ()=>{\n setIsFlipped(!isFlipped);\n };\n const handleNext = ()=>{\n if (currentCardIndex < cards.length - 1) {\n setCurrentCardIndex(currentCardIndex + 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handlePrevious = ()=>{\n if (currentCardIndex > 0) {\n setCurrentCardIndex(currentCardIndex - 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handleDifficultyRate = (rating)=>{\n // Mock rating logic\n console.log(`Rated ${rating} for ${currentCard.word}`);\n handleNext();\n };\n const handleQuizAnswer = (answer)=>{\n setSelectedAnswer(answer);\n setShowResult(true);\n if (answer === currentCard.translation) {\n setScore({\n ...score,\n correct: score.correct + 1,\n total: score.total + 1\n });\n } else {\n setScore({\n ...score,\n total: score.total + 1\n });\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 126,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/dashboard\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"儀表板\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 128,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/flashcards\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 129,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/learn\",\n className: \"text-gray-900 font-medium\",\n children: \"學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 130,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/generate\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"AI 生成\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 131,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 127,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 125,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>window.location.href = '/dashboard',\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 134,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 124,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 123,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 122,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-4xl mx-auto px-4 py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: \"進度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 148,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n currentCardIndex + 1,\n \" / \",\n cards.length\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 149,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 147,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full bg-gray-200 rounded-full h-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-primary h-2 rounded-full transition-all\",\n style: {\n width: `${(currentCardIndex + 1) / cards.length * 100}%`\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 154,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 153,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 146,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-sm p-1 inline-flex flex-wrap\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('flip'),\n className: `px-3 py-2 rounded-md transition-colors ${mode === 'flip' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'}`,\n children: \"翻卡模式\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 164,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('quiz'),\n className: `px-3 py-2 rounded-md transition-colors ${mode === 'quiz' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'}`,\n children: \"選擇題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 174,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('fill'),\n className: `px-3 py-2 rounded-md transition-colors ${mode === 'fill' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'}`,\n children: \"填空題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 184,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('listening'),\n className: `px-3 py-2 rounded-md transition-colors ${mode === 'listening' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'}`,\n children: \"聽力測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('speaking'),\n className: `px-3 py-2 rounded-md transition-colors ${mode === 'speaking' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'}`,\n children: \"口說測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 204,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 163,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 162,\n columnNumber: 9\n }, this),\n mode === 'flip' ? /* Flip Card Mode */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 231,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 230,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 222,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full h-96 cursor-pointer\",\n onClick: handleFlip,\n style: {\n perspective: '1000px'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `absolute w-full h-full transition-transform duration-600 ${isFlipped ? 'rotate-y-180' : ''}`,\n style: {\n transformStyle: 'preserve-3d',\n transform: isFlipped ? 'rotateY(180deg)' : 'rotateY(0deg)'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 flex flex-col items-center justify-center\",\n style: {\n backfaceVisibility: 'hidden'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-4xl font-bold text-gray-900 mb-4\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 256,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-600 mb-2\",\n children: currentCard.partOfSpeech\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 259,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 262,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8 text-sm text-gray-400\",\n children: \"點擊翻轉查看答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 265,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 252,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 overflow-y-auto\",\n style: {\n backfaceVisibility: 'hidden',\n transform: 'rotateY(180deg)'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-1\",\n children: \"翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 280,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-bold text-gray-900\",\n children: currentCard.translation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 281,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 279,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"定義\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 284,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 285,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 283,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 288,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 289,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 text-sm mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 290,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 287,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"同義詞\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 293,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-2\",\n children: currentCard.synonyms.map((syn, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"px-3 py-1 bg-gray-100 rounded-full text-sm\",\n children: syn\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 296,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 294,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 292,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 278,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 271,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 242,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 237,\n columnNumber: 13\n }, this),\n isFlipped && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-600\",\n children: \"這個單字對你來說難度如何?\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 311,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 310,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(1),\n className: \"px-4 py-2 bg-red-100 text-red-700 rounded-lg hover:bg-red-200 transition-colors\",\n children: \"\\uD83D\\uDE14 完全不記得\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 314,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(3),\n className: \"px-4 py-2 bg-yellow-100 text-yellow-700 rounded-lg hover:bg-yellow-200 transition-colors\",\n children: \"\\uD83D\\uDE10 有點困難\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 320,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(5),\n className: \"px-4 py-2 bg-green-100 text-green-700 rounded-lg hover:bg-green-200 transition-colors\",\n children: \"\\uD83D\\uDE0A 很簡單\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 326,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 313,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this) : mode === 'quiz' ? /* Quiz Mode - 選擇題:英文定義選中文翻譯 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 350,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 349,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 341,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 340,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"根據定義選擇正確的中文翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 358,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 359,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 mt-2\",\n children: [\n \"(\",\n currentCard.partOfSpeech,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 362,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 357,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: quizOptions.map((option, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(option),\n disabled: showResult,\n className: `w-full p-4 text-left rounded-lg border-2 transition-all ${showResult && option === currentCard.translation ? 'border-green-500 bg-green-50' : showResult && option === selectedAnswer && option !== currentCard.translation ? 'border-red-500 bg-red-50' : selectedAnswer === option ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'}`,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: option\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 384,\n columnNumber: 21\n }, this),\n showResult && option === currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-green-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 387,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 386,\n columnNumber: 23\n }, this),\n showResult && option === selectedAnswer && option !== currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-red-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 392,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 391,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 383,\n columnNumber: 19\n }, this)\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 369,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 367,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 356,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 338,\n columnNumber: 11\n }, this) : mode === 'fill' ? /* Fill in the Blank Mode - 填空題 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 416,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 415,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 407,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 406,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"根據例句圖片和句子填入正確的詞彙\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 424,\n columnNumber: 17\n }, this),\n currentCard.exampleImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: currentCard.exampleImage,\n alt: \"Example context\",\n className: \"w-full rounded-lg shadow-md cursor-pointer hover:shadow-lg transition-shadow\",\n style: {\n maxHeight: '400px',\n objectFit: 'contain'\n },\n onClick: ()=>setModalImage(currentCard.exampleImage)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 429,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-gray-500 mt-2 text-center\",\n children: \"點擊圖片可放大查看\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 436,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 428,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-800 mb-4\",\n children: currentCard.example.split(currentCard.word).map((part, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n part,\n i < currentCard.example.split(currentCard.word).length - 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block w-32 border-b-2 border-gray-400 mx-1\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 446,\n columnNumber: 23\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 443,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 441,\n columnNumber: 15\n }, this),\n !showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowHint(true),\n className: \"text-sm text-primary hover:text-primary-hover flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 459,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 458,\n columnNumber: 19\n }, this),\n \"點擊查看提示\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 454,\n columnNumber: 17\n }, this),\n showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 bg-blue-50 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-blue-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"定義提示:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 469,\n columnNumber: 21\n }, this),\n \" \",\n currentCard.definition\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 468,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 467,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 423,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: fillAnswer,\n onChange: (e)=>setFillAnswer(e.target.value),\n placeholder: \"輸入答案...\",\n className: \"w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:border-primary focus:outline-none text-lg\",\n onKeyPress: (e)=>{\n if (e.key === 'Enter' && fillAnswer) {\n setShowResult(true);\n }\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 477,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 476,\n columnNumber: 13\n }, this),\n !showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>fillAnswer && setShowResult(true),\n disabled: !fillAnswer,\n className: \"w-full py-3 bg-primary text-white rounded-lg font-medium hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: \"提交答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 493,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `p-4 rounded-lg ${fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'bg-green-50 border-2 border-green-500' : 'bg-red-50 border-2 border-red-500'}`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `font-semibold ${fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'text-green-700' : 'text-red-700'}`,\n children: fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? '✓ 正確!' : '✗ 錯誤'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 510,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 509,\n columnNumber: 17\n }, this),\n fillAnswer.toLowerCase() !== currentCard.word.toLowerCase() && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-700\",\n children: [\n \"正確答案:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-bold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 520,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 519,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-semibold mb-1\",\n children: \"完整例句:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 524,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 525,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 526,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 523,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 504,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 422,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 404,\n columnNumber: 11\n }, this) : mode === 'listening' ? /* Listening Test Mode - 聽力測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 546,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 545,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 537,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 536,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"聽音頻,選擇正確的單字\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 554,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setAudioPlaying(true);\n // Simulate audio playing\n setTimeout(()=>setAudioPlaying(false), 2000);\n },\n className: \"mx-auto mb-6 p-8 bg-gray-100 rounded-full hover:bg-gray-200 transition-colors\",\n children: audioPlaying ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-primary animate-pulse\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 567,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 566,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-gray-600\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 571,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 572,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 570,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 557,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500\",\n children: \"點擊播放按鈕聽發音\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 577,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 553,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-3\",\n children: [\n currentCard.word,\n 'determine',\n 'achieve',\n 'consider'\n ].map((word)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(word),\n disabled: showResult,\n className: `p-4 text-lg font-medium rounded-lg border-2 transition-all ${showResult && word === currentCard.word ? 'border-green-500 bg-green-50' : showResult && word === selectedAnswer && word !== currentCard.word ? 'border-red-500 bg-red-50' : selectedAnswer === word ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'}`,\n children: word\n }, word, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 583,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 581,\n columnNumber: 13\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-gray-50 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-2\",\n children: \"單字詳情\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 605,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 608,\n columnNumber: 21\n }, this),\n \" - \",\n currentCard.translation\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 607,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 610,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 italic\",\n children: [\n '\"',\n currentCard.example,\n '\"'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 611,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 606,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 604,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 552,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 534,\n columnNumber: 11\n }, this) : mode === 'speaking' ? /* Speaking Test Mode - 口說測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 631,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 630,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 622,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 621,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"念出以下例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 639,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 bg-gray-50 rounded-lg mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed mb-3\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 643,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 646,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 642,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"重點單字發音:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 653,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold text-lg\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 655,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 656,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-primary hover:text-primary-hover\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 659,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 658,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 657,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 654,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 652,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setIsRecording(!isRecording);\n if (!isRecording) {\n // Start recording\n setTimeout(()=>{\n setIsRecording(false);\n setShowResult(true);\n }, 3000);\n }\n },\n className: `p-6 rounded-full transition-all ${isRecording ? 'bg-red-500 hover:bg-red-600 animate-pulse' : 'bg-primary hover:bg-primary-hover'}`,\n children: isRecording ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 686,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 687,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 685,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 691,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 690,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 667,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: isRecording ? '錄音中... 點擊停止' : '點擊開始錄音'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 695,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 666,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-green-50 border-2 border-green-500 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-green-700 font-semibold mb-2\",\n children: \"✓ 完成口說練習!\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 703,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: \"提示:持續練習可以提高發音準確度和流暢度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 706,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 702,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 638,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 637,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 619,\n columnNumber: 11\n }, this) : null,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handlePrevious,\n disabled: currentCardIndex === 0,\n className: \"flex items-center space-x-2 px-6 py-3 bg-white rounded-lg shadow-sm hover:shadow-md transition-shadow disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 19l-7-7 7-7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 724,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 723,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"上一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 726,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 718,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleNext,\n disabled: currentCardIndex === cards.length - 1,\n className: \"flex items-center space-x-2 px-6 py-3 bg-primary text-white rounded-lg shadow-sm hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"下一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 734,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 5l7 7-7 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 736,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 735,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 729,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 717,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 144,\n columnNumber: 7\n }, this),\n modalImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-75 p-4\",\n onClick: ()=>setModalImage(null),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative max-w-4xl max-h-[90vh] bg-white rounded-lg overflow-hidden\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setModalImage(null),\n className: \"absolute top-2 right-2 z-10 p-2 bg-white bg-opacity-90 rounded-full hover:bg-opacity-100 transition-all shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-gray-700\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 758,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 757,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 753,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: modalImage,\n alt: \"Example context enlarged\",\n className: \"w-full h-full object-contain\",\n style: {\n maxHeight: 'calc(90vh - 2rem)'\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 764,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 763,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 748,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 744,\n columnNumber: 9\n }, this),\n showReportModal && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4\",\n onClick: ()=>setShowReportModal(false),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-xl max-w-md w-full p-6\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: \"回報錯誤\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 786,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowReportModal(false),\n className: \"text-gray-400 hover:text-gray-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 792,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 791,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 787,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 785,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"詞卡:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: reportingCard?.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 799,\n columnNumber: 20\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 798,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"測驗模式:\",\n mode === 'flip' ? '翻卡模式' : mode === 'quiz' ? '選擇題' : mode === 'fill' ? '填空題' : mode === 'listening' ? '聽力測試' : '口說測試'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 801,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 797,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"錯誤原因(選填)\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 807,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n value: reportReason,\n onChange: (e)=>setReportReason(e.target.value),\n placeholder: \"請描述錯誤內容...\",\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-primary focus:border-primary\",\n rows: 3\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 810,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 806,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // Submit error report\n console.log('Error reported:', {\n card: reportingCard,\n mode,\n reason: reportReason\n });\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n // Show success message (could add a toast notification here)\n alert('感謝您的回報,我們會盡快處理!');\n },\n className: \"flex-1 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-hover transition-colors\",\n children: \"送出回報\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 820,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n },\n className: \"flex-1 px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition-colors\",\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 838,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 819,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 781,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 777,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 120,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RHdGLE1BQU07b0NBQ1I7b0NBQ0FyRCxXQUFVOzhDQUNYOzs7Ozs7OENBR0QsOERBQUNHO29DQUNDQyxTQUFTO3dDQUNQM0MsbUJBQW1CO3dDQUNuQkUsZ0JBQWdCO3dDQUNoQkUsaUJBQWlCO29DQUNuQjtvQ0FDQW1DLFdBQVU7OENBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU2YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9sZWFybi9wYWdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTGVhcm5QYWdlKCkge1xuICBjb25zdCBbY3VycmVudENhcmRJbmRleCwgc2V0Q3VycmVudENhcmRJbmRleF0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBbaXNGbGlwcGVkLCBzZXRJc0ZsaXBwZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFttb2RlLCBzZXRNb2RlXSA9IHVzZVN0YXRlPCdmbGlwJyB8ICdxdWl6JyB8ICdmaWxsJyB8ICdsaXN0ZW5pbmcnIHwgJ3NwZWFraW5nJz4oJ2ZsaXAnKVxuICBjb25zdCBbc2NvcmUsIHNldFNjb3JlXSA9IHVzZVN0YXRlKHsgY29ycmVjdDogMCwgdG90YWw6IDAgfSlcbiAgY29uc3QgW3NlbGVjdGVkQW5zd2VyLCBzZXRTZWxlY3RlZEFuc3dlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Jlc3VsdCwgc2V0U2hvd1Jlc3VsdF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2ZpbGxBbnN3ZXIsIHNldEZpbGxBbnN3ZXJdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtzaG93SGludCwgc2V0U2hvd0hpbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1JlY29yZGluZywgc2V0SXNSZWNvcmRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFthdWRpb1BsYXlpbmcsIHNldEF1ZGlvUGxheWluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGFsSW1hZ2UsIHNldE1vZGFsSW1hZ2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dSZXBvcnRNb2RhbCwgc2V0U2hvd1JlcG9ydE1vZGFsXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcmVwb3J0UmVhc29uLCBzZXRSZXBvcnRSZWFzb25dID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtyZXBvcnRpbmdDYXJkLCBzZXRSZXBvcnRpbmdDYXJkXSA9IHVzZVN0YXRlPGFueT4obnVsbClcblxuICAvLyBNb2NrIGRhdGEgd2l0aCByZWFsIGV4YW1wbGUgaW1hZ2VzXG4gIGNvbnN0IGNhcmRzID0gW1xuICAgIHtcbiAgICAgIGlkOiAxLFxuICAgICAgd29yZDogJ2Jyb3VnaHQnLFxuICAgICAgcGFydE9mU3BlZWNoOiAndmVyYicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL2JyyZTLkHQvJyxcbiAgICAgIHRyYW5zbGF0aW9uOiAn5o+Q5Ye644CB5bi25L6GJyxcbiAgICAgIGRlZmluaXRpb246ICdQYXN0IHRlbnNlIG9mIGJyaW5nOyB0byBtZW50aW9uIG9yIGludHJvZHVjZSBhIHRvcGljIGluIGNvbnZlcnNhdGlvbicsXG4gICAgICBleGFtcGxlOiAnSGUgYnJvdWdodCB0aGlzIHRoaW5nIHVwIGR1cmluZyBvdXIgbWVldGluZyBhbmQgbm8gb25lIGFncmVlZC4nLFxuICAgICAgZXhhbXBsZVRyYW5zbGF0aW9uOiAn5LuW5Zyo5oiR5YCR55qE5pyD6K2w5Lit5o+Q5Ye65LqG6YCZ5Lu25LqL77yM5L2G5rKS5pyJ5Lq65ZCM5oSP44CCJyxcbiAgICAgIGV4YW1wbGVJbWFnZTogJy9pbWFnZXMvZXhhbXBsZXMvYnJpbmdfdXAucG5nJyxcbiAgICAgIHN5bm9ueW1zOiBbJ21lbnRpb25lZCcsICdyYWlzZWQnLCAnaW50cm9kdWNlZCddLFxuICAgICAgZGlmZmljdWx0eTogJ0IxJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICB3b3JkOiAnaW5zdGluY3RzJyxcbiAgICAgIHBhcnRPZlNwZWVjaDogJ25vdW4nLFxuICAgICAgcHJvbnVuY2lhdGlvbjogJy/LiMmqbnN0yarFi2t0cy8nLFxuICAgICAgdHJhbnNsYXRpb246ICfmnKzog73jgIHnm7TopronLFxuICAgICAgZGVmaW5pdGlvbjogJ05hdHVyYWwgYWJpbGl0aWVzIHRoYXQgaGVscCBsaXZpbmcgdGhpbmdzIHN1cnZpdmUgd2l0aG91dCBsZWFybmluZycsXG4gICAgICBleGFtcGxlOiAnQW5pbWFscyB1c2UgdGhlaXIgaW5zdGluY3RzIHRvIGZpbmQgZm9vZCBhbmQgc3RheSBzYWZlLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICfli5XnianliKnnlKjmnKzog73kvoblsIvmib7po5/niankuKbkv53mjIHlronlhajjgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy9pbnN0aW5jdC5wbmcnLFxuICAgICAgc3lub255bXM6IFsnaW50dWl0aW9uJywgJ2ltcHVsc2UnLCAndGVuZGVuY3knXSxcbiAgICAgIGRpZmZpY3VsdHk6ICdCMidcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgd29yZDogJ3dhcnJhbnRzJyxcbiAgICAgIHBhcnRPZlNwZWVjaDogJ25vdW4nLFxuICAgICAgcHJvbnVuY2lhdGlvbjogJy/LiHfJlMuQcsmZbnRzLycsXG4gICAgICB0cmFuc2xhdGlvbjogJ+aQnOafpeS7pOOAgeaOiOasiuS7pCcsXG4gICAgICBkZWZpbml0aW9uOiAnT2ZmaWNpYWwgZG9jdW1lbnRzIHRoYXQgZ2l2ZSBwb2xpY2UgcGVybWlzc2lvbiB0byBkbyBzb21ldGhpbmcnLFxuICAgICAgZXhhbXBsZTogJ1RoZSBwb2xpY2Ugb2J0YWluZWQgd2FycmFudHMgdG8gc2VhcmNoIHRoZSBidWlsZGluZy4nLFxuICAgICAgZXhhbXBsZVRyYW5zbGF0aW9uOiAn6K2m5pa55Y+W5b6X5LqG5pCc5p+l5Luk5L6G5pCc5p+l6YCZ5qOf5bu656+J54mp44CCJyxcbiAgICAgIGV4YW1wbGVJbWFnZTogJy9pbWFnZXMvZXhhbXBsZXMvd2FycmFudC5wbmcnLFxuICAgICAgc3lub255bXM6IFsnYXV0aG9yaXphdGlvbicsICdwZXJtaXQnLCAnbGljZW5zZSddLFxuICAgICAgZGlmZmljdWx0eTogJ0MxJ1xuICAgIH1cbiAgXVxuXG4gIGNvbnN0IGN1cnJlbnRDYXJkID0gY2FyZHNbY3VycmVudENhcmRJbmRleF1cblxuICAvLyBRdWl6IG1vZGUgb3B0aW9ucyAtIGR5bmFtaWNhbGx5IGdlbmVyYXRlIGZyb20gY3VycmVudCBjYXJkc1xuICBjb25zdCBxdWl6T3B0aW9ucyA9IFtcbiAgICBjYXJkc1tjdXJyZW50Q2FyZEluZGV4XS50cmFuc2xhdGlvbixcbiAgICAuLi5jYXJkc1xuICAgICAgLmZpbHRlcigoXywgaWR4KSA9PiBpZHggIT09IGN1cnJlbnRDYXJkSW5kZXgpXG4gICAgICAubWFwKGNhcmQgPT4gY2FyZC50cmFuc2xhdGlvbilcbiAgICAgIC5zbGljZSgwLCAyKSxcbiAgICAn5bu66K2w44CB5o+Q6K2wJyAvLyBhZGRpdGlvbmFsIHdyb25nIG9wdGlvblxuICBdLnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSkgLy8gc2h1ZmZsZSBvcHRpb25zXG5cbiAgY29uc3QgaGFuZGxlRmxpcCA9ICgpID0+IHtcbiAgICBzZXRJc0ZsaXBwZWQoIWlzRmxpcHBlZClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU5leHQgPSAoKSA9PiB7XG4gICAgaWYgKGN1cnJlbnRDYXJkSW5kZXggPCBjYXJkcy5sZW5ndGggLSAxKSB7XG4gICAgICBzZXRDdXJyZW50Q2FyZEluZGV4KGN1cnJlbnRDYXJkSW5kZXggKyAxKVxuICAgICAgc2V0SXNGbGlwcGVkKGZhbHNlKVxuICAgICAgc2V0U2VsZWN0ZWRBbnN3ZXIobnVsbClcbiAgICAgIHNldFNob3dSZXN1bHQoZmFsc2UpXG4gICAgICBzZXRGaWxsQW5zd2VyKCcnKVxuICAgICAgc2V0U2hvd0hpbnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUHJldmlvdXMgPSAoKSA9PiB7XG4gICAgaWYgKGN1cnJlbnRDYXJkSW5kZXggPiAwKSB7XG4gICAgICBzZXRDdXJyZW50Q2FyZEluZGV4KGN1cnJlbnRDYXJkSW5kZXggLSAxKVxuICAgICAgc2V0SXNGbGlwcGVkKGZhbHNlKVxuICAgICAgc2V0U2VsZWN0ZWRBbnN3ZXIobnVsbClcbiAgICAgIHNldFNob3dSZXN1bHQoZmFsc2UpXG4gICAgICBzZXRGaWxsQW5zd2VyKCcnKVxuICAgICAgc2V0U2hvd0hpbnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGlmZmljdWx0eVJhdGUgPSAocmF0aW5nOiBudW1iZXIpID0+IHtcbiAgICAvLyBNb2NrIHJhdGluZyBsb2dpY1xuICAgIGNvbnNvbGUubG9nKGBSYXRlZCAke3JhdGluZ30gZm9yICR7Y3VycmVudENhcmQud29yZH1gKVxuICAgIGhhbmRsZU5leHQoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUXVpekFuc3dlciA9IChhbnN3ZXI6IHN0cmluZykgPT4ge1xuICAgIHNldFNlbGVjdGVkQW5zd2VyKGFuc3dlcilcbiAgICBzZXRTaG93UmVzdWx0KHRydWUpXG4gICAgaWYgKGFuc3dlciA9PT0gY3VycmVudENhcmQudHJhbnNsYXRpb24pIHtcbiAgICAgIHNldFNjb3JlKHsgLi4uc2NvcmUsIGNvcnJlY3Q6IHNjb3JlLmNvcnJlY3QgKyAxLCB0b3RhbDogc2NvcmUudG90YWwgKyAxIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNjb3JlKHsgLi4uc2NvcmUsIHRvdGFsOiBzY29yZS50b3RhbCArIDEgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWdyYWRpZW50LXRvLWJyIGZyb20tYmx1ZS01MCB0by1pbmRpZ28tMTAwXCI+XG4gICAgICB7LyogTmF2aWdhdGlvbiAqL31cbiAgICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XG4gICAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPkRyYW1hTGluZzwvTGluaz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleCBzcGFjZS14LTZcIj5cbiAgICAgICAgICAgICAgICA8TGluayBocmVmPVwiL2Rhc2hib2FyZFwiIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiPuWEgOihqOadvzwvTGluaz5cbiAgICAgICAgICAgICAgICA8TGluayBocmVmPVwiL2ZsYXNoY2FyZHNcIiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj7oqZ7ljaE8L0xpbms+XG4gICAgICAgICAgICAgICAgPExpbmsgaHJlZj1cIi9sZWFyblwiIGNsYXNzTmFtZT1cInRleHQtZ3JheS05MDAgZm9udC1tZWRpdW1cIj7lrbjnv5I8L0xpbms+XG4gICAgICAgICAgICAgICAgPExpbmsgaHJlZj1cIi9nZW5lcmF0ZVwiIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiPkFJIOeUn+aIkDwvTGluaz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL2Rhc2hib2FyZCd9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIMOXIOe1kOadn+WtuOe/klxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uYXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctNHhsIG14LWF1dG8gcHgtNCBweS04XCI+XG4gICAgICAgIHsvKiBQcm9ncmVzcyBCYXIgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItOFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMFwiPumAsuW6pjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICB7Y3VycmVudENhcmRJbmRleCArIDF9IC8ge2NhcmRzLmxlbmd0aH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBiZy1ncmF5LTIwMCByb3VuZGVkLWZ1bGwgaC0yXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgaC0yIHJvdW5kZWQtZnVsbCB0cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBgJHsoKGN1cnJlbnRDYXJkSW5kZXggKyAxKSAvIGNhcmRzLmxlbmd0aCkgKiAxMDB9JWAgfX1cbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIE1vZGUgVG9nZ2xlICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXIgbWItNlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC1sZyBzaGFkb3ctc20gcC0xIGlubGluZS1mbGV4IGZsZXgtd3JhcFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RlKCdmbGlwJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ2ZsaXAnXG4gICAgICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUnXG4gICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDnv7vljaHmqKHlvI9cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RlKCdxdWl6Jyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ3F1aXonXG4gICAgICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUnXG4gICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDpgbjmk4fpoYxcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RlKCdmaWxsJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ2ZpbGwnXG4gICAgICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUnXG4gICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDloavnqbrpoYxcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RlKCdsaXN0ZW5pbmcnKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0yIHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICBtb2RlID09PSAnbGlzdGVuaW5nJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg6IG95Yqb5ris6KmmXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnc3BlYWtpbmcnKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0yIHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICBtb2RlID09PSAnc3BlYWtpbmcnXG4gICAgICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUnXG4gICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDlj6PoqqrmuKzoqaZcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7bW9kZSA9PT0gJ2ZsaXAnID8gKFxuICAgICAgICAgIC8qIEZsaXAgQ2FyZCBNb2RlICovXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgey8qIEVycm9yIFJlcG9ydCBCdXR0b24gZm9yIEZsaXAgTW9kZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBtYi0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKGN1cnJlbnRDYXJkKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5Zue5aCx6Yyv6KqkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAg5Zue5aCx6Yyv6KqkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtOTYgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVGbGlwfVxuICAgICAgICAgICAgICBzdHlsZT17eyBwZXJzcGVjdGl2ZTogJzEwMDBweCcgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGFic29sdXRlIHctZnVsbCBoLWZ1bGwgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tNjAwICR7XG4gICAgICAgICAgICAgICAgICBpc0ZsaXBwZWQgPyAncm90YXRlLXktMTgwJyA6ICcnXG4gICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0eWxlOiAncHJlc2VydmUtM2QnLFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBpc0ZsaXBwZWQgPyAncm90YXRlWSgxODBkZWcpJyA6ICdyb3RhdGVZKDBkZWcpJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7LyogRnJvbnQgb2YgY2FyZCAqL31cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB3LWZ1bGwgaC1mdWxsIGJnLXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLTggZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgYmFja2ZhY2VWaXNpYmlsaXR5OiAnaGlkZGVuJyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC00eGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQud29yZH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxnIHRleHQtZ3JheS02MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQucGFydE9mU3BlZWNofVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGcgdGV4dC1ncmF5LTUwMFwiPlxuICAgICAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQucHJvbnVuY2lhdGlvbn1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC04IHRleHQtc20gdGV4dC1ncmF5LTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICDpu57mk4rnv7vovYnmn6XnnIvnrZTmoYhcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgey8qIEJhY2sgb2YgY2FyZCAqL31cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB3LWZ1bGwgaC1mdWxsIGJnLXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLTggb3ZlcmZsb3cteS1hdXRvXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IFxuICAgICAgICAgICAgICAgICAgICBiYWNrZmFjZVZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICdyb3RhdGVZKDE4MGRlZyknXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCBtYi0xXCI+57+76K2vPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ncmF5LTkwMFwiPntjdXJyZW50Q2FyZC50cmFuc2xhdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCBtYi0xXCI+5a6a576pPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+e2N1cnJlbnRDYXJkLmRlZmluaXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPuS+i+WPpTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMFwiPntjdXJyZW50Q2FyZC5leGFtcGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMCB0ZXh0LXNtIG10LTFcIj57Y3VycmVudENhcmQuZXhhbXBsZVRyYW5zbGF0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTFcIj7lkIznvqnoqZ48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuc3lub255bXMubWFwKChzeW4sIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e2lkeH0gY2xhc3NOYW1lPVwicHgtMyBweS0xIGJnLWdyYXktMTAwIHJvdW5kZWQtZnVsbCB0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N5bn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBEaWZmaWN1bHR5IFJhdGluZyAqL31cbiAgICAgICAgICAgIHtpc0ZsaXBwZWQgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LThcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyIG1iLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDBcIj7pgJnlgIvllq7lrZflsI3kvaDkvoboqqrpm6PluqblpoLkvZXvvJ88L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIHNwYWNlLXgtM1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEaWZmaWN1bHR5UmF0ZSgxKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNCBweS0yIGJnLXJlZC0xMDAgdGV4dC1yZWQtNzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctcmVkLTIwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIPCfmJQg5a6M5YWo5LiN6KiY5b6XXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRGlmZmljdWx0eVJhdGUoMyl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy15ZWxsb3ctMTAwIHRleHQteWVsbG93LTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLXllbGxvdy0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDwn5iQIOaciem7nuWbsOmbo1xuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURpZmZpY3VsdHlSYXRlKDUpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC00IHB5LTIgYmctZ3JlZW4tMTAwIHRleHQtZ3JlZW4tNzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JlZW4tMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg8J+YiiDlvojnsKHllq5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBtb2RlID09PSAncXVpeicgPyAoXG4gICAgICAgICAgLyogUXVpeiBNb2RlIC0g6YG45pOH6aGM77ya6Iux5paH5a6a576p6YG45Lit5paH57+76K2vICovXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgey8qIEVycm9yIFJlcG9ydCBCdXR0b24gZm9yIFF1aXogTW9kZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBtYi0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKGN1cnJlbnRDYXJkKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5Zue5aCx6Yyv6KqkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAg5Zue5aCx6Yyv6KqkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi0yXCI+5qC55pOa5a6a576p6YG45pOH5q2j56K655qE5Lit5paH57+76K2vPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhsIHRleHQtZ3JheS04MDAgbGVhZGluZy1yZWxheGVkXCI+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZGVmaW5pdGlvbn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTUwMCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAoe2N1cnJlbnRDYXJkLnBhcnRPZlNwZWVjaH0pXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktM1wiPlxuICAgICAgICAgICAgICB7cXVpek9wdGlvbnMubWFwKChvcHRpb24sIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17aWR4fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gIXNob3dSZXN1bHQgJiYgaGFuZGxlUXVpekFuc3dlcihvcHRpb24pfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Nob3dSZXN1bHR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgcC00IHRleHQtbGVmdCByb3VuZGVkLWxnIGJvcmRlci0yIHRyYW5zaXRpb24tYWxsICR7XG4gICAgICAgICAgICAgICAgICAgIHNob3dSZXN1bHQgJiYgb3B0aW9uID09PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvblxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1ncmVlbi01MDAgYmctZ3JlZW4tNTAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gc2VsZWN0ZWRBbnN3ZXIgJiYgb3B0aW9uICE9PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvblxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkQW5zd2VyID09PSBvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItcHJpbWFyeSBiZy1wcmltYXJ5LWxpZ2h0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ2JvcmRlci1ncmF5LTIwMCBob3Zlcjpib3JkZXItZ3JheS0zMDAnXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntvcHRpb259PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiBvcHRpb24gPT09IGN1cnJlbnRDYXJkLnRyYW5zbGF0aW9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTUgdGV4dC1ncmVlbi01MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk01IDEzbDQgNEwxOSA3XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge3Nob3dSZXN1bHQgJiYgb3B0aW9uID09PSBzZWxlY3RlZEFuc3dlciAmJiBvcHRpb24gIT09IGN1cnJlbnRDYXJkLnRyYW5zbGF0aW9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTUgdGV4dC1yZWQtNTAwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBtb2RlID09PSAnZmlsbCcgPyAoXG4gICAgICAgICAgLyogRmlsbCBpbiB0aGUgQmxhbmsgTW9kZSAtIOWhq+epuumhjCAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBGaWxsIE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLThcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItNFwiPuagueaTmuS+i+WPpeWclueJh+WSjOWPpeWtkOWhq+WFpeato+eiuueahOipnuW9mTwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBFeGFtcGxlIEltYWdlICovfVxuICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZXhhbXBsZUltYWdlICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgc3JjPXtjdXJyZW50Q2FyZC5leGFtcGxlSW1hZ2V9XG4gICAgICAgICAgICAgICAgICAgIGFsdD1cIkV4YW1wbGUgY29udGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCByb3VuZGVkLWxnIHNoYWRvdy1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpzaGFkb3ctbGcgdHJhbnNpdGlvbi1zaGFkb3dcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhIZWlnaHQ6ICc0MDBweCcsIG9iamVjdEZpdDogJ2NvbnRhaW4nIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsSW1hZ2UoY3VycmVudENhcmQuZXhhbXBsZUltYWdlKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTUwMCBtdC0yIHRleHQtY2VudGVyXCI+6bue5pOK5ZyW54mH5Y+v5pS+5aSn5p+l55yLPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgey8qIEV4YW1wbGUgU2VudGVuY2Ugd2l0aCBCbGFuayAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxnIHRleHQtZ3JheS04MDAgbWItNFwiPlxuICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5leGFtcGxlLnNwbGl0KGN1cnJlbnRDYXJkLndvcmQpLm1hcCgocGFydCwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgICAge3BhcnR9XG4gICAgICAgICAgICAgICAgICAgIHtpIDwgY3VycmVudENhcmQuZXhhbXBsZS5zcGxpdChjdXJyZW50Q2FyZC53b3JkKS5sZW5ndGggLSAxICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbmxpbmUtYmxvY2sgdy0zMiBib3JkZXItYi0yIGJvcmRlci1ncmF5LTQwMCBteC0xXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogSGludCBCdXR0b24gKi99XG4gICAgICAgICAgICAgIHshc2hvd0hpbnQgJiYgKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dIaW50KHRydWUpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXByaW1hcnkgaG92ZXI6dGV4dC1wcmltYXJ5LWhvdmVyIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEzIDE2aC0xdi00aC0xbTEtNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAg6bue5pOK5p+l55yL5o+Q56S6XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgey8qIERlZmluaXRpb24gSGludCAqL31cbiAgICAgICAgICAgICAge3Nob3dIaW50ICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgcC0zIGJnLWJsdWUtNTAgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtYmx1ZS04MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz7lrprnvqnmj5DnpLrvvJo8L3N0cm9uZz4ge2N1cnJlbnRDYXJkLmRlZmluaXRpb259XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogQW5zd2VyIElucHV0ICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17ZmlsbEFuc3dlcn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEZpbGxBbnN3ZXIoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6Ly45YWl562U5qGILi4uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcHgtNCBweS0zIGJvcmRlci0yIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGZvY3VzOmJvcmRlci1wcmltYXJ5IGZvY3VzOm91dGxpbmUtbm9uZSB0ZXh0LWxnXCJcbiAgICAgICAgICAgICAgICBvbktleVByZXNzPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmIGZpbGxBbnN3ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2hvd1Jlc3VsdCh0cnVlKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIFN1Ym1pdCBCdXR0b24gKi99XG4gICAgICAgICAgICB7IXNob3dSZXN1bHQgJiYgKFxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZmlsbEFuc3dlciAmJiBzZXRTaG93UmVzdWx0KHRydWUpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshZmlsbEFuc3dlcn1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcHktMyBiZy1wcmltYXJ5IHRleHQtd2hpdGUgcm91bmRlZC1sZyBmb250LW1lZGl1bSBob3ZlcjpiZy1wcmltYXJ5LWhvdmVyIHRyYW5zaXRpb24tY29sb3JzIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIOaPkOS6pOetlOahiFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHsvKiBSZXN1bHQgRGlzcGxheSAqL31cbiAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BwLTQgcm91bmRlZC1sZyAke1xuICAgICAgICAgICAgICAgIGZpbGxBbnN3ZXIudG9Mb3dlckNhc2UoKSA9PT0gY3VycmVudENhcmQud29yZC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICA/ICdiZy1ncmVlbi01MCBib3JkZXItMiBib3JkZXItZ3JlZW4tNTAwJ1xuICAgICAgICAgICAgICAgICAgOiAnYmctcmVkLTUwIGJvcmRlci0yIGJvcmRlci1yZWQtNTAwJ1xuICAgICAgICAgICAgICB9YH0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItMlwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgZm9udC1zZW1pYm9sZCAke1xuICAgICAgICAgICAgICAgICAgICBmaWxsQW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRDYXJkLndvcmQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgID8gJ3RleHQtZ3JlZW4tNzAwJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3RleHQtcmVkLTcwMCdcbiAgICAgICAgICAgICAgICAgIH1gfT5cbiAgICAgICAgICAgICAgICAgICAge2ZpbGxBbnN3ZXIudG9Mb3dlckNhc2UoKSA9PT0gY3VycmVudENhcmQud29yZC50b0xvd2VyQ2FzZSgpID8gJ+KckyDmraPnorrvvIEnIDogJ+KclyDpjK/oqqQnfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHtmaWxsQW5zd2VyLnRvTG93ZXJDYXNlKCkgIT09IGN1cnJlbnRDYXJkLndvcmQudG9Mb3dlckNhc2UoKSAmJiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgICAgICAgICDmraPnorrnrZTmoYjvvJo8c3BhbiBjbGFzc05hbWU9XCJmb250LWJvbGRcIj57Y3VycmVudENhcmQud29yZH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyB0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCBtYi0xXCI+5a6M5pW05L6L5Y+l77yaPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2PntjdXJyZW50Q2FyZC5leGFtcGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIG10LTFcIj57Y3VycmVudENhcmQuZXhhbXBsZVRyYW5zbGF0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG1vZGUgPT09ICdsaXN0ZW5pbmcnID8gKFxuICAgICAgICAgIC8qIExpc3RlbmluZyBUZXN0IE1vZGUgLSDogb3lipvmuKzoqaYgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgTGlzdGVuaW5nIE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLThcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItNFwiPuiBvemfs+mgu++8jOmBuOaTh+ato+eiuueahOWWruWtlzwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBBdWRpbyBQbGF5IEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEF1ZGlvUGxheWluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgLy8gU2ltdWxhdGUgYXVkaW8gcGxheWluZ1xuICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRBdWRpb1BsYXlpbmcoZmFsc2UpLCAyMDAwKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXgtYXV0byBtYi02IHAtOCBiZy1ncmF5LTEwMCByb3VuZGVkLWZ1bGwgaG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2F1ZGlvUGxheWluZyA/IChcbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy0xNiBoLTE2IHRleHQtcHJpbWFyeSBhbmltYXRlLXB1bHNlXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNS41MzYgOC40NjRhNSA1IDAgMDEwIDcuMDcybTIuODI4LTkuOWE5IDkgMCAwMTAgMTIuNzI4TTUuNTg2IDE1SDRhMSAxIDAgMDEtMS0xdi00YTEgMSAwIDAxMS0xaDEuNTg2bDQuNzA3LTQuNzA3QzEwLjkyMyAzLjY2MyAxMiA0LjEwOSAxMiA1djE0YzAgLjg5MS0xLjA3NyAxLjMzNy0xLjcwNy43MDdMNS41ODYgMTV6XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctMTYgaC0xNiB0ZXh0LWdyYXktNjAwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNC43NTIgMTEuMTY4bC0zLjE5Ny0yLjEzMkExIDEgMCAwMDEwIDkuODd2NC4yNjNhMSAxIDAgMDAxLjU1NS44MzJsMy4xOTctMi4xMzJhMSAxIDAgMDAwLTEuNjY0elwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDBcIj7pu57mk4rmkq3mlL7mjInpiJXogb3nmbzpn7M8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogV29yZCBPcHRpb25zICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0zXCI+XG4gICAgICAgICAgICAgIHtbY3VycmVudENhcmQud29yZCwgJ2RldGVybWluZScsICdhY2hpZXZlJywgJ2NvbnNpZGVyJ10ubWFwKCh3b3JkKSA9PiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAga2V5PXt3b3JkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gIXNob3dSZXN1bHQgJiYgaGFuZGxlUXVpekFuc3dlcih3b3JkKX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzaG93UmVzdWx0fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcC00IHRleHQtbGcgZm9udC1tZWRpdW0gcm91bmRlZC1sZyBib3JkZXItMiB0cmFuc2l0aW9uLWFsbCAke1xuICAgICAgICAgICAgICAgICAgICBzaG93UmVzdWx0ICYmIHdvcmQgPT09IGN1cnJlbnRDYXJkLndvcmRcbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItZ3JlZW4tNTAwIGJnLWdyZWVuLTUwJ1xuICAgICAgICAgICAgICAgICAgICAgIDogc2hvd1Jlc3VsdCAmJiB3b3JkID09PSBzZWxlY3RlZEFuc3dlciAmJiB3b3JkICE9PSBjdXJyZW50Q2FyZC53b3JkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTUwJ1xuICAgICAgICAgICAgICAgICAgICAgIDogc2VsZWN0ZWRBbnN3ZXIgPT09IHdvcmRcbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItcHJpbWFyeSBiZy1wcmltYXJ5LWxpZ2h0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ2JvcmRlci1ncmF5LTIwMCBob3Zlcjpib3JkZXItZ3JheS0zMDAnXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7d29yZH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIFJlc3VsdCBEaXNwbGF5ICovfVxuICAgICAgICAgICAge3Nob3dSZXN1bHQgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTYgcC00IGJnLWdyYXktNTAgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMlwiPuWWruWtl+ips+aDhTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkXCI+e2N1cnJlbnRDYXJkLndvcmR9PC9zcGFuPiAtIHtjdXJyZW50Q2FyZC50cmFuc2xhdGlvbn1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj57Y3VycmVudENhcmQuZGVmaW5pdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwIGl0YWxpY1wiPlwie2N1cnJlbnRDYXJkLmV4YW1wbGV9XCI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBtb2RlID09PSAnc3BlYWtpbmcnID8gKFxuICAgICAgICAgIC8qIFNwZWFraW5nIFRlc3QgTW9kZSAtIOWPo+iqqua4rOippiAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBTcGVha2luZyBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTRcIj7lv7Xlh7rku6XkuIvkvovlj6U8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogVGFyZ2V0IFNlbnRlbmNlICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNiBiZy1ncmF5LTUwIHJvdW5kZWQtbGcgbWItNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14bCB0ZXh0LWdyYXktODAwIGxlYWRpbmctcmVsYXhlZCBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZXhhbXBsZX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5leGFtcGxlVHJhbnNsYXRpb259XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBQcm9udW5jaWF0aW9uIEd1aWRlICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi0yXCI+6YeN6bue5Zau5a2X55m86Z+z77yaPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCB0ZXh0LWxnXCI+e2N1cnJlbnRDYXJkLndvcmR9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMFwiPntjdXJyZW50Q2FyZC5wcm9udW5jaWF0aW9ufTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwidGV4dC1wcmltYXJ5IGhvdmVyOnRleHQtcHJpbWFyeS1ob3ZlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTUuNTM2IDguNDY0YTUgNSAwIDAxMCA3LjA3Mm0yLjgyOC05LjlhOSA5IDAgMDEwIDEyLjcyOE01LjU4NiAxNUg0YTEgMSAwIDAxLTEtMXYtNGExIDEgMCAwMTEtMWgxLjU4Nmw0LjcwNy00LjcwN0MxMC45MjMgMy42NjMgMTIgNC4xMDkgMTIgNXYxNGMwIC44OTEtMS4wNzcgMS4zMzctMS43MDcuNzA3TDUuNTg2IDE1elwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBSZWNvcmRpbmcgQnV0dG9uICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRJc1JlY29yZGluZyghaXNSZWNvcmRpbmcpXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZWNvcmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCByZWNvcmRpbmdcbiAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldElzUmVjb3JkaW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd1Jlc3VsdCh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgIH0sIDMwMDApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BwLTYgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsICR7XG4gICAgICAgICAgICAgICAgICAgIGlzUmVjb3JkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYmctcmVkLTUwMCBob3ZlcjpiZy1yZWQtNjAwIGFuaW1hdGUtcHVsc2UnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYmctcHJpbWFyeSBob3ZlcjpiZy1wcmltYXJ5LWhvdmVyJ1xuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2lzUmVjb3JkaW5nID8gKFxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctMTIgaC0xMiB0ZXh0LXdoaXRlXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTkgMTBhMSAxIDAgMDExLTFoNGExIDEgMCAwMTEgMXY0YTEgMSAwIDAxLTEgMWgtNGExIDEgMCAwMS0xLTF2LTR6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctMTIgaC0xMiB0ZXh0LXdoaXRlXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE5IDExYTcgNyAwIDAxLTcgN20wIDBhNyA3IDAgMDEtNy03bTcgN3Y0bTAgMEg4bTQgMGg0bS00LThhMyAzIDAgMDEtMy0zVjVhMyAzIDAgMTE2IDB2NmEzIDMgMCAwMS0zIDN6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyB0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAgICAgIHtpc1JlY29yZGluZyA/ICfpjITpn7PkuK0uLi4g6bue5pOK5YGc5q2iJyA6ICfpu57mk4rplovlp4vpjITpn7MnfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogUmVzdWx0IERpc3BsYXkgKi99XG4gICAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTYgcC00IGJnLWdyZWVuLTUwIGJvcmRlci0yIGJvcmRlci1ncmVlbi01MDAgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyZWVuLTcwMCBmb250LXNlbWlib2xkIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAg4pyTIOWujOaIkOWPo+iqque3tOe/ku+8gVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICDmj5DnpLrvvJrmjIHnuoznt7Tnv5Llj6/ku6Xmj5Dpq5jnmbzpn7PmupbnorrluqblkozmtYHmmqLluqZcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHsvKiBOYXZpZ2F0aW9uIEJ1dHRvbnMgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gbXQtOFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVByZXZpb3VzfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2N1cnJlbnRDYXJkSW5kZXggPT09IDB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgcHgtNiBweS0zIGJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LXNtIGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNSAxOWwtNy03IDctN1wiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDxzcGFuPuS4iuS4gOWAizwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU5leHR9XG4gICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVudENhcmRJbmRleCA9PT0gY2FyZHMubGVuZ3RoIC0gMX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiBweC02IHB5LTMgYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LXNtIGhvdmVyOmJnLXByaW1hcnktaG92ZXIgdHJhbnNpdGlvbi1jb2xvcnMgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPuS4i+S4gOWAizwvc3Bhbj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNOSA1bDcgNy03IDdcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBJbWFnZSBNb2RhbCAqL31cbiAgICAgIHttb2RhbEltYWdlICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjayBiZy1vcGFjaXR5LTc1IHAtNFwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kYWxJbWFnZShudWxsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG1heC13LTR4bCBtYXgtaC1bOTB2aF0gYmctd2hpdGUgcm91bmRlZC1sZyBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIENsb3NlIEJ1dHRvbiAqL31cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kYWxJbWFnZShudWxsKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMiB6LTEwIHAtMiBiZy13aGl0ZSBiZy1vcGFjaXR5LTkwIHJvdW5kZWQtZnVsbCBob3ZlcjpiZy1vcGFjaXR5LTEwMCB0cmFuc2l0aW9uLWFsbCBzaGFkb3ctbGdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTYgdGV4dC1ncmF5LTcwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgey8qIEltYWdlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTRcIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17bW9kYWxJbWFnZX1cbiAgICAgICAgICAgICAgICBhbHQ9XCJFeGFtcGxlIGNvbnRleHQgZW5sYXJnZWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvbnRhaW5cIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1heEhlaWdodDogJ2NhbGMoOTB2aCAtIDJyZW0pJyB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIEVycm9yIFJlcG9ydCBNb2RhbCAqL31cbiAgICAgIHtzaG93UmVwb3J0TW9kYWwgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZml4ZWQgaW5zZXQtMCB6LTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWJsYWNrIGJnLW9wYWNpdHktNTAgcC00XCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UmVwb3J0TW9kYWwoZmFsc2UpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC1sZyBzaGFkb3cteGwgbWF4LXctbWQgdy1mdWxsIHAtNlwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00XCI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIj7lm57loLHpjK/oqqQ8L2gzPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZ3JheS02MDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAg6Kme5Y2h77yaPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57cmVwb3J0aW5nQ2FyZD8ud29yZH08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAg5ris6amX5qih5byP77yae21vZGUgPT09ICdmbGlwJyA/ICfnv7vljaHmqKHlvI8nIDogbW9kZSA9PT0gJ3F1aXonID8gJ+mBuOaTh+mhjCcgOiBtb2RlID09PSAnZmlsbCcgPyAn5aGr56m66aGMJyA6IG1vZGUgPT09ICdsaXN0ZW5pbmcnID8gJ+iBveWKm+a4rOippicgOiAn5Y+j6Kqq5ris6KmmJ31cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgIOmMr+iqpOWOn+WboO+8iOmBuOWhq++8iVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICB2YWx1ZT17cmVwb3J0UmVhc29ufVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0UmVwb3J0UmVhc29uKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuiri+aPj+i/sOmMr+iqpOWFp+WuuS4uLlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTMgcHktMiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgZm9jdXM6cmluZy1wcmltYXJ5IGZvY3VzOmJvcmRlci1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICByb3dzPXszfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gU3VibWl0IGVycm9yIHJlcG9ydFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHJlcG9ydGVkOicsIHtcbiAgICAgICAgICAgICAgICAgICAgY2FyZDogcmVwb3J0aW5nQ2FyZCxcbiAgICAgICAgICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZXBvcnRSZWFzb25cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRSZWFzb24oJycpXG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKG51bGwpXG4gICAgICAgICAgICAgICAgICAvLyBTaG93IHN1Y2Nlc3MgbWVzc2FnZSAoY291bGQgYWRkIGEgdG9hc3Qgbm90aWZpY2F0aW9uIGhlcmUpXG4gICAgICAgICAgICAgICAgICBhbGVydCgn5oSf6Kyd5oKo55qE5Zue5aCx77yM5oiR5YCR5pyD55uh5b+r6JmV55CG77yBJylcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBweC00IHB5LTIgYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgaG92ZXI6YmctcHJpbWFyeS1ob3ZlciB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDpgIHlh7rlm57loLFcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRSZWFzb24oJycpXG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKG51bGwpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcHgtNCBweS0yIGJnLWdyYXktMTAwIHRleHQtZ3JheS03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy1ncmF5LTIwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDlj5bmtohcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59Il0sIm5hbWVzIjpbInVzZVN0YXRlIiwiTGluayIsIkxlYXJuUGFnZSIsImN1cnJlbnRDYXJkSW5kZXgiLCJzZXRDdXJyZW50Q2FyZEluZGV4IiwiaXNGbGlwcGVkIiwic2V0SXNGbGlwcGVkIiwibW9kZSIsInNldE1vZGUiLCJzY29yZSIsInNldFNjb3JlIiwiY29ycmVjdCIsInRvdGFsIiwic2VsZWN0ZWRBbnN3ZXIiLCJzZXRTZWxlY3RlZEFuc3dlciIsInNob3dSZXN1bHQiLCJzZXRTaG93UmVzdWx0IiwiZmlsbEFuc3dlciIsInNldEZpbGxBbnN3ZXIiLCJzaG93SGludCIsInNldFNob3dIaW50IiwiaXNSZWNvcmRpbmciLCJzZXRJc1JlY29yZGluZyIsImF1ZGlvUGxheWluZyIsInNldEF1ZGlvUGxheWluZyIsIm1vZGFsSW1hZ2UiLCJzZXRNb2RhbEltYWdlIiwic2hvd1JlcG9ydE1vZGFsIiwic2V0U2hvd1JlcG9ydE1vZGFsIiwicmVwb3J0UmVhc29uIiwic2V0UmVwb3J0UmVhc29uIiwicmVwb3J0aW5nQ2FyZCIsInNldFJlcG9ydGluZ0NhcmQiLCJjYXJkcyIsImlkIiwid29yZCIsInBhcnRPZlNwZWVjaCIsInByb251bmNpYXRpb24iLCJ0cmFuc2xhdGlvbiIsImRlZmluaXRpb24iLCJleGFtcGxlIiwiZXhhbXBsZVRyYW5zbGF0aW9uIiwiZXhhbXBsZUltYWdlIiwic3lub255bXMiLCJkaWZmaWN1bHR5IiwiY3VycmVudENhcmQiLCJxdWl6T3B0aW9ucyIsImZpbHRlciIsIl8iLCJpZHgiLCJtYXAiLCJjYXJkIiwic2xpY2UiLCJzb3J0IiwiTWF0aCIsInJhbmRvbSIsImhhbmRsZUZsaXAiLCJoYW5kbGVOZXh0IiwibGVuZ3RoIiwiaGFuZGxlUHJldmlvdXMiLCJoYW5kbGVEaWZmaWN1bHR5UmF0ZSIsInJhdGluZyIsImNvbnNvbGUiLCJsb2ciLCJoYW5kbGVRdWl6QW5zd2VyIiwiYW5zd2VyIiwiZGl2IiwiY2xhc3NOYW1lIiwibmF2IiwiaHJlZiIsImJ1dHRvbiIsIm9uQ2xpY2siLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInNwYW4iLCJzdHlsZSIsIndpZHRoIiwidGl0bGUiLCJzdmciLCJmaWxsIiwic3Ryb2tlIiwidmlld0JveCIsInBhdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsImQiLCJwZXJzcGVjdGl2ZSIsInRyYW5zZm9ybVN0eWxlIiwidHJhbnNmb3JtIiwiYmFja2ZhY2VWaXNpYmlsaXR5Iiwic3luIiwib3B0aW9uIiwiZGlzYWJsZWQiLCJpbWciLCJzcmMiLCJhbHQiLCJtYXhIZWlnaHQiLCJvYmplY3RGaXQiLCJzcGxpdCIsInBhcnQiLCJpIiwic3Ryb25nIiwiaW5wdXQiLCJ0eXBlIiwidmFsdWUiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJwbGFjZWhvbGRlciIsIm9uS2V5UHJlc3MiLCJrZXkiLCJ0b0xvd2VyQ2FzZSIsInNldFRpbWVvdXQiLCJzdG9wUHJvcGFnYXRpb24iLCJoMyIsImxhYmVsIiwidGV4dGFyZWEiLCJyb3dzIiwicmVhc29uIiwiYWxlcnQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./app/learn/page.tsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LearnPage)\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/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/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_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _components_Navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/Navigation */ \"(ssr)/./components/Navigation.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\nfunction LearnPage() {\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n const [currentCardIndex, setCurrentCardIndex] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [isFlipped, setIsFlipped] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('flip');\n const [score, setScore] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n correct: 0,\n total: 0\n });\n const [selectedAnswer, setSelectedAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showResult, setShowResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [fillAnswer, setFillAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [showHint, setShowHint] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [isRecording, setIsRecording] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [audioPlaying, setAudioPlaying] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [modalImage, setModalImage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showReportModal, setShowReportModal] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [reportReason, setReportReason] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [reportingCard, setReportingCard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Mock data with real example images\n const cards = [\n {\n id: 1,\n word: 'brought',\n partOfSpeech: 'verb',\n pronunciation: '/brɔːt/',\n translation: '提出、帶來',\n definition: 'Past tense of bring; to mention or introduce a topic in conversation',\n example: 'He brought this thing up during our meeting and no one agreed.',\n exampleTranslation: '他在我們的會議中提出了這件事,但沒有人同意。',\n exampleImage: '/images/examples/bring_up.png',\n synonyms: [\n 'mentioned',\n 'raised',\n 'introduced'\n ],\n difficulty: 'B1'\n },\n {\n id: 2,\n word: 'instincts',\n partOfSpeech: 'noun',\n pronunciation: '/ˈɪnstɪŋkts/',\n translation: '本能、直覺',\n definition: 'Natural abilities that help living things survive without learning',\n example: 'Animals use their instincts to find food and stay safe.',\n exampleTranslation: '動物利用本能來尋找食物並保持安全。',\n exampleImage: '/images/examples/instinct.png',\n synonyms: [\n 'intuition',\n 'impulse',\n 'tendency'\n ],\n difficulty: 'B2'\n },\n {\n id: 3,\n word: 'warrants',\n partOfSpeech: 'noun',\n pronunciation: '/ˈwɔːrənts/',\n translation: '搜查令、授權令',\n definition: 'Official documents that give police permission to do something',\n example: 'The police obtained warrants to search the building.',\n exampleTranslation: '警方取得了搜查令來搜查這棟建築物。',\n exampleImage: '/images/examples/warrant.png',\n synonyms: [\n 'authorization',\n 'permit',\n 'license'\n ],\n difficulty: 'C1'\n }\n ];\n const currentCard = cards[currentCardIndex];\n // Quiz mode options - dynamically generate from current cards\n const quizOptions = [\n cards[currentCardIndex].translation,\n ...cards.filter((_, idx)=>idx !== currentCardIndex).map((card)=>card.translation).slice(0, 2),\n '建議、提議' // additional wrong option\n ].sort(()=>Math.random() - 0.5) // shuffle options\n ;\n const handleFlip = ()=>{\n setIsFlipped(!isFlipped);\n };\n const handleNext = ()=>{\n if (currentCardIndex < cards.length - 1) {\n setCurrentCardIndex(currentCardIndex + 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handlePrevious = ()=>{\n if (currentCardIndex > 0) {\n setCurrentCardIndex(currentCardIndex - 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handleDifficultyRate = (rating)=>{\n // Mock rating logic\n console.log(`Rated ${rating} for ${currentCard.word}`);\n handleNext();\n };\n const handleQuizAnswer = (answer)=>{\n setSelectedAnswer(answer);\n setShowResult(true);\n if (answer === currentCard.translation) {\n setScore({\n ...score,\n correct: score.correct + 1,\n total: score.total + 1\n });\n } else {\n setScore({\n ...score,\n total: score.total + 1\n });\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_Navigation__WEBPACK_IMPORTED_MODULE_3__.Navigation, {\n showExitLearning: true,\n onExitLearning: ()=>router.push('/dashboard')\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 125,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-4xl mx-auto px-4 py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: \"進度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 134,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n currentCardIndex + 1,\n \" / \",\n cards.length\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 135,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 133,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full bg-gray-200 rounded-full h-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-primary h-2 rounded-full transition-all\",\n style: {\n width: `${(currentCardIndex + 1) / cards.length * 100}%`\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 140,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 139,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 132,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-sm p-1 inline-flex flex-wrap\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('flip'),\n className: `px-3 py-2 rounded-md transition-colors ${mode === 'flip' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'}`,\n children: \"翻卡模式\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 150,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('quiz'),\n className: `px-3 py-2 rounded-md transition-colors ${mode === 'quiz' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'}`,\n children: \"選擇題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 160,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('fill'),\n className: `px-3 py-2 rounded-md transition-colors ${mode === 'fill' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'}`,\n children: \"填空題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 170,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('listening'),\n className: `px-3 py-2 rounded-md transition-colors ${mode === 'listening' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'}`,\n children: \"聽力測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 180,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('speaking'),\n className: `px-3 py-2 rounded-md transition-colors ${mode === 'speaking' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'}`,\n children: \"口說測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 149,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 148,\n columnNumber: 9\n }, this),\n mode === 'flip' ? /* Flip Card Mode */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 217,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 216,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full h-96 cursor-pointer\",\n onClick: handleFlip,\n style: {\n perspective: '1000px'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `absolute w-full h-full transition-transform duration-600 ${isFlipped ? 'rotate-y-180' : ''}`,\n style: {\n transformStyle: 'preserve-3d',\n transform: isFlipped ? 'rotateY(180deg)' : 'rotateY(0deg)'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 flex flex-col items-center justify-center\",\n style: {\n backfaceVisibility: 'hidden'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-4xl font-bold text-gray-900 mb-4\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 242,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-600 mb-2\",\n children: currentCard.partOfSpeech\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 245,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 248,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8 text-sm text-gray-400\",\n children: \"點擊翻轉查看答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 251,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 238,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 overflow-y-auto\",\n style: {\n backfaceVisibility: 'hidden',\n transform: 'rotateY(180deg)'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-1\",\n children: \"翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 266,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-bold text-gray-900\",\n children: currentCard.translation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 267,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 265,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"定義\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 270,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 269,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 274,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 275,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 text-sm mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 276,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 273,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"同義詞\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 279,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-2\",\n children: currentCard.synonyms.map((syn, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"px-3 py-1 bg-gray-100 rounded-full text-sm\",\n children: syn\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 280,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 278,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 264,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 257,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 228,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 223,\n columnNumber: 13\n }, this),\n isFlipped && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-600\",\n children: \"這個單字對你來說難度如何?\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 297,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 296,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(1),\n className: \"px-4 py-2 bg-red-100 text-red-700 rounded-lg hover:bg-red-200 transition-colors\",\n children: \"\\uD83D\\uDE14 完全不記得\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 300,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(3),\n className: \"px-4 py-2 bg-yellow-100 text-yellow-700 rounded-lg hover:bg-yellow-200 transition-colors\",\n children: \"\\uD83D\\uDE10 有點困難\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 306,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(5),\n className: \"px-4 py-2 bg-green-100 text-green-700 rounded-lg hover:bg-green-200 transition-colors\",\n children: \"\\uD83D\\uDE0A 很簡單\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 312,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 295,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this) : mode === 'quiz' ? /* Quiz Mode - 選擇題:英文定義選中文翻譯 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 336,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 335,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 327,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 326,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"根據定義選擇正確的中文翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 344,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 345,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 mt-2\",\n children: [\n \"(\",\n currentCard.partOfSpeech,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 348,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 343,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: quizOptions.map((option, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(option),\n disabled: showResult,\n className: `w-full p-4 text-left rounded-lg border-2 transition-all ${showResult && option === currentCard.translation ? 'border-green-500 bg-green-50' : showResult && option === selectedAnswer && option !== currentCard.translation ? 'border-red-500 bg-red-50' : selectedAnswer === option ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'}`,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: option\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 370,\n columnNumber: 21\n }, this),\n showResult && option === currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-green-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 373,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 372,\n columnNumber: 23\n }, this),\n showResult && option === selectedAnswer && option !== currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-red-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 378,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 377,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 369,\n columnNumber: 19\n }, this)\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 355,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 353,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 342,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 324,\n columnNumber: 11\n }, this) : mode === 'fill' ? /* Fill in the Blank Mode - 填空題 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 402,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 401,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 393,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 392,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"根據例句圖片和句子填入正確的詞彙\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 410,\n columnNumber: 17\n }, this),\n currentCard.exampleImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: currentCard.exampleImage,\n alt: \"Example context\",\n className: \"w-full rounded-lg shadow-md cursor-pointer hover:shadow-lg transition-shadow\",\n style: {\n maxHeight: '400px',\n objectFit: 'contain'\n },\n onClick: ()=>setModalImage(currentCard.exampleImage)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 415,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-gray-500 mt-2 text-center\",\n children: \"點擊圖片可放大查看\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 422,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 414,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-800 mb-4\",\n children: currentCard.example.split(currentCard.word).map((part, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n part,\n i < currentCard.example.split(currentCard.word).length - 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block w-32 border-b-2 border-gray-400 mx-1\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 432,\n columnNumber: 23\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 429,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 427,\n columnNumber: 15\n }, this),\n !showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowHint(true),\n className: \"text-sm text-primary hover:text-primary-hover flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 445,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 444,\n columnNumber: 19\n }, this),\n \"點擊查看提示\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 440,\n columnNumber: 17\n }, this),\n showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 bg-blue-50 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-blue-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"定義提示:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 455,\n columnNumber: 21\n }, this),\n \" \",\n currentCard.definition\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 454,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 453,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 409,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: fillAnswer,\n onChange: (e)=>setFillAnswer(e.target.value),\n placeholder: \"輸入答案...\",\n className: \"w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:border-primary focus:outline-none text-lg\",\n onKeyPress: (e)=>{\n if (e.key === 'Enter' && fillAnswer) {\n setShowResult(true);\n }\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 463,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 462,\n columnNumber: 13\n }, this),\n !showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>fillAnswer && setShowResult(true),\n disabled: !fillAnswer,\n className: \"w-full py-3 bg-primary text-white rounded-lg font-medium hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: \"提交答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 479,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `p-4 rounded-lg ${fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'bg-green-50 border-2 border-green-500' : 'bg-red-50 border-2 border-red-500'}`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `font-semibold ${fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'text-green-700' : 'text-red-700'}`,\n children: fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? '✓ 正確!' : '✗ 錯誤'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 496,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 495,\n columnNumber: 17\n }, this),\n fillAnswer.toLowerCase() !== currentCard.word.toLowerCase() && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-700\",\n children: [\n \"正確答案:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-bold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 506,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 505,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-semibold mb-1\",\n children: \"完整例句:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 510,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 511,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 512,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 509,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 490,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 408,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 390,\n columnNumber: 11\n }, this) : mode === 'listening' ? /* Listening Test Mode - 聽力測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 532,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 531,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 523,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 522,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"聽音頻,選擇正確的單字\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 540,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setAudioPlaying(true);\n // Simulate audio playing\n setTimeout(()=>setAudioPlaying(false), 2000);\n },\n className: \"mx-auto mb-6 p-8 bg-gray-100 rounded-full hover:bg-gray-200 transition-colors\",\n children: audioPlaying ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-primary animate-pulse\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 553,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 552,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-gray-600\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 557,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 558,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 556,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 543,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500\",\n children: \"點擊播放按鈕聽發音\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 563,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 539,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-3\",\n children: [\n currentCard.word,\n 'determine',\n 'achieve',\n 'consider'\n ].map((word)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(word),\n disabled: showResult,\n className: `p-4 text-lg font-medium rounded-lg border-2 transition-all ${showResult && word === currentCard.word ? 'border-green-500 bg-green-50' : showResult && word === selectedAnswer && word !== currentCard.word ? 'border-red-500 bg-red-50' : selectedAnswer === word ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'}`,\n children: word\n }, word, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 569,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 567,\n columnNumber: 13\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-gray-50 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-2\",\n children: \"單字詳情\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 591,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 594,\n columnNumber: 21\n }, this),\n \" - \",\n currentCard.translation\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 593,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 596,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 italic\",\n children: [\n '\"',\n currentCard.example,\n '\"'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 597,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 592,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 590,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 538,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 520,\n columnNumber: 11\n }, this) : mode === 'speaking' ? /* Speaking Test Mode - 口說測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 617,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 616,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 608,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 607,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"念出以下例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 625,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 bg-gray-50 rounded-lg mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed mb-3\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 629,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 632,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 628,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"重點單字發音:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 639,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold text-lg\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 641,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 642,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-primary hover:text-primary-hover\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 645,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 644,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 643,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 640,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 638,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setIsRecording(!isRecording);\n if (!isRecording) {\n // Start recording\n setTimeout(()=>{\n setIsRecording(false);\n setShowResult(true);\n }, 3000);\n }\n },\n className: `p-6 rounded-full transition-all ${isRecording ? 'bg-red-500 hover:bg-red-600 animate-pulse' : 'bg-primary hover:bg-primary-hover'}`,\n children: isRecording ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 672,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 673,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 671,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 677,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 676,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 653,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: isRecording ? '錄音中... 點擊停止' : '點擊開始錄音'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 681,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 652,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-green-50 border-2 border-green-500 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-green-700 font-semibold mb-2\",\n children: \"✓ 完成口說練習!\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 689,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: \"提示:持續練習可以提高發音準確度和流暢度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 692,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 688,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 624,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 623,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 605,\n columnNumber: 11\n }, this) : null,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handlePrevious,\n disabled: currentCardIndex === 0,\n className: \"flex items-center space-x-2 px-6 py-3 bg-white rounded-lg shadow-sm hover:shadow-md transition-shadow disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 19l-7-7 7-7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 710,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 709,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"上一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 712,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 704,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleNext,\n disabled: currentCardIndex === cards.length - 1,\n className: \"flex items-center space-x-2 px-6 py-3 bg-primary text-white rounded-lg shadow-sm hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"下一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 720,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 5l7 7-7 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 722,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 721,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 715,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 703,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 130,\n columnNumber: 7\n }, this),\n modalImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-75 p-4\",\n onClick: ()=>setModalImage(null),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative max-w-4xl max-h-[90vh] bg-white rounded-lg overflow-hidden\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setModalImage(null),\n className: \"absolute top-2 right-2 z-10 p-2 bg-white bg-opacity-90 rounded-full hover:bg-opacity-100 transition-all shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-gray-700\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 744,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 743,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 739,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: modalImage,\n alt: \"Example context enlarged\",\n className: \"w-full h-full object-contain\",\n style: {\n maxHeight: 'calc(90vh - 2rem)'\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 750,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 749,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 734,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 730,\n columnNumber: 9\n }, this),\n showReportModal && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4\",\n onClick: ()=>setShowReportModal(false),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-xl max-w-md w-full p-6\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: \"回報錯誤\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 772,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowReportModal(false),\n className: \"text-gray-400 hover:text-gray-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 778,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 777,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 773,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 771,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"詞卡:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: reportingCard?.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 785,\n columnNumber: 20\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 784,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"測驗模式:\",\n mode === 'flip' ? '翻卡模式' : mode === 'quiz' ? '選擇題' : mode === 'fill' ? '填空題' : mode === 'listening' ? '聽力測試' : '口說測試'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 787,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 783,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"錯誤原因(選填)\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 793,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n value: reportReason,\n onChange: (e)=>setReportReason(e.target.value),\n placeholder: \"請描述錯誤內容...\",\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-primary focus:border-primary\",\n rows: 3\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 796,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 792,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // Submit error report\n console.log('Error reported:', {\n card: reportingCard,\n mode,\n reason: reportReason\n });\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n // Show success message (could add a toast notification here)\n alert('感謝您的回報,我們會盡快處理!');\n },\n className: \"flex-1 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-hover transition-colors\",\n children: \"送出回報\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 806,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n },\n className: \"flex-1 px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition-colors\",\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 824,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 805,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 767,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 763,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 123,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9hcHAvbGVhcm4vcGFnZS50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFZ0M7QUFFVztBQUNTO0FBRXJDLFNBQVNHO0lBQ3RCLE1BQU1DLFNBQVNILDBEQUFTQTtJQUN4QixNQUFNLENBQUNJLGtCQUFrQkMsb0JBQW9CLEdBQUdOLCtDQUFRQSxDQUFDO0lBQ3pELE1BQU0sQ0FBQ08sV0FBV0MsYUFBYSxHQUFHUiwrQ0FBUUEsQ0FBQztJQUMzQyxNQUFNLENBQUNTLE1BQU1DLFFBQVEsR0FBR1YsK0NBQVFBLENBQXNEO0lBQ3RGLE1BQU0sQ0FBQ1csT0FBT0MsU0FBUyxHQUFHWiwrQ0FBUUEsQ0FBQztRQUFFYSxTQUFTO1FBQUdDLE9BQU87SUFBRTtJQUMxRCxNQUFNLENBQUNDLGdCQUFnQkMsa0JBQWtCLEdBQUdoQiwrQ0FBUUEsQ0FBZ0I7SUFDcEUsTUFBTSxDQUFDaUIsWUFBWUMsY0FBYyxHQUFHbEIsK0NBQVFBLENBQUM7SUFDN0MsTUFBTSxDQUFDbUIsWUFBWUMsY0FBYyxHQUFHcEIsK0NBQVFBLENBQUM7SUFDN0MsTUFBTSxDQUFDcUIsVUFBVUMsWUFBWSxHQUFHdEIsK0NBQVFBLENBQUM7SUFDekMsTUFBTSxDQUFDdUIsYUFBYUMsZUFBZSxHQUFHeEIsK0NBQVFBLENBQUM7SUFDL0MsTUFBTSxDQUFDeUIsY0FBY0MsZ0JBQWdCLEdBQUcxQiwrQ0FBUUEsQ0FBQztJQUNqRCxNQUFNLENBQUMyQixZQUFZQyxjQUFjLEdBQUc1QiwrQ0FBUUEsQ0FBZ0I7SUFDNUQsTUFBTSxDQUFDNkIsaUJBQWlCQyxtQkFBbUIsR0FBRzlCLCtDQUFRQSxDQUFDO0lBQ3ZELE1BQU0sQ0FBQytCLGNBQWNDLGdCQUFnQixHQUFHaEMsK0NBQVFBLENBQUM7SUFDakQsTUFBTSxDQUFDaUMsZUFBZUMsaUJBQWlCLEdBQUdsQywrQ0FBUUEsQ0FBTTtJQUV4RCxxQ0FBcUM7SUFDckMsTUFBTW1DLFFBQVE7UUFDWjtZQUNFQyxJQUFJO1lBQ0pDLE1BQU07WUFDTkMsY0FBYztZQUNkQyxlQUFlO1lBQ2ZDLGFBQWE7WUFDYkMsWUFBWTtZQUNaQyxTQUFTO1lBQ1RDLG9CQUFvQjtZQUNwQkMsY0FBYztZQUNkQyxVQUFVO2dCQUFDO2dCQUFhO2dCQUFVO2FBQWE7WUFDL0NDLFlBQVk7UUFDZDtRQUNBO1lBQ0VWLElBQUk7WUFDSkMsTUFBTTtZQUNOQyxjQUFjO1lBQ2RDLGVBQWU7WUFDZkMsYUFBYTtZQUNiQyxZQUFZO1lBQ1pDLFNBQVM7WUFDVEMsb0JBQW9CO1lBQ3BCQyxjQUFjO1lBQ2RDLFVBQVU7Z0JBQUM7Z0JBQWE7Z0JBQVc7YUFBVztZQUM5Q0MsWUFBWTtRQUNkO1FBQ0E7WUFDRVYsSUFBSTtZQUNKQyxNQUFNO1lBQ05DLGNBQWM7WUFDZEMsZUFBZTtZQUNmQyxhQUFhO1lBQ2JDLFlBQVk7WUFDWkMsU0FBUztZQUNUQyxvQkFBb0I7WUFDcEJDLGNBQWM7WUFDZEMsVUFBVTtnQkFBQztnQkFBaUI7Z0JBQVU7YUFBVTtZQUNoREMsWUFBWTtRQUNkO0tBQ0Q7SUFFRCxNQUFNQyxjQUFjWixLQUFLLENBQUM5QixpQkFBaUI7SUFFM0MsOERBQThEO0lBQzlELE1BQU0yQyxjQUFjO1FBQ2xCYixLQUFLLENBQUM5QixpQkFBaUIsQ0FBQ21DLFdBQVc7V0FDaENMLE1BQ0FjLE1BQU0sQ0FBQyxDQUFDQyxHQUFHQyxNQUFRQSxRQUFROUMsa0JBQzNCK0MsR0FBRyxDQUFDQyxDQUFBQSxPQUFRQSxLQUFLYixXQUFXLEVBQzVCYyxLQUFLLENBQUMsR0FBRztRQUNaLFFBQVEsMEJBQTBCO0tBQ25DLENBQUNDLElBQUksQ0FBQyxJQUFNQyxLQUFLQyxNQUFNLEtBQUssS0FBSyxrQkFBa0I7O0lBRXBELE1BQU1DLGFBQWE7UUFDakJsRCxhQUFhLENBQUNEO0lBQ2hCO0lBRUEsTUFBTW9ELGFBQWE7UUFDakIsSUFBSXRELG1CQUFtQjhCLE1BQU15QixNQUFNLEdBQUcsR0FBRztZQUN2Q3RELG9CQUFvQkQsbUJBQW1CO1lBQ3ZDRyxhQUFhO1lBQ2JRLGtCQUFrQjtZQUNsQkUsY0FBYztZQUNkRSxjQUFjO1lBQ2RFLFlBQVk7UUFDZDtJQUNGO0lBRUEsTUFBTXVDLGlCQUFpQjtRQUNyQixJQUFJeEQsbUJBQW1CLEdBQUc7WUFDeEJDLG9CQUFvQkQsbUJBQW1CO1lBQ3ZDRyxhQUFhO1lBQ2JRLGtCQUFrQjtZQUNsQkUsY0FBYztZQUNkRSxjQUFjO1lBQ2RFLFlBQVk7UUFDZDtJQUNGO0lBRUEsTUFBTXdDLHVCQUF1QixDQUFDQztRQUM1QixvQkFBb0I7UUFDcEJDLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRUYsT0FBTyxLQUFLLEVBQUVoQixZQUFZVixJQUFJLEVBQUU7UUFDckRzQjtJQUNGO0lBRUEsTUFBTU8sbUJBQW1CLENBQUNDO1FBQ3hCbkQsa0JBQWtCbUQ7UUFDbEJqRCxjQUFjO1FBQ2QsSUFBSWlELFdBQVdwQixZQUFZUCxXQUFXLEVBQUU7WUFDdEM1QixTQUFTO2dCQUFFLEdBQUdELEtBQUs7Z0JBQUVFLFNBQVNGLE1BQU1FLE9BQU8sR0FBRztnQkFBR0MsT0FBT0gsTUFBTUcsS0FBSyxHQUFHO1lBQUU7UUFDMUUsT0FBTztZQUNMRixTQUFTO2dCQUFFLEdBQUdELEtBQUs7Z0JBQUVHLE9BQU9ILE1BQU1HLEtBQUssR0FBRztZQUFFO1FBQzlDO0lBQ0Y7SUFFQSxxQkFDRSw4REFBQ3NEO1FBQUlDLFdBQVU7OzBCQUViLDhEQUFDbkUsOERBQVVBO2dCQUNUb0Usa0JBQWtCO2dCQUNsQkMsZ0JBQWdCLElBQU1uRSxPQUFPb0UsSUFBSSxDQUFDOzs7Ozs7MEJBR3BDLDhEQUFDSjtnQkFBSUMsV0FBVTs7a0NBRWIsOERBQUNEO3dCQUFJQyxXQUFVOzswQ0FDYiw4REFBQ0Q7Z0NBQUlDLFdBQVU7O2tEQUNiLDhEQUFDSTt3Q0FBS0osV0FBVTtrREFBd0I7Ozs7OztrREFDeEMsOERBQUNJO3dDQUFLSixXQUFVOzs0Q0FDYmhFLG1CQUFtQjs0Q0FBRTs0Q0FBSThCLE1BQU15QixNQUFNOzs7Ozs7Ozs7Ozs7OzBDQUcxQyw4REFBQ1E7Z0NBQUlDLFdBQVU7MENBQ2IsNEVBQUNEO29DQUNDQyxXQUFVO29DQUNWSyxPQUFPO3dDQUFFQyxPQUFPLEdBQUcsQ0FBRXRFLG1CQUFtQixLQUFLOEIsTUFBTXlCLE1BQU0sR0FBSSxJQUFJLENBQUMsQ0FBQztvQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBTTFFLDhEQUFDUTt3QkFBSUMsV0FBVTtrQ0FDYiw0RUFBQ0Q7NEJBQUlDLFdBQVU7OzhDQUNiLDhEQUFDTztvQ0FDQ0MsU0FBUyxJQUFNbkUsUUFBUTtvQ0FDdkIyRCxXQUFXLENBQUMsdUNBQXVDLEVBQ2pENUQsU0FBUyxTQUNMLDBCQUNBLHFDQUNKOzhDQUNIOzs7Ozs7OENBR0QsOERBQUNtRTtvQ0FDQ0MsU0FBUyxJQUFNbkUsUUFBUTtvQ0FDdkIyRCxXQUFXLENBQUMsdUNBQXVDLEVBQ2pENUQsU0FBUyxTQUNMLDBCQUNBLHFDQUNKOzhDQUNIOzs7Ozs7OENBR0QsOERBQUNtRTtvQ0FDQ0MsU0FBUyxJQUFNbkUsUUFBUTtvQ0FDdkIyRCxXQUFXLENBQUMsdUNBQXVDLEVBQ2pENUQsU0FBUyxTQUNMLDBCQUNBLHFDQUNKOzhDQUNIOzs7Ozs7OENBR0QsOERBQUNtRTtvQ0FDQ0MsU0FBUyxJQUFNbkUsUUFBUTtvQ0FDdkIyRCxXQUFXLENBQUMsdUNBQXVDLEVBQ2pENUQsU0FBUyxjQUNMLDBCQUNBLHFDQUNKOzhDQUNIOzs7Ozs7OENBR0QsOERBQUNtRTtvQ0FDQ0MsU0FBUyxJQUFNbkUsUUFBUTtvQ0FDdkIyRCxXQUFXLENBQUMsdUNBQXVDLEVBQ2pENUQsU0FBUyxhQUNMLDBCQUNBLHFDQUNKOzhDQUNIOzs7Ozs7Ozs7Ozs7Ozs7OztvQkFNSkEsU0FBUyxTQUNSLGtCQUFrQixpQkFDbEIsOERBQUMyRDt3QkFBSUMsV0FBVTs7MENBRWIsOERBQUNEO2dDQUFJQyxXQUFVOzBDQUNiLDRFQUFDTztvQ0FDQ0MsU0FBUzt3Q0FDUDNDLGlCQUFpQmE7d0NBQ2pCakIsbUJBQW1CO29DQUNyQjtvQ0FDQXVDLFdBQVU7b0NBQ1ZTLE9BQU07O3NEQUVOLDhEQUFDQzs0Q0FBSVYsV0FBVTs0Q0FBVVcsTUFBSzs0Q0FBT0MsUUFBTzs0Q0FBZUMsU0FBUTtzREFDakUsNEVBQUNDO2dEQUFLQyxlQUFjO2dEQUFRQyxnQkFBZTtnREFBUUMsYUFBYTtnREFBR0MsR0FBRTs7Ozs7Ozs7Ozs7d0NBQ2pFOzs7Ozs7Ozs7Ozs7MENBS1YsOERBQUNuQjtnQ0FDQ0MsV0FBVTtnQ0FDVlEsU0FBU25CO2dDQUNUZ0IsT0FBTztvQ0FBRWMsYUFBYTtnQ0FBUzswQ0FFL0IsNEVBQUNwQjtvQ0FDQ0MsV0FBVyxDQUFDLHlEQUF5RCxFQUNuRTlELFlBQVksaUJBQWlCLElBQzdCO29DQUNGbUUsT0FBTzt3Q0FDTGUsZ0JBQWdCO3dDQUNoQkMsV0FBV25GLFlBQVksb0JBQW9CO29DQUM3Qzs7c0RBR0EsOERBQUM2RDs0Q0FDQ0MsV0FBVTs0Q0FDVkssT0FBTztnREFBRWlCLG9CQUFvQjs0Q0FBUzs7OERBRXRDLDhEQUFDdkI7b0RBQUlDLFdBQVU7OERBQ1p0QixZQUFZVixJQUFJOzs7Ozs7OERBRW5CLDhEQUFDK0I7b0RBQUlDLFdBQVU7OERBQ1p0QixZQUFZVCxZQUFZOzs7Ozs7OERBRTNCLDhEQUFDOEI7b0RBQUlDLFdBQVU7OERBQ1p0QixZQUFZUixhQUFhOzs7Ozs7OERBRTVCLDhEQUFDNkI7b0RBQUlDLFdBQVU7OERBQTZCOzs7Ozs7Ozs7Ozs7c0RBTTlDLDhEQUFDRDs0Q0FDQ0MsV0FBVTs0Q0FDVkssT0FBTztnREFDTGlCLG9CQUFvQjtnREFDcEJELFdBQVc7NENBQ2I7c0RBRUEsNEVBQUN0QjtnREFBSUMsV0FBVTs7a0VBQ2IsOERBQUNEOzswRUFDQyw4REFBQ0E7Z0VBQUlDLFdBQVU7MEVBQTJDOzs7Ozs7MEVBQzFELDhEQUFDRDtnRUFBSUMsV0FBVTswRUFBb0N0QixZQUFZUCxXQUFXOzs7Ozs7Ozs7Ozs7a0VBRTVFLDhEQUFDNEI7OzBFQUNDLDhEQUFDQTtnRUFBSUMsV0FBVTswRUFBMkM7Ozs7OzswRUFDMUQsOERBQUNEO2dFQUFJQyxXQUFVOzBFQUFpQnRCLFlBQVlOLFVBQVU7Ozs7Ozs7Ozs7OztrRUFFeEQsOERBQUMyQjs7MEVBQ0MsOERBQUNBO2dFQUFJQyxXQUFVOzBFQUEyQzs7Ozs7OzBFQUMxRCw4REFBQ0Q7Z0VBQUlDLFdBQVU7MEVBQWlCdEIsWUFBWUwsT0FBTzs7Ozs7OzBFQUNuRCw4REFBQzBCO2dFQUFJQyxXQUFVOzBFQUE4QnRCLFlBQVlKLGtCQUFrQjs7Ozs7Ozs7Ozs7O2tFQUU3RSw4REFBQ3lCOzswRUFDQyw4REFBQ0E7Z0VBQUlDLFdBQVU7MEVBQTJDOzs7Ozs7MEVBQzFELDhEQUFDRDtnRUFBSUMsV0FBVTswRUFDWnRCLFlBQVlGLFFBQVEsQ0FBQ08sR0FBRyxDQUFDLENBQUN3QyxLQUFLekMsb0JBQzlCLDhEQUFDc0I7d0VBQWVKLFdBQVU7a0ZBQ3ZCdUI7dUVBRFF6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBWXhCNUMsMkJBQ0MsOERBQUM2RDtnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNEO3dDQUFJQyxXQUFVO2tEQUNiLDRFQUFDSTs0Q0FBS0osV0FBVTtzREFBZ0I7Ozs7Ozs7Ozs7O2tEQUVsQyw4REFBQ0Q7d0NBQUlDLFdBQVU7OzBEQUNiLDhEQUFDTztnREFDQ0MsU0FBUyxJQUFNZixxQkFBcUI7Z0RBQ3BDTyxXQUFVOzBEQUNYOzs7Ozs7MERBR0QsOERBQUNPO2dEQUNDQyxTQUFTLElBQU1mLHFCQUFxQjtnREFDcENPLFdBQVU7MERBQ1g7Ozs7OzswREFHRCw4REFBQ087Z0RBQ0NDLFNBQVMsSUFBTWYscUJBQXFCO2dEQUNwQ08sV0FBVTswREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0JBT1A1RCxTQUFTLFNBQ1gsNkJBQTZCLGlCQUM3Qiw4REFBQzJEO3dCQUFJQyxXQUFVOzswQ0FFYiw4REFBQ0Q7Z0NBQUlDLFdBQVU7MENBQ2IsNEVBQUNPO29DQUNDQyxTQUFTO3dDQUNQM0MsaUJBQWlCYTt3Q0FDakJqQixtQkFBbUI7b0NBQ3JCO29DQUNBdUMsV0FBVTtvQ0FDVlMsT0FBTTs7c0RBRU4sOERBQUNDOzRDQUFJVixXQUFVOzRDQUFVVyxNQUFLOzRDQUFPQyxRQUFPOzRDQUFlQyxTQUFRO3NEQUNqRSw0RUFBQ0M7Z0RBQUtDLGVBQWM7Z0RBQVFDLGdCQUFlO2dEQUFRQyxhQUFhO2dEQUFHQyxHQUFFOzs7Ozs7Ozs7Ozt3Q0FDakU7Ozs7Ozs7Ozs7OzswQ0FLViw4REFBQ25CO2dDQUFJQyxXQUFVOztrREFDYiw4REFBQ0Q7d0NBQUlDLFdBQVU7OzBEQUNiLDhEQUFDRDtnREFBSUMsV0FBVTswREFBNkI7Ozs7OzswREFDNUMsOERBQUNEO2dEQUFJQyxXQUFVOzBEQUNadEIsWUFBWU4sVUFBVTs7Ozs7OzBEQUV6Qiw4REFBQzJCO2dEQUFJQyxXQUFVOztvREFBNkI7b0RBQ3hDdEIsWUFBWVQsWUFBWTtvREFBQzs7Ozs7Ozs7Ozs7OztrREFJakMsOERBQUM4Qjt3Q0FBSUMsV0FBVTtrREFDWnJCLFlBQVlJLEdBQUcsQ0FBQyxDQUFDeUMsUUFBUTFDLG9CQUN4Qiw4REFBQ3lCO2dEQUVDQyxTQUFTLElBQU0sQ0FBQzVELGNBQWNpRCxpQkFBaUIyQjtnREFDL0NDLFVBQVU3RTtnREFDVm9ELFdBQVcsQ0FBQyx3REFBd0QsRUFDbEVwRCxjQUFjNEUsV0FBVzlDLFlBQVlQLFdBQVcsR0FDNUMsaUNBQ0F2QixjQUFjNEUsV0FBVzlFLGtCQUFrQjhFLFdBQVc5QyxZQUFZUCxXQUFXLEdBQzdFLDZCQUNBekIsbUJBQW1COEUsU0FDbkIsb0NBQ0EseUNBQ0o7MERBRUYsNEVBQUN6QjtvREFBSUMsV0FBVTs7c0VBQ2IsOERBQUNJOzREQUFLSixXQUFVO3NFQUFld0I7Ozs7Ozt3REFDOUI1RSxjQUFjNEUsV0FBVzlDLFlBQVlQLFdBQVcsa0JBQy9DLDhEQUFDdUM7NERBQUlWLFdBQVU7NERBQXlCVyxNQUFLOzREQUFPQyxRQUFPOzREQUFlQyxTQUFRO3NFQUNoRiw0RUFBQ0M7Z0VBQUtDLGVBQWM7Z0VBQVFDLGdCQUFlO2dFQUFRQyxhQUFhO2dFQUFHQyxHQUFFOzs7Ozs7Ozs7Ozt3REFHeEV0RSxjQUFjNEUsV0FBVzlFLGtCQUFrQjhFLFdBQVc5QyxZQUFZUCxXQUFXLGtCQUM1RSw4REFBQ3VDOzREQUFJVixXQUFVOzREQUF1QlcsTUFBSzs0REFBT0MsUUFBTzs0REFBZUMsU0FBUTtzRUFDOUUsNEVBQUNDO2dFQUFLQyxlQUFjO2dFQUFRQyxnQkFBZTtnRUFBUUMsYUFBYTtnRUFBR0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7K0NBdEJ0RXBDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0JBZ0NYMUMsU0FBUyxTQUNYLGdDQUFnQyxpQkFDaEMsOERBQUMyRDt3QkFBSUMsV0FBVTs7MENBRWIsOERBQUNEO2dDQUFJQyxXQUFVOzBDQUNiLDRFQUFDTztvQ0FDQ0MsU0FBUzt3Q0FDUDNDLGlCQUFpQmE7d0NBQ2pCakIsbUJBQW1CO29DQUNyQjtvQ0FDQXVDLFdBQVU7b0NBQ1ZTLE9BQU07O3NEQUVOLDhEQUFDQzs0Q0FBSVYsV0FBVTs0Q0FBVVcsTUFBSzs0Q0FBT0MsUUFBTzs0Q0FBZUMsU0FBUTtzREFDakUsNEVBQUNDO2dEQUFLQyxlQUFjO2dEQUFRQyxnQkFBZTtnREFBUUMsYUFBYTtnREFBR0MsR0FBRTs7Ozs7Ozs7Ozs7d0NBQ2pFOzs7Ozs7Ozs7Ozs7MENBS1YsOERBQUNuQjtnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNEO3dDQUFJQyxXQUFVOzswREFDYiw4REFBQ0Q7Z0RBQUlDLFdBQVU7MERBQTZCOzs7Ozs7NENBRzdDdEIsWUFBWUgsWUFBWSxrQkFDdkIsOERBQUN3QjtnREFBSUMsV0FBVTs7a0VBQ2IsOERBQUMwQjt3REFDQ0MsS0FBS2pELFlBQVlILFlBQVk7d0RBQzdCcUQsS0FBSTt3REFDSjVCLFdBQVU7d0RBQ1ZLLE9BQU87NERBQUV3QixXQUFXOzREQUFTQyxXQUFXO3dEQUFVO3dEQUNsRHRCLFNBQVMsSUFBTWpELGNBQWNtQixZQUFZSCxZQUFZOzs7Ozs7a0VBRXZELDhEQUFDd0I7d0RBQUlDLFdBQVU7a0VBQXlDOzs7Ozs7Ozs7Ozs7MERBSzVELDhEQUFDRDtnREFBSUMsV0FBVTswREFDWnRCLFlBQVlMLE9BQU8sQ0FBQzBELEtBQUssQ0FBQ3JELFlBQVlWLElBQUksRUFBRWUsR0FBRyxDQUFDLENBQUNpRCxNQUFNQyxrQkFDdEQsOERBQUM3Qjs7NERBQ0U0Qjs0REFDQUMsSUFBSXZELFlBQVlMLE9BQU8sQ0FBQzBELEtBQUssQ0FBQ3JELFlBQVlWLElBQUksRUFBRXVCLE1BQU0sR0FBRyxtQkFDeEQsOERBQUNhO2dFQUFLSixXQUFVOzs7Ozs7O3VEQUhUaUM7Ozs7Ozs7Ozs7NENBVWQsQ0FBQ2pGLDBCQUNBLDhEQUFDdUQ7Z0RBQ0NDLFNBQVMsSUFBTXZELFlBQVk7Z0RBQzNCK0MsV0FBVTs7a0VBRVYsOERBQUNVO3dEQUFJVixXQUFVO3dEQUFVVyxNQUFLO3dEQUFPQyxRQUFPO3dEQUFlQyxTQUFRO2tFQUNqRSw0RUFBQ0M7NERBQUtDLGVBQWM7NERBQVFDLGdCQUFlOzREQUFRQyxhQUFhOzREQUFHQyxHQUFFOzs7Ozs7Ozs7OztvREFDakU7Ozs7Ozs7NENBTVRsRSwwQkFDQyw4REFBQytDO2dEQUFJQyxXQUFVOzBEQUNiLDRFQUFDRDtvREFBSUMsV0FBVTs7c0VBQ2IsOERBQUNrQztzRUFBTzs7Ozs7O3dEQUFjO3dEQUFFeEQsWUFBWU4sVUFBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tEQU90RCw4REFBQzJCO3dDQUFJQyxXQUFVO2tEQUNiLDRFQUFDbUM7NENBQ0NDLE1BQUs7NENBQ0xDLE9BQU92Rjs0Q0FDUHdGLFVBQVUsQ0FBQ0MsSUFBTXhGLGNBQWN3RixFQUFFQyxNQUFNLENBQUNILEtBQUs7NENBQzdDSSxhQUFZOzRDQUNaekMsV0FBVTs0Q0FDVjBDLFlBQVksQ0FBQ0g7Z0RBQ1gsSUFBSUEsRUFBRUksR0FBRyxLQUFLLFdBQVc3RixZQUFZO29EQUNuQ0QsY0FBYztnREFDaEI7NENBQ0Y7Ozs7Ozs7Ozs7O29DQUtILENBQUNELDRCQUNBLDhEQUFDMkQ7d0NBQ0NDLFNBQVMsSUFBTTFELGNBQWNELGNBQWM7d0NBQzNDNEUsVUFBVSxDQUFDM0U7d0NBQ1hrRCxXQUFVO2tEQUNYOzs7Ozs7b0NBTUZwRCw0QkFDQyw4REFBQ21EO3dDQUFJQyxXQUFXLENBQUMsZUFBZSxFQUM5QmxELFdBQVc4RixXQUFXLE9BQU9sRSxZQUFZVixJQUFJLENBQUM0RSxXQUFXLEtBQ3JELDBDQUNBLHFDQUNKOzswREFDQSw4REFBQzdDO2dEQUFJQyxXQUFVOzBEQUNiLDRFQUFDSTtvREFBS0osV0FBVyxDQUFDLGNBQWMsRUFDOUJsRCxXQUFXOEYsV0FBVyxPQUFPbEUsWUFBWVYsSUFBSSxDQUFDNEUsV0FBVyxLQUNyRCxtQkFDQSxnQkFDSjs4REFDQzlGLFdBQVc4RixXQUFXLE9BQU9sRSxZQUFZVixJQUFJLENBQUM0RSxXQUFXLEtBQUssVUFBVTs7Ozs7Ozs7Ozs7NENBRzVFOUYsV0FBVzhGLFdBQVcsT0FBT2xFLFlBQVlWLElBQUksQ0FBQzRFLFdBQVcsb0JBQ3hELDhEQUFDN0M7Z0RBQUlDLFdBQVU7O29EQUF3QjtrRUFDaEMsOERBQUNJO3dEQUFLSixXQUFVO2tFQUFhdEIsWUFBWVYsSUFBSTs7Ozs7Ozs7Ozs7OzBEQUd0RCw4REFBQytCO2dEQUFJQyxXQUFVOztrRUFDYiw4REFBQ0Q7d0RBQUlDLFdBQVU7a0VBQXFCOzs7Ozs7a0VBQ3BDLDhEQUFDRDtrRUFBS3JCLFlBQVlMLE9BQU87Ozs7OztrRUFDekIsOERBQUMwQjt3REFBSUMsV0FBVTtrRUFBc0J0QixZQUFZSixrQkFBa0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytCQU16RWxDLFNBQVMsY0FDWCw4QkFBOEIsaUJBQzlCLDhEQUFDMkQ7d0JBQUlDLFdBQVU7OzBDQUViLDhEQUFDRDtnQ0FBSUMsV0FBVTswQ0FDYiw0RUFBQ087b0NBQ0NDLFNBQVM7d0NBQ1AzQyxpQkFBaUJhO3dDQUNqQmpCLG1CQUFtQjtvQ0FDckI7b0NBQ0F1QyxXQUFVO29DQUNWUyxPQUFNOztzREFFTiw4REFBQ0M7NENBQUlWLFdBQVU7NENBQVVXLE1BQUs7NENBQU9DLFFBQU87NENBQWVDLFNBQVE7c0RBQ2pFLDRFQUFDQztnREFBS0MsZUFBYztnREFBUUMsZ0JBQWU7Z0RBQVFDLGFBQWE7Z0RBQUdDLEdBQUU7Ozs7Ozs7Ozs7O3dDQUNqRTs7Ozs7Ozs7Ozs7OzBDQUtWLDhEQUFDbkI7Z0NBQUlDLFdBQVU7O2tEQUNiLDhEQUFDRDt3Q0FBSUMsV0FBVTs7MERBQ2IsOERBQUNEO2dEQUFJQyxXQUFVOzBEQUE2Qjs7Ozs7OzBEQUc5Qyw4REFBQ087Z0RBQ0NDLFNBQVM7b0RBQ1BuRCxnQkFBZ0I7b0RBQ2hCLHlCQUF5QjtvREFDekJ3RixXQUFXLElBQU14RixnQkFBZ0IsUUFBUTtnREFDM0M7Z0RBQ0EyQyxXQUFVOzBEQUVUNUMsNkJBQ0MsOERBQUNzRDtvREFBSVYsV0FBVTtvREFBdUNXLE1BQUs7b0RBQU9DLFFBQU87b0RBQWVDLFNBQVE7OERBQzlGLDRFQUFDQzt3REFBS0MsZUFBYzt3REFBUUMsZ0JBQWU7d0RBQVFDLGFBQWE7d0RBQUdDLEdBQUU7Ozs7Ozs7Ozs7eUVBR3ZFLDhEQUFDUjtvREFBSVYsV0FBVTtvREFBMEJXLE1BQUs7b0RBQU9DLFFBQU87b0RBQWVDLFNBQVE7O3NFQUNqRiw4REFBQ0M7NERBQUtDLGVBQWM7NERBQVFDLGdCQUFlOzREQUFRQyxhQUFhOzREQUFHQyxHQUFFOzs7Ozs7c0VBQ3JFLDhEQUFDSjs0REFBS0MsZUFBYzs0REFBUUMsZ0JBQWU7NERBQVFDLGFBQWE7NERBQUdDLEdBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7OzBEQUszRSw4REFBQ25CO2dEQUFJQyxXQUFVOzBEQUF3Qjs7Ozs7Ozs7Ozs7O2tEQUl6Qyw4REFBQ0Q7d0NBQUlDLFdBQVU7a0RBQ1o7NENBQUN0QixZQUFZVixJQUFJOzRDQUFFOzRDQUFhOzRDQUFXO3lDQUFXLENBQUNlLEdBQUcsQ0FBQyxDQUFDZixxQkFDM0QsOERBQUN1QztnREFFQ0MsU0FBUyxJQUFNLENBQUM1RCxjQUFjaUQsaUJBQWlCN0I7Z0RBQy9DeUQsVUFBVTdFO2dEQUNWb0QsV0FBVyxDQUFDLDJEQUEyRCxFQUNyRXBELGNBQWNvQixTQUFTVSxZQUFZVixJQUFJLEdBQ25DLGlDQUNBcEIsY0FBY29CLFNBQVN0QixrQkFBa0JzQixTQUFTVSxZQUFZVixJQUFJLEdBQ2xFLDZCQUNBdEIsbUJBQW1Cc0IsT0FDbkIsb0NBQ0EseUNBQ0o7MERBRURBOytDQWJJQTs7Ozs7Ozs7OztvQ0FtQlZwQiw0QkFDQyw4REFBQ21EO3dDQUFJQyxXQUFVOzswREFDYiw4REFBQ0Q7Z0RBQUlDLFdBQVU7MERBQTJDOzs7Ozs7MERBQzFELDhEQUFDRDtnREFBSUMsV0FBVTs7a0VBQ2IsOERBQUNEOzswRUFDQyw4REFBQ0s7Z0VBQUtKLFdBQVU7MEVBQWlCdEIsWUFBWVYsSUFBSTs7Ozs7OzREQUFROzREQUFJVSxZQUFZUCxXQUFXOzs7Ozs7O2tFQUV0Riw4REFBQzRCO3dEQUFJQyxXQUFVO2tFQUF5QnRCLFlBQVlOLFVBQVU7Ozs7OztrRUFDOUQsOERBQUMyQjt3REFBSUMsV0FBVTs7NERBQStCOzREQUFFdEIsWUFBWUwsT0FBTzs0REFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytCQU0xRWpDLFNBQVMsYUFDWCw2QkFBNkIsaUJBQzdCLDhEQUFDMkQ7d0JBQUlDLFdBQVU7OzBDQUViLDhEQUFDRDtnQ0FBSUMsV0FBVTswQ0FDYiw0RUFBQ087b0NBQ0NDLFNBQVM7d0NBQ1AzQyxpQkFBaUJhO3dDQUNqQmpCLG1CQUFtQjtvQ0FDckI7b0NBQ0F1QyxXQUFVO29DQUNWUyxPQUFNOztzREFFTiw4REFBQ0M7NENBQUlWLFdBQVU7NENBQVVXLE1BQUs7NENBQU9DLFFBQU87NENBQWVDLFNBQVE7c0RBQ2pFLDRFQUFDQztnREFBS0MsZUFBYztnREFBUUMsZ0JBQWU7Z0RBQVFDLGFBQWE7Z0RBQUdDLEdBQUU7Ozs7Ozs7Ozs7O3dDQUNqRTs7Ozs7Ozs7Ozs7OzBDQUtWLDhEQUFDbkI7Z0NBQUlDLFdBQVU7MENBQ2IsNEVBQUNEO29DQUFJQyxXQUFVOztzREFDYiw4REFBQ0Q7NENBQUlDLFdBQVU7c0RBQTZCOzs7Ozs7c0RBRzlDLDhEQUFDRDs0Q0FBSUMsV0FBVTs7OERBQ2IsOERBQUNEO29EQUFJQyxXQUFVOzhEQUNadEIsWUFBWUwsT0FBTzs7Ozs7OzhEQUV0Qiw4REFBQzBCO29EQUFJQyxXQUFVOzhEQUNadEIsWUFBWUosa0JBQWtCOzs7Ozs7Ozs7Ozs7c0RBS25DLDhEQUFDeUI7NENBQUlDLFdBQVU7OzhEQUNiLDhEQUFDRDtvREFBSUMsV0FBVTs4REFBNkI7Ozs7Ozs4REFDNUMsOERBQUNEO29EQUFJQyxXQUFVOztzRUFDYiw4REFBQ0k7NERBQUtKLFdBQVU7c0VBQXlCdEIsWUFBWVYsSUFBSTs7Ozs7O3NFQUN6RCw4REFBQ29DOzREQUFLSixXQUFVO3NFQUFpQnRCLFlBQVlSLGFBQWE7Ozs7OztzRUFDMUQsOERBQUNxQzs0REFBT1AsV0FBVTtzRUFDaEIsNEVBQUNVO2dFQUFJVixXQUFVO2dFQUFVVyxNQUFLO2dFQUFPQyxRQUFPO2dFQUFlQyxTQUFROzBFQUNqRSw0RUFBQ0M7b0VBQUtDLGVBQWM7b0VBQVFDLGdCQUFlO29FQUFRQyxhQUFhO29FQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NEQU83RSw4REFBQ25COzRDQUFJQyxXQUFVOzs4REFDYiw4REFBQ087b0RBQ0NDLFNBQVM7d0RBQ1ByRCxlQUFlLENBQUNEO3dEQUNoQixJQUFJLENBQUNBLGFBQWE7NERBQ2hCLGtCQUFrQjs0REFDbEIyRixXQUFXO2dFQUNUMUYsZUFBZTtnRUFDZk4sY0FBYzs0REFDaEIsR0FBRzt3REFDTDtvREFDRjtvREFDQW1ELFdBQVcsQ0FBQyxnQ0FBZ0MsRUFDMUM5QyxjQUNJLDhDQUNBLHFDQUNKOzhEQUVEQSw0QkFDQyw4REFBQ3dEO3dEQUFJVixXQUFVO3dEQUF1QlcsTUFBSzt3REFBT0MsUUFBTzt3REFBZUMsU0FBUTs7MEVBQzlFLDhEQUFDQztnRUFBS0MsZUFBYztnRUFBUUMsZ0JBQWU7Z0VBQVFDLGFBQWE7Z0VBQUdDLEdBQUU7Ozs7OzswRUFDckUsOERBQUNKO2dFQUFLQyxlQUFjO2dFQUFRQyxnQkFBZTtnRUFBUUMsYUFBYTtnRUFBR0MsR0FBRTs7Ozs7Ozs7Ozs7NkVBR3ZFLDhEQUFDUjt3REFBSVYsV0FBVTt3REFBdUJXLE1BQUs7d0RBQU9DLFFBQU87d0RBQWVDLFNBQVE7a0VBQzlFLDRFQUFDQzs0REFBS0MsZUFBYzs0REFBUUMsZ0JBQWU7NERBQVFDLGFBQWE7NERBQUdDLEdBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7OERBSTNFLDhEQUFDbkI7b0RBQUlDLFdBQVU7OERBQ1o5QyxjQUFjLGdCQUFnQjs7Ozs7Ozs7Ozs7O3dDQUtsQ04sNEJBQ0MsOERBQUNtRDs0Q0FBSUMsV0FBVTs7OERBQ2IsOERBQUNEO29EQUFJQyxXQUFVOzhEQUFvQzs7Ozs7OzhEQUduRCw4REFBQ0Q7b0RBQUlDLFdBQVU7OERBQXdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytCQVE3QztrQ0FHSiw4REFBQ0Q7d0JBQUlDLFdBQVU7OzBDQUNiLDhEQUFDTztnQ0FDQ0MsU0FBU2hCO2dDQUNUaUMsVUFBVXpGLHFCQUFxQjtnQ0FDL0JnRSxXQUFVOztrREFFViw4REFBQ1U7d0NBQUlWLFdBQVU7d0NBQVVXLE1BQUs7d0NBQU9DLFFBQU87d0NBQWVDLFNBQVE7a0RBQ2pFLDRFQUFDQzs0Q0FBS0MsZUFBYzs0Q0FBUUMsZ0JBQWU7NENBQVFDLGFBQWE7NENBQUdDLEdBQUU7Ozs7Ozs7Ozs7O2tEQUV2RSw4REFBQ2Q7a0RBQUs7Ozs7Ozs7Ozs7OzswQ0FHUiw4REFBQ0c7Z0NBQ0NDLFNBQVNsQjtnQ0FDVG1DLFVBQVV6RixxQkFBcUI4QixNQUFNeUIsTUFBTSxHQUFHO2dDQUM5Q1MsV0FBVTs7a0RBRVYsOERBQUNJO2tEQUFLOzs7Ozs7a0RBQ04sOERBQUNNO3dDQUFJVixXQUFVO3dDQUFVVyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQU81RTVELDRCQUNDLDhEQUFDeUM7Z0JBQ0NDLFdBQVU7Z0JBQ1ZRLFNBQVMsSUFBTWpELGNBQWM7MEJBRTdCLDRFQUFDd0M7b0JBQ0NDLFdBQVU7b0JBQ1ZRLFNBQVMsQ0FBQytCLElBQU1BLEVBQUVPLGVBQWU7O3NDQUdqQyw4REFBQ3ZDOzRCQUNDQyxTQUFTLElBQU1qRCxjQUFjOzRCQUM3QnlDLFdBQVU7c0NBRVYsNEVBQUNVO2dDQUFJVixXQUFVO2dDQUF3QlcsTUFBSztnQ0FBT0MsUUFBTztnQ0FBZUMsU0FBUTswQ0FDL0UsNEVBQUNDO29DQUFLQyxlQUFjO29DQUFRQyxnQkFBZTtvQ0FBUUMsYUFBYTtvQ0FBR0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7OztzQ0FLekUsOERBQUNuQjs0QkFBSUMsV0FBVTtzQ0FDYiw0RUFBQzBCO2dDQUNDQyxLQUFLckU7Z0NBQ0xzRSxLQUFJO2dDQUNKNUIsV0FBVTtnQ0FDVkssT0FBTztvQ0FBRXdCLFdBQVc7Z0NBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBUWpEckUsaUNBQ0MsOERBQUN1QztnQkFDQ0MsV0FBVTtnQkFDVlEsU0FBUyxJQUFNL0MsbUJBQW1COzBCQUVsQyw0RUFBQ3NDO29CQUNDQyxXQUFVO29CQUNWUSxTQUFTLENBQUMrQixJQUFNQSxFQUFFTyxlQUFlOztzQ0FFakMsOERBQUMvQzs0QkFBSUMsV0FBVTs7OENBQ2IsOERBQUMrQztvQ0FBRy9DLFdBQVU7OENBQXdCOzs7Ozs7OENBQ3RDLDhEQUFDTztvQ0FDQ0MsU0FBUyxJQUFNL0MsbUJBQW1CO29DQUNsQ3VDLFdBQVU7OENBRVYsNEVBQUNVO3dDQUFJVixXQUFVO3dDQUFVVyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NDQUszRSw4REFBQ25COzRCQUFJQyxXQUFVOzs4Q0FDYiw4REFBQ0Q7b0NBQUlDLFdBQVU7O3dDQUE2QjtzREFDdkMsOERBQUNJOzRDQUFLSixXQUFVO3NEQUFlcEMsZUFBZUk7Ozs7Ozs7Ozs7Ozs4Q0FFbkQsOERBQUMrQjtvQ0FBSUMsV0FBVTs7d0NBQTZCO3dDQUNwQzVELFNBQVMsU0FBUyxTQUFTQSxTQUFTLFNBQVMsUUFBUUEsU0FBUyxTQUFTLFFBQVFBLFNBQVMsY0FBYyxTQUFTOzs7Ozs7Ozs7Ozs7O3NDQUl6SCw4REFBQzJEOzRCQUFJQyxXQUFVOzs4Q0FDYiw4REFBQ2dEO29DQUFNaEQsV0FBVTs4Q0FBK0M7Ozs7Ozs4Q0FHaEUsOERBQUNpRDtvQ0FDQ1osT0FBTzNFO29DQUNQNEUsVUFBVSxDQUFDQyxJQUFNNUUsZ0JBQWdCNEUsRUFBRUMsTUFBTSxDQUFDSCxLQUFLO29DQUMvQ0ksYUFBWTtvQ0FDWnpDLFdBQVU7b0NBQ1ZrRCxNQUFNOzs7Ozs7Ozs7Ozs7c0NBSVYsOERBQUNuRDs0QkFBSUMsV0FBVTs7OENBQ2IsOERBQUNPO29DQUNDQyxTQUFTO3dDQUNQLHNCQUFzQjt3Q0FDdEJiLFFBQVFDLEdBQUcsQ0FBQyxtQkFBbUI7NENBQzdCWixNQUFNcEI7NENBQ054Qjs0Q0FDQStHLFFBQVF6Rjt3Q0FDVjt3Q0FDQUQsbUJBQW1CO3dDQUNuQkUsZ0JBQWdCO3dDQUNoQkUsaUJBQWlCO3dDQUNqQiw2REFBNkQ7d0NBQzdEdUYsTUFBTTtvQ0FDUjtvQ0FDQXBELFdBQVU7OENBQ1g7Ozs7Ozs4Q0FHRCw4REFBQ087b0NBQ0NDLFNBQVM7d0NBQ1AvQyxtQkFBbUI7d0NBQ25CRSxnQkFBZ0I7d0NBQ2hCRSxpQkFBaUI7b0NBQ25CO29DQUNBbUMsV0FBVTs4Q0FDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTZiIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvYXBwL2xlYXJuL3BhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xuaW1wb3J0IHsgTmF2aWdhdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9OYXZpZ2F0aW9uJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMZWFyblBhZ2UoKSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gIGNvbnN0IFtjdXJyZW50Q2FyZEluZGV4LCBzZXRDdXJyZW50Q2FyZEluZGV4XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc0ZsaXBwZWQsIHNldElzRmxpcHBlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGUsIHNldE1vZGVdID0gdXNlU3RhdGU8J2ZsaXAnIHwgJ3F1aXonIHwgJ2ZpbGwnIHwgJ2xpc3RlbmluZycgfCAnc3BlYWtpbmcnPignZmxpcCcpXG4gIGNvbnN0IFtzY29yZSwgc2V0U2NvcmVdID0gdXNlU3RhdGUoeyBjb3JyZWN0OiAwLCB0b3RhbDogMCB9KVxuICBjb25zdCBbc2VsZWN0ZWRBbnN3ZXIsIHNldFNlbGVjdGVkQW5zd2VyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93UmVzdWx0LCBzZXRTaG93UmVzdWx0XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZmlsbEFuc3dlciwgc2V0RmlsbEFuc3dlcl0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3Nob3dIaW50LCBzZXRTaG93SGludF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzUmVjb3JkaW5nLCBzZXRJc1JlY29yZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2F1ZGlvUGxheWluZywgc2V0QXVkaW9QbGF5aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxJbWFnZSwgc2V0TW9kYWxJbWFnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1JlcG9ydE1vZGFsLCBzZXRTaG93UmVwb3J0TW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtyZXBvcnRSZWFzb24sIHNldFJlcG9ydFJlYXNvbl0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3JlcG9ydGluZ0NhcmQsIHNldFJlcG9ydGluZ0NhcmRdID0gdXNlU3RhdGU8YW55PihudWxsKVxuXG4gIC8vIE1vY2sgZGF0YSB3aXRoIHJlYWwgZXhhbXBsZSBpbWFnZXNcbiAgY29uc3QgY2FyZHMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICB3b3JkOiAnYnJvdWdodCcsXG4gICAgICBwYXJ0T2ZTcGVlY2g6ICd2ZXJiJyxcbiAgICAgIHByb251bmNpYXRpb246ICcvYnLJlMuQdC8nLFxuICAgICAgdHJhbnNsYXRpb246ICfmj5Dlh7rjgIHluLbkvoYnLFxuICAgICAgZGVmaW5pdGlvbjogJ1Bhc3QgdGVuc2Ugb2YgYnJpbmc7IHRvIG1lbnRpb24gb3IgaW50cm9kdWNlIGEgdG9waWMgaW4gY29udmVyc2F0aW9uJyxcbiAgICAgIGV4YW1wbGU6ICdIZSBicm91Z2h0IHRoaXMgdGhpbmcgdXAgZHVyaW5nIG91ciBtZWV0aW5nIGFuZCBubyBvbmUgYWdyZWVkLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICfku5blnKjmiJHlgJHnmoTmnIPorbDkuK3mj5Dlh7rkuobpgJnku7bkuovvvIzkvYbmspLmnInkurrlkIzmhI/jgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy9icmluZ191cC5wbmcnLFxuICAgICAgc3lub255bXM6IFsnbWVudGlvbmVkJywgJ3JhaXNlZCcsICdpbnRyb2R1Y2VkJ10sXG4gICAgICBkaWZmaWN1bHR5OiAnQjEnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHdvcmQ6ICdpbnN0aW5jdHMnLFxuICAgICAgcGFydE9mU3BlZWNoOiAnbm91bicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL8uIyapuc3TJqsWLa3RzLycsXG4gICAgICB0cmFuc2xhdGlvbjogJ+acrOiDveOAgeebtOimuicsXG4gICAgICBkZWZpbml0aW9uOiAnTmF0dXJhbCBhYmlsaXRpZXMgdGhhdCBoZWxwIGxpdmluZyB0aGluZ3Mgc3Vydml2ZSB3aXRob3V0IGxlYXJuaW5nJyxcbiAgICAgIGV4YW1wbGU6ICdBbmltYWxzIHVzZSB0aGVpciBpbnN0aW5jdHMgdG8gZmluZCBmb29kIGFuZCBzdGF5IHNhZmUuJyxcbiAgICAgIGV4YW1wbGVUcmFuc2xhdGlvbjogJ+WLleeJqeWIqeeUqOacrOiDveS+huWwi+aJvumjn+eJqeS4puS/neaMgeWuieWFqOOAgicsXG4gICAgICBleGFtcGxlSW1hZ2U6ICcvaW1hZ2VzL2V4YW1wbGVzL2luc3RpbmN0LnBuZycsXG4gICAgICBzeW5vbnltczogWydpbnR1aXRpb24nLCAnaW1wdWxzZScsICd0ZW5kZW5jeSddLFxuICAgICAgZGlmZmljdWx0eTogJ0IyJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDMsXG4gICAgICB3b3JkOiAnd2FycmFudHMnLFxuICAgICAgcGFydE9mU3BlZWNoOiAnbm91bicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL8uId8mUy5ByyZludHMvJyxcbiAgICAgIHRyYW5zbGF0aW9uOiAn5pCc5p+l5Luk44CB5o6I5qyK5LukJyxcbiAgICAgIGRlZmluaXRpb246ICdPZmZpY2lhbCBkb2N1bWVudHMgdGhhdCBnaXZlIHBvbGljZSBwZXJtaXNzaW9uIHRvIGRvIHNvbWV0aGluZycsXG4gICAgICBleGFtcGxlOiAnVGhlIHBvbGljZSBvYnRhaW5lZCB3YXJyYW50cyB0byBzZWFyY2ggdGhlIGJ1aWxkaW5nLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICforabmlrnlj5blvpfkuobmkJzmn6Xku6TkvobmkJzmn6XpgJnmo5/lu7rnr4nnianjgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy93YXJyYW50LnBuZycsXG4gICAgICBzeW5vbnltczogWydhdXRob3JpemF0aW9uJywgJ3Blcm1pdCcsICdsaWNlbnNlJ10sXG4gICAgICBkaWZmaWN1bHR5OiAnQzEnXG4gICAgfVxuICBdXG5cbiAgY29uc3QgY3VycmVudENhcmQgPSBjYXJkc1tjdXJyZW50Q2FyZEluZGV4XVxuXG4gIC8vIFF1aXogbW9kZSBvcHRpb25zIC0gZHluYW1pY2FsbHkgZ2VuZXJhdGUgZnJvbSBjdXJyZW50IGNhcmRzXG4gIGNvbnN0IHF1aXpPcHRpb25zID0gW1xuICAgIGNhcmRzW2N1cnJlbnRDYXJkSW5kZXhdLnRyYW5zbGF0aW9uLFxuICAgIC4uLmNhcmRzXG4gICAgICAuZmlsdGVyKChfLCBpZHgpID0+IGlkeCAhPT0gY3VycmVudENhcmRJbmRleClcbiAgICAgIC5tYXAoY2FyZCA9PiBjYXJkLnRyYW5zbGF0aW9uKVxuICAgICAgLnNsaWNlKDAsIDIpLFxuICAgICflu7rorbDjgIHmj5DorbAnIC8vIGFkZGl0aW9uYWwgd3Jvbmcgb3B0aW9uXG4gIF0uc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KSAvLyBzaHVmZmxlIG9wdGlvbnNcblxuICBjb25zdCBoYW5kbGVGbGlwID0gKCkgPT4ge1xuICAgIHNldElzRmxpcHBlZCghaXNGbGlwcGVkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlTmV4dCA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudENhcmRJbmRleCA8IGNhcmRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHNldEN1cnJlbnRDYXJkSW5kZXgoY3VycmVudENhcmRJbmRleCArIDEpXG4gICAgICBzZXRJc0ZsaXBwZWQoZmFsc2UpXG4gICAgICBzZXRTZWxlY3RlZEFuc3dlcihudWxsKVxuICAgICAgc2V0U2hvd1Jlc3VsdChmYWxzZSlcbiAgICAgIHNldEZpbGxBbnN3ZXIoJycpXG4gICAgICBzZXRTaG93SGludChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVQcmV2aW91cyA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudENhcmRJbmRleCA+IDApIHtcbiAgICAgIHNldEN1cnJlbnRDYXJkSW5kZXgoY3VycmVudENhcmRJbmRleCAtIDEpXG4gICAgICBzZXRJc0ZsaXBwZWQoZmFsc2UpXG4gICAgICBzZXRTZWxlY3RlZEFuc3dlcihudWxsKVxuICAgICAgc2V0U2hvd1Jlc3VsdChmYWxzZSlcbiAgICAgIHNldEZpbGxBbnN3ZXIoJycpXG4gICAgICBzZXRTaG93SGludChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEaWZmaWN1bHR5UmF0ZSA9IChyYXRpbmc6IG51bWJlcikgPT4ge1xuICAgIC8vIE1vY2sgcmF0aW5nIGxvZ2ljXG4gICAgY29uc29sZS5sb2coYFJhdGVkICR7cmF0aW5nfSBmb3IgJHtjdXJyZW50Q2FyZC53b3JkfWApXG4gICAgaGFuZGxlTmV4dCgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVRdWl6QW5zd2VyID0gKGFuc3dlcjogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRBbnN3ZXIoYW5zd2VyKVxuICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICBpZiAoYW5zd2VyID09PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbikge1xuICAgICAgc2V0U2NvcmUoeyAuLi5zY29yZSwgY29ycmVjdDogc2NvcmUuY29ycmVjdCArIDEsIHRvdGFsOiBzY29yZS50b3RhbCArIDEgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2NvcmUoeyAuLi5zY29yZSwgdG90YWw6IHNjb3JlLnRvdGFsICsgMSB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1ibHVlLTUwIHRvLWluZGlnby0xMDBcIj5cbiAgICAgIHsvKiBOYXZpZ2F0aW9uICovfVxuICAgICAgPE5hdmlnYXRpb25cbiAgICAgICAgc2hvd0V4aXRMZWFybmluZz17dHJ1ZX1cbiAgICAgICAgb25FeGl0TGVhcm5pbmc9eygpID0+IHJvdXRlci5wdXNoKCcvZGFzaGJvYXJkJyl9XG4gICAgICAvPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTR4bCBteC1hdXRvIHB4LTQgcHktOFwiPlxuICAgICAgICB7LyogUHJvZ3Jlc3MgQmFyICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLThcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj7pgLLluqY8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAge2N1cnJlbnRDYXJkSW5kZXggKyAxfSAvIHtjYXJkcy5sZW5ndGh9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIGgtMlwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IGgtMiByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1hbGxcIlxuICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogYCR7KChjdXJyZW50Q2FyZEluZGV4ICsgMSkgLyBjYXJkcy5sZW5ndGgpICogMTAwfSVgIH19XG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBNb2RlIFRvZ2dsZSAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIG1iLTZcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LXNtIHAtMSBpbmxpbmUtZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnZmxpcCcpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdmbGlwJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg57+75Y2h5qih5byPXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgncXVpeicpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdxdWl6J1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg6YG45pOH6aGMXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnZmlsbCcpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdmaWxsJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg5aGr56m66aGMXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnbGlzdGVuaW5nJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ2xpc3RlbmluZydcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOiBveWKm+a4rOipplxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ3NwZWFraW5nJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ3NwZWFraW5nJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg5Y+j6Kqq5ris6KmmXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAge21vZGUgPT09ICdmbGlwJyA/IChcbiAgICAgICAgICAvKiBGbGlwIENhcmQgTW9kZSAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBGbGlwIE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLTk2IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRmxpcH1cbiAgICAgICAgICAgICAgc3R5bGU9e3sgcGVyc3BlY3RpdmU6ICcxMDAwcHgnIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BhYnNvbHV0ZSB3LWZ1bGwgaC1mdWxsIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTYwMCAke1xuICAgICAgICAgICAgICAgICAgaXNGbGlwcGVkID8gJ3JvdGF0ZS15LTE4MCcgOiAnJ1xuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHlsZTogJ3ByZXNlcnZlLTNkJyxcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogaXNGbGlwcGVkID8gJ3JvdGF0ZVkoMTgwZGVnKScgOiAncm90YXRlWSgwZGVnKSdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgey8qIEZyb250IG9mIGNhcmQgKi99XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCBiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tmYWNlVmlzaWJpbGl0eTogJ2hpZGRlbicgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtNHhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTRcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLndvcmR9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LWdyYXktNjAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnBhcnRPZlNwZWVjaH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxnIHRleHQtZ3JheS01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnByb251bmNpYXRpb259XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtOCB0ZXh0LXNtIHRleHQtZ3JheS00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg6bue5pOK57+76L2J5p+l55yL562U5qGIXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIHsvKiBCYWNrIG9mIGNhcmQgKi99XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCBiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04IG92ZXJmbG93LXktYXV0b1wiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBcbiAgICAgICAgICAgICAgICAgICAgYmFja2ZhY2VWaXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlWSgxODBkZWcpJ1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPue/u+itrzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDBcIj57Y3VycmVudENhcmQudHJhbnNsYXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPuWumue+qTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMFwiPntjdXJyZW50Q2FyZC5kZWZpbml0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTFcIj7kvovlj6U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDBcIj57Y3VycmVudENhcmQuZXhhbXBsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgdGV4dC1zbSBtdC0xXCI+e2N1cnJlbnRDYXJkLmV4YW1wbGVUcmFuc2xhdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCBtYi0xXCI+5ZCM576p6KmePC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnN5bm9ueW1zLm1hcCgoc3luLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtpZHh9IGNsYXNzTmFtZT1cInB4LTMgcHktMSBiZy1ncmF5LTEwMCByb3VuZGVkLWZ1bGwgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzeW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogRGlmZmljdWx0eSBSYXRpbmcgKi99XG4gICAgICAgICAgICB7aXNGbGlwcGVkICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC04XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+6YCZ5YCL5Zau5a2X5bCN5L2g5L6G6Kqq6Zuj5bqm5aaC5L2V77yfPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRGlmZmljdWx0eVJhdGUoMSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy1yZWQtMTAwIHRleHQtcmVkLTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLXJlZC0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDwn5iUIOWujOWFqOS4jeiomOW+l1xuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURpZmZpY3VsdHlSYXRlKDMpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC00IHB5LTIgYmcteWVsbG93LTEwMCB0ZXh0LXllbGxvdy03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy15ZWxsb3ctMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg8J+YkCDmnInpu57lm7Dpm6NcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEaWZmaWN1bHR5UmF0ZSg1KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNCBweS0yIGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyZWVuLTIwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIPCfmIog5b6I57Ch5ZauXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ3F1aXonID8gKFxuICAgICAgICAgIC8qIFF1aXogTW9kZSAtIOmBuOaTh+mhjO+8muiLseaWh+Wumue+qemBuOS4reaWh+e/u+itryAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBRdWl6IE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLThcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPuagueaTmuWumue+qemBuOaTh+ato+eiuueahOS4reaWh+e/u+itrzwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14bCB0ZXh0LWdyYXktODAwIGxlYWRpbmctcmVsYXhlZFwiPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmRlZmluaXRpb259XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDAgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgKHtjdXJyZW50Q2FyZC5wYXJ0T2ZTcGVlY2h9KVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICAgICAge3F1aXpPcHRpb25zLm1hcCgob3B0aW9uLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e2lkeH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFzaG93UmVzdWx0ICYmIGhhbmRsZVF1aXpBbnN3ZXIob3B0aW9uKX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzaG93UmVzdWx0fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHAtNCB0ZXh0LWxlZnQgcm91bmRlZC1sZyBib3JkZXItMiB0cmFuc2l0aW9uLWFsbCAke1xuICAgICAgICAgICAgICAgICAgICBzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gY3VycmVudENhcmQudHJhbnNsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItZ3JlZW4tNTAwIGJnLWdyZWVuLTUwJ1xuICAgICAgICAgICAgICAgICAgICAgIDogc2hvd1Jlc3VsdCAmJiBvcHRpb24gPT09IHNlbGVjdGVkQW5zd2VyICYmIG9wdGlvbiAhPT0gY3VycmVudENhcmQudHJhbnNsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZEFuc3dlciA9PT0gb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgYmctcHJpbWFyeS1saWdodCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItZ3JheS0yMDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwJ1xuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57b3B0aW9ufTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3Nob3dSZXN1bHQgJiYgb3B0aW9uID09PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtZ3JlZW4tNTAwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNSAxM2w0IDRMMTkgN1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gc2VsZWN0ZWRBbnN3ZXIgJiYgb3B0aW9uICE9PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtcmVkLTUwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ2ZpbGwnID8gKFxuICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIEJsYW5rIE1vZGUgLSDloavnqbrpoYwgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgRmlsbCBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTRcIj7moLnmk5rkvovlj6XlnJbniYflkozlj6XlrZDloavlhaXmraPnorrnmoToqZ7lvZk8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogRXhhbXBsZSBJbWFnZSAqL31cbiAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGVJbWFnZSAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIHNyYz17Y3VycmVudENhcmQuZXhhbXBsZUltYWdlfVxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJFeGFtcGxlIGNvbnRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1sZyBzaGFkb3ctbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6c2hhZG93LWxnIHRyYW5zaXRpb24tc2hhZG93XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWF4SGVpZ2h0OiAnNDAwcHgnLCBvYmplY3RGaXQ6ICdjb250YWluJyB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RhbEltYWdlKGN1cnJlbnRDYXJkLmV4YW1wbGVJbWFnZSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMiB0ZXh0LWNlbnRlclwiPum7nuaTiuWclueJh+WPr+aUvuWkp+afpeecizwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiBFeGFtcGxlIFNlbnRlbmNlIHdpdGggQmxhbmsgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LWdyYXktODAwIG1iLTRcIj5cbiAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZXhhbXBsZS5zcGxpdChjdXJyZW50Q2FyZC53b3JkKS5tYXAoKHBhcnQsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17aX0+XG4gICAgICAgICAgICAgICAgICAgIHtwYXJ0fVxuICAgICAgICAgICAgICAgICAgICB7aSA8IGN1cnJlbnRDYXJkLmV4YW1wbGUuc3BsaXQoY3VycmVudENhcmQud29yZCkubGVuZ3RoIC0gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWJsb2NrIHctMzIgYm9yZGVyLWItMiBib3JkZXItZ3JheS00MDAgbXgtMVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIEhpbnQgQnV0dG9uICovfVxuICAgICAgICAgICAgICB7IXNob3dIaW50ICYmIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93SGludCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1wcmltYXJ5IGhvdmVyOnRleHQtcHJpbWFyeS1ob3ZlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMyAxNmgtMXYtNGgtMW0xLTRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIOm7nuaTiuafpeeci+aPkOekulxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiBEZWZpbml0aW9uIEhpbnQgKi99XG4gICAgICAgICAgICAgIHtzaG93SGludCAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHAtMyBiZy1ibHVlLTUwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWJsdWUtODAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+5a6a576p5o+Q56S677yaPC9zdHJvbmc+IHtjdXJyZW50Q2FyZC5kZWZpbml0aW9ufVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEFuc3dlciBJbnB1dCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2ZpbGxBbnN3ZXJ9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRGaWxsQW5zd2VyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIui8uOWFpeetlOahiC4uLlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTQgcHktMyBib3JkZXItMiBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBmb2N1czpib3JkZXItcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgdGV4dC1sZ1wiXG4gICAgICAgICAgICAgICAgb25LZXlQcmVzcz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiBmaWxsQW5zd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBTdWJtaXQgQnV0dG9uICovfVxuICAgICAgICAgICAgeyFzaG93UmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGxBbnN3ZXIgJiYgc2V0U2hvd1Jlc3VsdCh0cnVlKX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWZpbGxBbnN3ZXJ9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB5LTMgYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgZm9udC1tZWRpdW0gaG92ZXI6YmctcHJpbWFyeS1ob3ZlciB0cmFuc2l0aW9uLWNvbG9ycyBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDmj5DkuqTnrZTmoYhcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7LyogUmVzdWx0IERpc3BsYXkgKi99XG4gICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgcC00IHJvdW5kZWQtbGcgJHtcbiAgICAgICAgICAgICAgICBmaWxsQW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRDYXJkLndvcmQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgPyAnYmctZ3JlZW4tNTAgYm9yZGVyLTIgYm9yZGVyLWdyZWVuLTUwMCdcbiAgICAgICAgICAgICAgICAgIDogJ2JnLXJlZC01MCBib3JkZXItMiBib3JkZXItcmVkLTUwMCdcbiAgICAgICAgICAgICAgfWB9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGZvbnQtc2VtaWJvbGQgJHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LWdyZWVuLTcwMCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LXJlZC03MDAnXG4gICAgICAgICAgICAgICAgICB9YH0+XG4gICAgICAgICAgICAgICAgICAgIHtmaWxsQW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRDYXJkLndvcmQudG9Mb3dlckNhc2UoKSA/ICfinJMg5q2j56K677yBJyA6ICfinJcg6Yyv6KqkJ31cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7ZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpICE9PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKCkgJiYgKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg5q2j56K6562U5qGI77yaPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+e2N1cnJlbnRDYXJkLndvcmR9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgdGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgbWItMVwiPuWujOaVtOS+i+WPpe+8mjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdj57Y3VycmVudENhcmQuZXhhbXBsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMCBtdC0xXCI+e2N1cnJlbnRDYXJkLmV4YW1wbGVUcmFuc2xhdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBtb2RlID09PSAnbGlzdGVuaW5nJyA/IChcbiAgICAgICAgICAvKiBMaXN0ZW5pbmcgVGVzdCBNb2RlIC0g6IG95Yqb5ris6KmmICovXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgey8qIEVycm9yIFJlcG9ydCBCdXR0b24gZm9yIExpc3RlbmluZyBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTRcIj7ogb3pn7PpoLvvvIzpgbjmk4fmraPnorrnmoTllq7lrZc8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogQXVkaW8gUGxheSBCdXR0b24gKi99XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRBdWRpb1BsYXlpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlIGF1ZGlvIHBsYXlpbmdcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0QXVkaW9QbGF5aW5nKGZhbHNlKSwgMjAwMClcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14LWF1dG8gbWItNiBwLTggYmctZ3JheS0xMDAgcm91bmRlZC1mdWxsIGhvdmVyOmJnLWdyYXktMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthdWRpb1BsYXlpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctMTYgaC0xNiB0ZXh0LXByaW1hcnkgYW5pbWF0ZS1wdWxzZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTUuNTM2IDguNDY0YTUgNSAwIDAxMCA3LjA3Mm0yLjgyOC05LjlhOSA5IDAgMDEwIDEyLjcyOE01LjU4NiAxNUg0YTEgMSAwIDAxLTEtMXYtNGExIDEgMCAwMTEtMWgxLjU4Nmw0LjcwNy00LjcwN0MxMC45MjMgMy42NjMgMTIgNC4xMDkgMTIgNXYxNGMwIC44OTEtMS4wNzcgMS4zMzctMS43MDcuNzA3TDUuNTg2IDE1elwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTE2IGgtMTYgdGV4dC1ncmF5LTYwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTQuNzUyIDExLjE2OGwtMy4xOTctMi4xMzJBMSAxIDAgMDAxMCA5Ljg3djQuMjYzYTEgMSAwIDAwMS41NTUuODMybDMuMTk3LTIuMTMyYTEgMSAwIDAwMC0xLjY2NHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+6bue5pOK5pKt5pS+5oyJ6YiV6IG955m86Z+zPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIFdvcmQgT3B0aW9ucyAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtM1wiPlxuICAgICAgICAgICAgICB7W2N1cnJlbnRDYXJkLndvcmQsICdkZXRlcm1pbmUnLCAnYWNoaWV2ZScsICdjb25zaWRlciddLm1hcCgod29yZCkgPT4gKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17d29yZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFzaG93UmVzdWx0ICYmIGhhbmRsZVF1aXpBbnN3ZXIod29yZCl9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2hvd1Jlc3VsdH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHAtNCB0ZXh0LWxnIGZvbnQtbWVkaXVtIHJvdW5kZWQtbGcgYm9yZGVyLTIgdHJhbnNpdGlvbi1hbGwgJHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd1Jlc3VsdCAmJiB3b3JkID09PSBjdXJyZW50Q2FyZC53b3JkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLWdyZWVuLTUwMCBiZy1ncmVlbi01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNob3dSZXN1bHQgJiYgd29yZCA9PT0gc2VsZWN0ZWRBbnN3ZXIgJiYgd29yZCAhPT0gY3VycmVudENhcmQud29yZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkQW5zd2VyID09PSB3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgYmctcHJpbWFyeS1saWdodCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItZ3JheS0yMDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwJ1xuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3dvcmR9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBSZXN1bHQgRGlzcGxheSAqL31cbiAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IHAtNCBiZy1ncmF5LTUwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTJcIj7llq7lrZfoqbPmg4U8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZFwiPntjdXJyZW50Q2FyZC53b3JkfTwvc3Bhbj4gLSB7Y3VycmVudENhcmQudHJhbnNsYXRpb259XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+e2N1cnJlbnRDYXJkLmRlZmluaXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTUwMCBpdGFsaWNcIj5cIntjdXJyZW50Q2FyZC5leGFtcGxlfVwiPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ3NwZWFraW5nJyA/IChcbiAgICAgICAgICAvKiBTcGVha2luZyBUZXN0IE1vZGUgLSDlj6PoqqrmuKzoqaYgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgU3BlYWtpbmcgTW9kZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBtYi0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKGN1cnJlbnRDYXJkKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5Zue5aCx6Yyv6KqkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAg5Zue5aCx6Yyv6KqkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi00XCI+5b+15Ye65Lul5LiL5L6L5Y+lPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFRhcmdldCBTZW50ZW5jZSAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTYgYmctZ3JheS01MCByb3VuZGVkLWxnIG1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteGwgdGV4dC1ncmF5LTgwMCBsZWFkaW5nLXJlbGF4ZWQgbWItM1wiPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGV9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZXhhbXBsZVRyYW5zbGF0aW9ufVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogUHJvbnVuY2lhdGlvbiBHdWlkZSAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPumHjem7nuWWruWtl+eZvOmfs++8mjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgdGV4dC1sZ1wiPntjdXJyZW50Q2FyZC53b3JkfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDBcIj57Y3VycmVudENhcmQucHJvbnVuY2lhdGlvbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInRleHQtcHJpbWFyeSBob3Zlcjp0ZXh0LXByaW1hcnktaG92ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1LjUzNiA4LjQ2NGE1IDUgMCAwMTAgNy4wNzJtMi44MjgtOS45YTkgOSAwIDAxMCAxMi43MjhNNS41ODYgMTVINGExIDEgMCAwMS0xLTF2LTRhMSAxIDAgMDExLTFoMS41ODZsNC43MDctNC43MDdDMTAuOTIzIDMuNjYzIDEyIDQuMTA5IDEyIDV2MTRjMCAuODkxLTEuMDc3IDEuMzM3LTEuNzA3LjcwN0w1LjU4NiAxNXpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogUmVjb3JkaW5nIEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNSZWNvcmRpbmcoIWlzUmVjb3JkaW5nKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVjb3JkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgcmVjb3JkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJc1JlY29yZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICB9LCAzMDAwKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcC02IHJvdW5kZWQtZnVsbCB0cmFuc2l0aW9uLWFsbCAke1xuICAgICAgICAgICAgICAgICAgICBpc1JlY29yZGluZ1xuICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLXJlZC01MDAgaG92ZXI6YmctcmVkLTYwMCBhbmltYXRlLXB1bHNlJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLXByaW1hcnkgaG92ZXI6YmctcHJpbWFyeS1ob3ZlcidcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtpc1JlY29yZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTEyIGgtMTIgdGV4dC13aGl0ZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk05IDEwYTEgMSAwIDAxMS0xaDRhMSAxIDAgMDExIDF2NGExIDEgMCAwMS0xIDFoLTRhMSAxIDAgMDEtMS0xdi00elwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTEyIGgtMTIgdGV4dC13aGl0ZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xOSAxMWE3IDcgMCAwMS03IDdtMCAwYTcgNyAwIDAxLTctN203IDd2NG0wIDBIOG00IDBoNG0tNC04YTMgMyAwIDAxLTMtM1Y1YTMgMyAwIDExNiAwdjZhMyAzIDAgMDEtMyAzelwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgdGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICB7aXNSZWNvcmRpbmcgPyAn6YyE6Z+z5LitLi4uIOm7nuaTiuWBnOatoicgOiAn6bue5pOK6ZaL5aeL6YyE6Z+zJ31cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlc3VsdCBEaXNwbGF5ICovfVxuICAgICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IHAtNCBiZy1ncmVlbi01MCBib3JkZXItMiBib3JkZXItZ3JlZW4tNTAwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmVlbi03MDAgZm9udC1zZW1pYm9sZCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIOKckyDlrozmiJDlj6Poqqrnt7Tnv5LvvIFcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg5o+Q56S677ya5oyB57qM57e057+S5Y+v5Lul5o+Q6auY55m86Z+z5rqW56K65bqm5ZKM5rWB5pqi5bqmXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7LyogTmF2aWdhdGlvbiBCdXR0b25zICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIG10LThcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVQcmV2aW91c31cbiAgICAgICAgICAgIGRpc2FibGVkPXtjdXJyZW50Q2FyZEluZGV4ID09PSAwfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHB4LTYgcHktMyBiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy1zbSBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTUgMTlsLTctNyA3LTdcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8c3Bhbj7kuIrkuIDlgIs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVOZXh0fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2N1cnJlbnRDYXJkSW5kZXggPT09IGNhcmRzLmxlbmd0aCAtIDF9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgcHgtNiBweS0zIGJnLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy1zbSBob3ZlcjpiZy1wcmltYXJ5LWhvdmVyIHRyYW5zaXRpb24tY29sb3JzIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj7kuIvkuIDlgIs8L3NwYW4+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTkgNWw3IDctNyA3XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogSW1hZ2UgTW9kYWwgKi99XG4gICAgICB7bW9kYWxJbWFnZSAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmxhY2sgYmctb3BhY2l0eS03NSBwLTRcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsSW1hZ2UobnVsbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBtYXgtdy00eGwgbWF4LWgtWzkwdmhdIGJnLXdoaXRlIHJvdW5kZWQtbGcgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBDbG9zZSBCdXR0b24gKi99XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsSW1hZ2UobnVsbCl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0yIHJpZ2h0LTIgei0xMCBwLTIgYmctd2hpdGUgYmctb3BhY2l0eS05MCByb3VuZGVkLWZ1bGwgaG92ZXI6Ymctb3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1hbGwgc2hhZG93LWxnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02IHRleHQtZ3JheS03MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIHsvKiBJbWFnZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC00XCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9e21vZGFsSW1hZ2V9XG4gICAgICAgICAgICAgICAgYWx0PVwiRXhhbXBsZSBjb250ZXh0IGVubGFyZ2VkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhIZWlnaHQ6ICdjYWxjKDkwdmggLSAycmVtKScgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBFcnJvciBSZXBvcnQgTW9kYWwgKi99XG4gICAgICB7c2hvd1JlcG9ydE1vZGFsICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjayBiZy1vcGFjaXR5LTUwIHAtNFwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LXhsIG1heC13LW1kIHctZnVsbCBwLTZcIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkXCI+5Zue5aCx6Yyv6KqkPC9oMz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXBvcnRNb2RhbChmYWxzZSl9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWdyYXktNjAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgIOipnuWNoe+8mjxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3JlcG9ydGluZ0NhcmQ/LndvcmR9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgIOa4rOmpl+aooeW8j++8mnttb2RlID09PSAnZmxpcCcgPyAn57+75Y2h5qih5byPJyA6IG1vZGUgPT09ICdxdWl6JyA/ICfpgbjmk4fpoYwnIDogbW9kZSA9PT0gJ2ZpbGwnID8gJ+Whq+epuumhjCcgOiBtb2RlID09PSAnbGlzdGVuaW5nJyA/ICfogb3lipvmuKzoqaYnIDogJ+WPo+iqqua4rOippid9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICDpjK/oqqTljp/lm6DvvIjpgbjloavvvIlcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgdmFsdWU9e3JlcG9ydFJlYXNvbn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFJlcG9ydFJlYXNvbihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLoq4vmj4/ov7DpjK/oqqTlhaflrrkuLi5cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC0zIHB5LTIgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGZvY3VzOnJpbmctcHJpbWFyeSBmb2N1czpib3JkZXItcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgcm93cz17M31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1Ym1pdCBlcnJvciByZXBvcnRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciByZXBvcnRlZDonLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmQ6IHJlcG9ydGluZ0NhcmQsXG4gICAgICAgICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVwb3J0UmVhc29uXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0UmVhc29uKCcnKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChudWxsKVxuICAgICAgICAgICAgICAgICAgLy8gU2hvdyBzdWNjZXNzIG1lc3NhZ2UgKGNvdWxkIGFkZCBhIHRvYXN0IG5vdGlmaWNhdGlvbiBoZXJlKVxuICAgICAgICAgICAgICAgICAgYWxlcnQoJ+aEn+isneaCqOeahOWbnuWgse+8jOaIkeWAkeacg+eboeW/q+iZleeQhu+8gScpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcHgtNCBweS0yIGJnLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLWxnIGhvdmVyOmJnLXByaW1hcnktaG92ZXIgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg6YCB5Ye65Zue5aCxXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0UmVhc29uKCcnKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChudWxsKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHB4LTQgcHktMiBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg5Y+W5raIXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufSJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZVJvdXRlciIsIk5hdmlnYXRpb24iLCJMZWFyblBhZ2UiLCJyb3V0ZXIiLCJjdXJyZW50Q2FyZEluZGV4Iiwic2V0Q3VycmVudENhcmRJbmRleCIsImlzRmxpcHBlZCIsInNldElzRmxpcHBlZCIsIm1vZGUiLCJzZXRNb2RlIiwic2NvcmUiLCJzZXRTY29yZSIsImNvcnJlY3QiLCJ0b3RhbCIsInNlbGVjdGVkQW5zd2VyIiwic2V0U2VsZWN0ZWRBbnN3ZXIiLCJzaG93UmVzdWx0Iiwic2V0U2hvd1Jlc3VsdCIsImZpbGxBbnN3ZXIiLCJzZXRGaWxsQW5zd2VyIiwic2hvd0hpbnQiLCJzZXRTaG93SGludCIsImlzUmVjb3JkaW5nIiwic2V0SXNSZWNvcmRpbmciLCJhdWRpb1BsYXlpbmciLCJzZXRBdWRpb1BsYXlpbmciLCJtb2RhbEltYWdlIiwic2V0TW9kYWxJbWFnZSIsInNob3dSZXBvcnRNb2RhbCIsInNldFNob3dSZXBvcnRNb2RhbCIsInJlcG9ydFJlYXNvbiIsInNldFJlcG9ydFJlYXNvbiIsInJlcG9ydGluZ0NhcmQiLCJzZXRSZXBvcnRpbmdDYXJkIiwiY2FyZHMiLCJpZCIsIndvcmQiLCJwYXJ0T2ZTcGVlY2giLCJwcm9udW5jaWF0aW9uIiwidHJhbnNsYXRpb24iLCJkZWZpbml0aW9uIiwiZXhhbXBsZSIsImV4YW1wbGVUcmFuc2xhdGlvbiIsImV4YW1wbGVJbWFnZSIsInN5bm9ueW1zIiwiZGlmZmljdWx0eSIsImN1cnJlbnRDYXJkIiwicXVpek9wdGlvbnMiLCJmaWx0ZXIiLCJfIiwiaWR4IiwibWFwIiwiY2FyZCIsInNsaWNlIiwic29ydCIsIk1hdGgiLCJyYW5kb20iLCJoYW5kbGVGbGlwIiwiaGFuZGxlTmV4dCIsImxlbmd0aCIsImhhbmRsZVByZXZpb3VzIiwiaGFuZGxlRGlmZmljdWx0eVJhdGUiLCJyYXRpbmciLCJjb25zb2xlIiwibG9nIiwiaGFuZGxlUXVpekFuc3dlciIsImFuc3dlciIsImRpdiIsImNsYXNzTmFtZSIsInNob3dFeGl0TGVhcm5pbmciLCJvbkV4aXRMZWFybmluZyIsInB1c2giLCJzcGFuIiwic3R5bGUiLCJ3aWR0aCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJ0aXRsZSIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInBlcnNwZWN0aXZlIiwidHJhbnNmb3JtU3R5bGUiLCJ0cmFuc2Zvcm0iLCJiYWNrZmFjZVZpc2liaWxpdHkiLCJzeW4iLCJvcHRpb24iLCJkaXNhYmxlZCIsImltZyIsInNyYyIsImFsdCIsIm1heEhlaWdodCIsIm9iamVjdEZpdCIsInNwbGl0IiwicGFydCIsImkiLCJzdHJvbmciLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwib25LZXlQcmVzcyIsImtleSIsInRvTG93ZXJDYXNlIiwic2V0VGltZW91dCIsInN0b3BQcm9wYWdhdGlvbiIsImgzIiwibGFiZWwiLCJ0ZXh0YXJlYSIsInJvd3MiLCJyZWFzb24iLCJhbGVydCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./app/learn/page.tsx\n"); + +/***/ }), + +/***/ "(ssr)/./components/Navigation.tsx": +/*!***********************************!*\ + !*** ./components/Navigation.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 */ Navigation: () => (/* binding */ Navigation)\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/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/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\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 _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(ssr)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \n\n\n\nfunction Navigation({ showExitLearning = false, onExitLearning } = {}) {\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: `font-medium transition-colors ${pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'}`,\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: showExitLearning ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onExitLearning,\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 59,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: user?.username?.[0]?.toUpperCase() || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: user?.displayName || user?.username\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 70,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 71,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL05hdmlnYXRpb24udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRTRCO0FBQ2lCO0FBQ0c7QUFPekMsU0FBU0csV0FBVyxFQUFFQyxtQkFBbUIsS0FBSyxFQUFFQyxjQUFjLEVBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQzNGLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEVBQUUsR0FBR0wsOERBQU9BO0lBQ2hDLE1BQU1NLFdBQVdQLDREQUFXQTtJQUU1QixNQUFNUSxXQUFXO1FBQ2Y7WUFBRUMsTUFBTTtZQUFjQyxPQUFPO1FBQU07UUFDbkM7WUFBRUQsTUFBTTtZQUFlQyxPQUFPO1FBQUs7UUFDbkM7WUFBRUQsTUFBTTtZQUFVQyxPQUFPO1FBQUs7S0FDL0I7SUFFRCxxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVTtrQkFDYiw0RUFBQ0M7WUFBSUQsV0FBVTtzQkFDYiw0RUFBQ0M7Z0JBQUlELFdBQVU7O2tDQUNiLDhEQUFDQzt3QkFBSUQsV0FBVTs7MENBQ2IsOERBQUNiLGtEQUFJQTtnQ0FBQ1UsTUFBSztnQ0FBYUcsV0FBVTswQ0FBa0M7Ozs7OzswQ0FHcEUsOERBQUNDO2dDQUFJRCxXQUFVOzBDQUNaSixTQUFTTSxHQUFHLENBQUMsQ0FBQ0MscUJBQ2IsOERBQUNoQixrREFBSUE7d0NBRUhVLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsQ0FBQyw4QkFBOEIsRUFDeENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0EscUNBQ0o7a0RBRURNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTtrQ0FFWlQsaUNBQ0MsOERBQUNhOzRCQUNDQyxTQUFTYjs0QkFDVFEsV0FBVTtzQ0FDWDs7Ozs7aURBSUQ7OzhDQUVFLDhEQUFDSTtvQ0FBT0osV0FBVTs4Q0FDaEIsNEVBQUNNO3dDQUFJTixXQUFVO3dDQUFVTyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzhDQUt6RSw4REFBQ2I7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTtzREFDWlAsTUFBTXNCLFVBQVUsQ0FBQyxFQUFFLEVBQUVDLGlCQUFpQjs7Ozs7O3NEQUV6Qyw4REFBQ0M7NENBQUtqQixXQUFVO3NEQUF1QlAsTUFBTXlCLGVBQWV6QixNQUFNc0I7Ozs7OztzREFDbEUsOERBQUNYOzRDQUNDQyxTQUFTWDs0Q0FDVE0sV0FBVTtzREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXbkIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXHJcblxyXG5pbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnXHJcbmltcG9ydCB7IHVzZVBhdGhuYW1lIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xyXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnQC9jb250ZXh0cy9BdXRoQ29udGV4dCdcclxuXHJcbmludGVyZmFjZSBOYXZpZ2F0aW9uUHJvcHMge1xyXG4gIHNob3dFeGl0TGVhcm5pbmc/OiBib29sZWFuXHJcbiAgb25FeGl0TGVhcm5pbmc/OiAoKSA9PiB2b2lkXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBOYXZpZ2F0aW9uKHsgc2hvd0V4aXRMZWFybmluZyA9IGZhbHNlLCBvbkV4aXRMZWFybmluZyB9OiBOYXZpZ2F0aW9uUHJvcHMgPSB7fSkge1xyXG4gIGNvbnN0IHsgdXNlciwgbG9nb3V0IH0gPSB1c2VBdXRoKClcclxuICBjb25zdCBwYXRobmFtZSA9IHVzZVBhdGhuYW1lKClcclxuXHJcbiAgY29uc3QgbmF2SXRlbXMgPSBbXHJcbiAgICB7IGhyZWY6ICcvZGFzaGJvYXJkJywgbGFiZWw6ICflhIDooajmnb8nIH0sXHJcbiAgICB7IGhyZWY6ICcvZmxhc2hjYXJkcycsIGxhYmVsOiAn6Kme5Y2hJyB9LFxyXG4gICAgeyBocmVmOiAnL2xlYXJuJywgbGFiZWw6ICflrbjnv5InIH1cclxuICBdXHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8bmF2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHNoYWRvdy1zbSBib3JkZXItYlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTd4bCBteC1hdXRvIHB4LTQgc206cHgtNiBsZzpweC04XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBoLTE2XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtOFwiPlxyXG4gICAgICAgICAgICA8TGluayBocmVmPVwiL2Rhc2hib2FyZFwiIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICBEcmFtYUxpbmdcclxuICAgICAgICAgICAgPC9MaW5rPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpmbGV4IHNwYWNlLXgtNlwiPlxyXG4gICAgICAgICAgICAgIHtuYXZJdGVtcy5tYXAoKGl0ZW0pID0+IChcclxuICAgICAgICAgICAgICAgIDxMaW5rXHJcbiAgICAgICAgICAgICAgICAgIGtleT17aXRlbS5ocmVmfVxyXG4gICAgICAgICAgICAgICAgICBocmVmPXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzICR7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUgPT09IGl0ZW0uaHJlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgPyAndGV4dC1wcmltYXJ5J1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xyXG4gICAgICAgICAgICAgICAgICB9YH1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge2l0ZW0ubGFiZWx9XHJcbiAgICAgICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTRcIj5cclxuICAgICAgICAgICAgey8qIOWtuOe/kuaooeW8j+eahOe1kOadn+WtuOe/kuaMiemIlSAqL31cclxuICAgICAgICAgICAge3Nob3dFeGl0TGVhcm5pbmcgPyAoXHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17b25FeGl0TGVhcm5pbmd9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIMOXIOe1kOadn+WtuOe/klxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICB7Lyog6YCa55+l5oyJ6YiVICovfVxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJwLTIgdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgey8qIOeUqOaItuizh+ioiiAqL31cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCBiZy1wcmltYXJ5IHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtc2VtaWJvbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7dXNlcj8udXNlcm5hbWU/LlswXT8udG9VcHBlckNhc2UoKSB8fCAnVSd9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+e3VzZXI/LmRpc3BsYXlOYW1lIHx8IHVzZXI/LnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2xvZ291dH1cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtbC00IHRleHQtc20gdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIOeZu+WHulxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uYXY+XHJcbiAgKVxyXG59Il0sIm5hbWVzIjpbIkxpbmsiLCJ1c2VQYXRobmFtZSIsInVzZUF1dGgiLCJOYXZpZ2F0aW9uIiwic2hvd0V4aXRMZWFybmluZyIsIm9uRXhpdExlYXJuaW5nIiwidXNlciIsImxvZ291dCIsInBhdGhuYW1lIiwibmF2SXRlbXMiLCJocmVmIiwibGFiZWwiLCJuYXYiLCJjbGFzc05hbWUiLCJkaXYiLCJtYXAiLCJpdGVtIiwiYnV0dG9uIiwib25DbGljayIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInVzZXJuYW1lIiwidG9VcHBlckNhc2UiLCJzcGFuIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/Navigation.tsx\n"); /***/ }), diff --git a/frontend/.next/server/webpack-runtime.js b/frontend/.next/server/webpack-runtime.js index 078a9a3..57f70d1 100644 --- a/frontend/.next/server/webpack-runtime.js +++ b/frontend/.next/server/webpack-runtime.js @@ -117,7 +117,7 @@ /******/ /******/ /* webpack/runtime/getFullHash */ /******/ (() => { -/******/ __webpack_require__.h = () => ("315acc0f2cb54e5e") +/******/ __webpack_require__.h = () => ("ae091822de28af5f") /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ @@ -205,5 +205,5 @@ /******/ /******/ })() -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLXJ1bnRpbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBzb3VyY2Ugd2FzIGdlbmVyYXRlZCBieSBOZXh0LmpzIGJhc2VkIG9mZiBvZiB0aGUgZ2VuZXJhdGVkIFdlYnBhY2sgcnVudGltZS5cbi8vIFRoZSBtYXBwaW5ncyBhcmUgaW5jb3JyZWN0LlxuLy8gVG8gZ2V0IHRoZSBjb3JyZWN0IGxpbmUvY29sdW1uIG1hcHBpbmdzLCB0dXJuIG9mZiBzb3VyY2VtYXBzIGluIHlvdXIgZGVidWdnZXIuXG5cbi8qKioqKiovICgoKSA9PiB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0XCJ1c2Ugc3RyaWN0XCI7XG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlc19fID0gKHt9KTtcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0dmFyIHRocmV3ID0gdHJ1ZTtcbi8qKioqKiovIFx0XHR0cnkge1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqLyBcdFx0XHR0aHJldyA9IGZhbHNlO1xuLyoqKioqKi8gXHRcdH0gZmluYWxseSB7XG4vKioqKioqLyBcdFx0XHRpZih0aHJldykgZGVsZXRlIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0ICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG4vKioqKioqLyBcdFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG4vKioqKioqLyBcdFx0XHRcdCgpID0+IChtb2R1bGUpO1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvY3JlYXRlIGZha2UgbmFtZXNwYWNlIG9iamVjdCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiA/IChvYmopID0+IChPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSkgOiAob2JqKSA9PiAob2JqLl9fcHJvdG9fXyk7XG4vKioqKioqLyBcdFx0dmFyIGxlYWZQcm90b3R5cGVzO1xuLyoqKioqKi8gXHRcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHRcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHRcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHRcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHRcdC8vIG1vZGUgJiAxNjogcmV0dXJuIHZhbHVlIHdoZW4gaXQncyBQcm9taXNlLWxpa2Vcbi8qKioqKiovIFx0XHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IHRoaXModmFsdWUpO1xuLyoqKioqKi8gXHRcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRcdGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUpIHtcbi8qKioqKiovIFx0XHRcdFx0aWYoKG1vZGUgJiA0KSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0XHRcdGlmKChtb2RlICYgMTYpICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRcdHZhciBkZWYgPSB7fTtcbi8qKioqKiovIFx0XHRcdGxlYWZQcm90b3R5cGVzID0gbGVhZlByb3RvdHlwZXMgfHwgW251bGwsIGdldFByb3RvKHt9KSwgZ2V0UHJvdG8oW10pLCBnZXRQcm90byhnZXRQcm90byldO1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBjdXJyZW50ID0gbW9kZSAmIDIgJiYgdmFsdWU7IHR5cGVvZiBjdXJyZW50ID09ICdvYmplY3QnICYmICF+bGVhZlByb3RvdHlwZXMuaW5kZXhPZihjdXJyZW50KTsgY3VycmVudCA9IGdldFByb3RvKGN1cnJlbnQpKSB7XG4vKioqKioqLyBcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQpLmZvckVhY2goKGtleSkgPT4gKGRlZltrZXldID0gKCkgPT4gKHZhbHVlW2tleV0pKSk7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRkZWZbJ2RlZmF1bHQnXSA9ICgpID0+ICh2YWx1ZSk7XG4vKioqKioqLyBcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGRlZik7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9lbnN1cmUgY2h1bmsgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmYgPSB7fTtcbi8qKioqKiovIFx0XHQvLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vKioqKioqLyBcdFx0Ly8gVGhlIGNodW5rIGxvYWRpbmcgZnVuY3Rpb24gZm9yIGFkZGl0aW9uYWwgY2h1bmtzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5lID0gKGNodW5rSWQpID0+IHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmZba2V5XShjaHVua0lkLCBwcm9taXNlcyk7XG4vKioqKioqLyBcdFx0XHRcdHJldHVybiBwcm9taXNlcztcbi8qKioqKiovIFx0XHRcdH0sIFtdKSk7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rcyBhbmQgc2libGluZyBjaHVua3MgZm9yIHRoZSBlbnRyeXBvaW50XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcbi8qKioqKiovIFx0XHRcdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5oID0gKCkgPT4gKFwiMzE1YWNjMGYyY2I1NGU1ZVwiKVxuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSlcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcbi8qKioqKiovIFx0XHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZCA9IChtb2R1bGUpID0+IHtcbi8qKioqKiovIFx0XHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuLyoqKioqKi8gXHRcdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIG1vZHVsZTtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL3N0YXJ0dXAgZW50cnlwb2ludCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uWCA9IChyZXN1bHQsIGNodW5rSWRzLCBmbikgPT4ge1xuLyoqKioqKi8gXHRcdFx0Ly8gYXJndW1lbnRzOiBjaHVua0lkcywgbW9kdWxlSWQgYXJlIGRlcHJlY2F0ZWRcbi8qKioqKiovIFx0XHRcdHZhciBtb2R1bGVJZCA9IGNodW5rSWRzO1xuLyoqKioqKi8gXHRcdFx0aWYoIWZuKSBjaHVua0lkcyA9IHJlc3VsdCwgZm4gPSAoKSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBtb2R1bGVJZCkpO1xuLyoqKioqKi8gXHRcdFx0Y2h1bmtJZHMubWFwKF9fd2VicGFja19yZXF1aXJlX18uZSwgX193ZWJwYWNrX3JlcXVpcmVfXylcbi8qKioqKiovIFx0XHRcdHZhciByID0gZm4oKTtcbi8qKioqKiovIFx0XHRcdHJldHVybiByID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiByO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9yZXF1aXJlIGNodW5rIGxvYWRpbmcgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBubyBiYXNlVVJJXG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0Ly8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8qKioqKiovIFx0XHQvLyBcIjFcIiBtZWFucyBcImxvYWRlZFwiLCBvdGhlcndpc2Ugbm90IGxvYWRlZCB5ZXRcbi8qKioqKiovIFx0XHR2YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuLyoqKioqKi8gXHRcdFx0XCJ3ZWJwYWNrLXJ1bnRpbWVcIjogMVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0Ly8gbm8gb24gY2h1bmtzIGxvYWRlZFxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdHZhciBpbnN0YWxsQ2h1bmsgPSAoY2h1bmspID0+IHtcbi8qKioqKiovIFx0XHRcdHZhciBtb3JlTW9kdWxlcyA9IGNodW5rLm1vZHVsZXMsIGNodW5rSWRzID0gY2h1bmsuaWRzLCBydW50aW1lID0gY2h1bmsucnVudGltZTtcbi8qKioqKiovIFx0XHRcdGZvcih2YXIgbW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcbi8qKioqKiovIFx0XHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRpZihydW50aW1lKSBydW50aW1lKF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNodW5rSWRzLmxlbmd0aDsgaSsrKVxuLyoqKioqKi8gXHRcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZHNbaV1dID0gMTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIHJlcXVpcmUoKSBjaHVuayBsb2FkaW5nIGZvciBqYXZhc2NyaXB0XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mLnJlcXVpcmUgPSAoY2h1bmtJZCwgcHJvbWlzZXMpID0+IHtcbi8qKioqKiovIFx0XHRcdC8vIFwiMVwiIGlzIHRoZSBzaWduYWwgZm9yIFwiYWxyZWFkeSBsb2FkZWRcIlxuLyoqKioqKi8gXHRcdFx0aWYoIWluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuLyoqKioqKi8gXHRcdFx0XHRpZihcIndlYnBhY2stcnVudGltZVwiICE9IGNodW5rSWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRpbnN0YWxsQ2h1bmsocmVxdWlyZShcIi4vXCIgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLnUoY2h1bmtJZCkpKTtcbi8qKioqKiovIFx0XHRcdFx0fSBlbHNlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IDE7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX187XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5DID0gaW5zdGFsbENodW5rO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIG5vIEhNUlxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIG5vIEhNUiBtYW5pZmVzdFxuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcbi8qKioqKiovIH0pKClcbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLXJ1bnRpbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBzb3VyY2Ugd2FzIGdlbmVyYXRlZCBieSBOZXh0LmpzIGJhc2VkIG9mZiBvZiB0aGUgZ2VuZXJhdGVkIFdlYnBhY2sgcnVudGltZS5cbi8vIFRoZSBtYXBwaW5ncyBhcmUgaW5jb3JyZWN0LlxuLy8gVG8gZ2V0IHRoZSBjb3JyZWN0IGxpbmUvY29sdW1uIG1hcHBpbmdzLCB0dXJuIG9mZiBzb3VyY2VtYXBzIGluIHlvdXIgZGVidWdnZXIuXG5cbi8qKioqKiovICgoKSA9PiB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0XCJ1c2Ugc3RyaWN0XCI7XG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlc19fID0gKHt9KTtcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0dmFyIHRocmV3ID0gdHJ1ZTtcbi8qKioqKiovIFx0XHR0cnkge1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqLyBcdFx0XHR0aHJldyA9IGZhbHNlO1xuLyoqKioqKi8gXHRcdH0gZmluYWxseSB7XG4vKioqKioqLyBcdFx0XHRpZih0aHJldykgZGVsZXRlIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0ICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG4vKioqKioqLyBcdFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG4vKioqKioqLyBcdFx0XHRcdCgpID0+IChtb2R1bGUpO1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvY3JlYXRlIGZha2UgbmFtZXNwYWNlIG9iamVjdCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiA/IChvYmopID0+IChPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSkgOiAob2JqKSA9PiAob2JqLl9fcHJvdG9fXyk7XG4vKioqKioqLyBcdFx0dmFyIGxlYWZQcm90b3R5cGVzO1xuLyoqKioqKi8gXHRcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHRcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHRcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHRcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHRcdC8vIG1vZGUgJiAxNjogcmV0dXJuIHZhbHVlIHdoZW4gaXQncyBQcm9taXNlLWxpa2Vcbi8qKioqKiovIFx0XHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IHRoaXModmFsdWUpO1xuLyoqKioqKi8gXHRcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRcdGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUpIHtcbi8qKioqKiovIFx0XHRcdFx0aWYoKG1vZGUgJiA0KSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0XHRcdGlmKChtb2RlICYgMTYpICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRcdHZhciBkZWYgPSB7fTtcbi8qKioqKiovIFx0XHRcdGxlYWZQcm90b3R5cGVzID0gbGVhZlByb3RvdHlwZXMgfHwgW251bGwsIGdldFByb3RvKHt9KSwgZ2V0UHJvdG8oW10pLCBnZXRQcm90byhnZXRQcm90byldO1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBjdXJyZW50ID0gbW9kZSAmIDIgJiYgdmFsdWU7IHR5cGVvZiBjdXJyZW50ID09ICdvYmplY3QnICYmICF+bGVhZlByb3RvdHlwZXMuaW5kZXhPZihjdXJyZW50KTsgY3VycmVudCA9IGdldFByb3RvKGN1cnJlbnQpKSB7XG4vKioqKioqLyBcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQpLmZvckVhY2goKGtleSkgPT4gKGRlZltrZXldID0gKCkgPT4gKHZhbHVlW2tleV0pKSk7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRkZWZbJ2RlZmF1bHQnXSA9ICgpID0+ICh2YWx1ZSk7XG4vKioqKioqLyBcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGRlZik7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9lbnN1cmUgY2h1bmsgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmYgPSB7fTtcbi8qKioqKiovIFx0XHQvLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vKioqKioqLyBcdFx0Ly8gVGhlIGNodW5rIGxvYWRpbmcgZnVuY3Rpb24gZm9yIGFkZGl0aW9uYWwgY2h1bmtzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5lID0gKGNodW5rSWQpID0+IHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmZba2V5XShjaHVua0lkLCBwcm9taXNlcyk7XG4vKioqKioqLyBcdFx0XHRcdHJldHVybiBwcm9taXNlcztcbi8qKioqKiovIFx0XHRcdH0sIFtdKSk7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rcyBhbmQgc2libGluZyBjaHVua3MgZm9yIHRoZSBlbnRyeXBvaW50XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcbi8qKioqKiovIFx0XHRcdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5oID0gKCkgPT4gKFwiYWUwOTE4MjJkZTI4YWY1ZlwiKVxuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSlcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcbi8qKioqKiovIFx0XHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZCA9IChtb2R1bGUpID0+IHtcbi8qKioqKiovIFx0XHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuLyoqKioqKi8gXHRcdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIG1vZHVsZTtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL3N0YXJ0dXAgZW50cnlwb2ludCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uWCA9IChyZXN1bHQsIGNodW5rSWRzLCBmbikgPT4ge1xuLyoqKioqKi8gXHRcdFx0Ly8gYXJndW1lbnRzOiBjaHVua0lkcywgbW9kdWxlSWQgYXJlIGRlcHJlY2F0ZWRcbi8qKioqKiovIFx0XHRcdHZhciBtb2R1bGVJZCA9IGNodW5rSWRzO1xuLyoqKioqKi8gXHRcdFx0aWYoIWZuKSBjaHVua0lkcyA9IHJlc3VsdCwgZm4gPSAoKSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBtb2R1bGVJZCkpO1xuLyoqKioqKi8gXHRcdFx0Y2h1bmtJZHMubWFwKF9fd2VicGFja19yZXF1aXJlX18uZSwgX193ZWJwYWNrX3JlcXVpcmVfXylcbi8qKioqKiovIFx0XHRcdHZhciByID0gZm4oKTtcbi8qKioqKiovIFx0XHRcdHJldHVybiByID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiByO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9yZXF1aXJlIGNodW5rIGxvYWRpbmcgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBubyBiYXNlVVJJXG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0Ly8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8qKioqKiovIFx0XHQvLyBcIjFcIiBtZWFucyBcImxvYWRlZFwiLCBvdGhlcndpc2Ugbm90IGxvYWRlZCB5ZXRcbi8qKioqKiovIFx0XHR2YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuLyoqKioqKi8gXHRcdFx0XCJ3ZWJwYWNrLXJ1bnRpbWVcIjogMVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0Ly8gbm8gb24gY2h1bmtzIGxvYWRlZFxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdHZhciBpbnN0YWxsQ2h1bmsgPSAoY2h1bmspID0+IHtcbi8qKioqKiovIFx0XHRcdHZhciBtb3JlTW9kdWxlcyA9IGNodW5rLm1vZHVsZXMsIGNodW5rSWRzID0gY2h1bmsuaWRzLCBydW50aW1lID0gY2h1bmsucnVudGltZTtcbi8qKioqKiovIFx0XHRcdGZvcih2YXIgbW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcbi8qKioqKiovIFx0XHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRpZihydW50aW1lKSBydW50aW1lKF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNodW5rSWRzLmxlbmd0aDsgaSsrKVxuLyoqKioqKi8gXHRcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZHNbaV1dID0gMTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIHJlcXVpcmUoKSBjaHVuayBsb2FkaW5nIGZvciBqYXZhc2NyaXB0XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mLnJlcXVpcmUgPSAoY2h1bmtJZCwgcHJvbWlzZXMpID0+IHtcbi8qKioqKiovIFx0XHRcdC8vIFwiMVwiIGlzIHRoZSBzaWduYWwgZm9yIFwiYWxyZWFkeSBsb2FkZWRcIlxuLyoqKioqKi8gXHRcdFx0aWYoIWluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuLyoqKioqKi8gXHRcdFx0XHRpZihcIndlYnBhY2stcnVudGltZVwiICE9IGNodW5rSWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRpbnN0YWxsQ2h1bmsocmVxdWlyZShcIi4vXCIgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLnUoY2h1bmtJZCkpKTtcbi8qKioqKiovIFx0XHRcdFx0fSBlbHNlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IDE7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX187XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5DID0gaW5zdGFsbENodW5rO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIG5vIEhNUlxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIG5vIEhNUiBtYW5pZmVzdFxuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcbi8qKioqKiovIH0pKClcbiJdfQ== ; \ No newline at end of file diff --git a/frontend/.next/static/chunks/app/dashboard/page.js b/frontend/.next/static/chunks/app/dashboard/page.js index 1729a90..59243ac 100644 --- a/frontend/.next/static/chunks/app/dashboard/page.js +++ b/frontend/.next/static/chunks/app/dashboard/page.js @@ -26,7 +26,7 @@ eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* har /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n },\n {\n href: '/generate',\n label: 'AI 生成'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 28,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 22,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 46,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 45,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 53,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 56,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 57,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 52,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 43,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 21,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 20,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 19,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQUV6QyxTQUFTRztRQStDQ0MsaUJBQUFBOztJQTlDZixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdILDhEQUFPQTtJQUNoQyxNQUFNSSxXQUFXTCw0REFBV0E7SUFFNUIsTUFBTU0sV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO1FBQzlCO1lBQUVELE1BQU07WUFBYUMsT0FBTztRQUFRO0tBQ3JDO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDWCxrREFBSUE7Z0NBQUNRLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDZCxrREFBSUE7d0NBRUhRLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsaUNBSVYsT0FIQ0wsYUFBYVEsS0FBS04sSUFBSSxHQUNsQixpQkFDQTtrREFHTE0sS0FBS0wsS0FBSzt1Q0FSTkssS0FBS04sSUFBSTs7Ozs7Ozs7Ozs7Ozs7OztrQ0FjdEIsOERBQUNJO3dCQUFJRCxXQUFVOzswQ0FFYiw4REFBQ0k7Z0NBQU9KLFdBQVU7MENBQ2hCLDRFQUFDSztvQ0FBSUwsV0FBVTtvQ0FBVU0sTUFBSztvQ0FBT0MsUUFBTztvQ0FBZUMsU0FBUTs4Q0FDakUsNEVBQUNDO3dDQUFLQyxlQUFjO3dDQUFRQyxnQkFBZTt3Q0FBUUMsYUFBYTt3Q0FBR0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7OzswQ0FLekUsOERBQUNaO2dDQUFJRCxXQUFVOztrREFDYiw4REFBQ0M7d0NBQUlELFdBQVU7a0RBQ1pQLENBQUFBLGlCQUFBQSw0QkFBQUEsaUJBQUFBLEtBQU1xQixRQUFRLGNBQWRyQixzQ0FBQUEsa0JBQUFBLGNBQWdCLENBQUMsRUFBRSxjQUFuQkEsc0NBQUFBLGdCQUFxQnNCLFdBQVcsT0FBTTs7Ozs7O2tEQUV6Qyw4REFBQ0M7d0NBQUtoQixXQUFVO2tEQUF1QlAsQ0FBQUEsaUJBQUFBLDJCQUFBQSxLQUFNd0IsV0FBVyxNQUFJeEIsaUJBQUFBLDJCQUFBQSxLQUFNcUIsUUFBUTs7Ozs7O2tEQUMxRSw4REFBQ1Y7d0NBQ0NjLFNBQVN4Qjt3Q0FDVE0sV0FBVTtrREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmO0dBOURnQlI7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oKSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfSxcclxuICAgIHsgaHJlZjogJy9nZW5lcmF0ZScsIGxhYmVsOiAnQUkg55Sf5oiQJyB9LFxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog6YCa55+l5oyJ6YiVICovfVxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgey8qIOeUqOaItuizh+ioiiAqL31cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctOCBoLTggYmctcHJpbWFyeSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LXNlbWlib2xkXCI+XHJcbiAgICAgICAgICAgICAgICB7dXNlcj8udXNlcm5hbWU/LlswXT8udG9VcHBlckNhc2UoKSB8fCAnVSd9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPnt1c2VyPy5kaXNwbGF5TmFtZSB8fCB1c2VyPy51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWwtNCB0ZXh0LXNtIHRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uYXY+XHJcbiAgKVxyXG59Il0sIm5hbWVzIjpbIkxpbmsiLCJ1c2VQYXRobmFtZSIsInVzZUF1dGgiLCJOYXZpZ2F0aW9uIiwidXNlciIsImxvZ291dCIsInBhdGhuYW1lIiwibmF2SXRlbXMiLCJocmVmIiwibGFiZWwiLCJuYXYiLCJjbGFzc05hbWUiLCJkaXYiLCJtYXAiLCJpdGVtIiwiYnV0dG9uIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSIsIm9uQ2xpY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n let { showExitLearning = false, onExitLearning } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: showExitLearning ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onExitLearning,\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 59,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 70,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 71,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQU96QyxTQUFTRztRQUFXLEVBQUVDLG1CQUFtQixLQUFLLEVBQUVDLGNBQWMsRUFBbUIsR0FBN0QsaUVBQWdFLENBQUM7UUF3RHZFQyxpQkFBQUE7O0lBdkRuQixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdMLDhEQUFPQTtJQUNoQyxNQUFNTSxXQUFXUCw0REFBV0E7SUFFNUIsTUFBTVEsV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO0tBQy9CO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDYixrREFBSUE7Z0NBQUNVLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDaEIsa0RBQUlBO3dDQUVIVSxNQUFNTSxLQUFLTixJQUFJO3dDQUNmRyxXQUFXLGlDQUlWLE9BSENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0E7a0RBR0xNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTtrQ0FFWlQsaUNBQ0MsOERBQUNhOzRCQUNDQyxTQUFTYjs0QkFDVFEsV0FBVTtzQ0FDWDs7Ozs7aURBSUQ7OzhDQUVFLDhEQUFDSTtvQ0FBT0osV0FBVTs4Q0FDaEIsNEVBQUNNO3dDQUFJTixXQUFVO3dDQUFVTyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzhDQUt6RSw4REFBQ2I7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTtzREFDWlAsQ0FBQUEsaUJBQUFBLDRCQUFBQSxpQkFBQUEsS0FBTXNCLFFBQVEsY0FBZHRCLHNDQUFBQSxrQkFBQUEsY0FBZ0IsQ0FBQyxFQUFFLGNBQW5CQSxzQ0FBQUEsZ0JBQXFCdUIsV0FBVyxPQUFNOzs7Ozs7c0RBRXpDLDhEQUFDQzs0Q0FBS2pCLFdBQVU7c0RBQXVCUCxDQUFBQSxpQkFBQUEsMkJBQUFBLEtBQU15QixXQUFXLE1BQUl6QixpQkFBQUEsMkJBQUFBLEtBQU1zQixRQUFROzs7Ozs7c0RBQzFFLDhEQUFDWDs0Q0FDQ0MsU0FBU1g7NENBQ1RNLFdBQVU7c0RBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV25CO0dBekVnQlY7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuaW50ZXJmYWNlIE5hdmlnYXRpb25Qcm9wcyB7XHJcbiAgc2hvd0V4aXRMZWFybmluZz86IGJvb2xlYW5cclxuICBvbkV4aXRMZWFybmluZz86ICgpID0+IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oeyBzaG93RXhpdExlYXJuaW5nID0gZmFsc2UsIG9uRXhpdExlYXJuaW5nIH06IE5hdmlnYXRpb25Qcm9wcyA9IHt9KSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfVxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog5a2457+S5qih5byP55qE57WQ5p2f5a2457+S5oyJ6YiVICovfVxyXG4gICAgICAgICAgICB7c2hvd0V4aXRMZWFybmluZyA/IChcclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkV4aXRMZWFybmluZ31cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgw5cg57WQ5p2f5a2457+SXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIHsvKiDpgJrnn6XmjInpiJUgKi99XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDE3aDVsLTEuNDA1LTEuNDA1QTIuMDMyIDIuMDMyIDAgMDExOCAxNC4xNThWMTFhNi4wMDIgNi4wMDIgMCAwMC00LTUuNjU5VjVhMiAyIDAgMTAtNCAwdi4zNDFDNy42NyA2LjE2NSA2IDguMzg4IDYgMTF2My4xNTljMCAuNTM4LS4yMTQgMS4wNTUtLjU5NSAxLjQzNkw0IDE3aDVtNiAwdjFhMyAzIDAgMTEtNiAwdi0xbTYgMEg5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICB7Lyog55So5oi26LOH6KiKICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTggaC04IGJnLXByaW1hcnkgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt1c2VyPy51c2VybmFtZT8uWzBdPy50b1VwcGVyQ2FzZSgpIHx8ICdVJ31cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW1cIj57dXNlcj8uZGlzcGxheU5hbWUgfHwgdXNlcj8udXNlcm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1sLTQgdGV4dC1zbSB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25hdj5cclxuICApXHJcbn0iXSwibmFtZXMiOlsiTGluayIsInVzZVBhdGhuYW1lIiwidXNlQXV0aCIsIk5hdmlnYXRpb24iLCJzaG93RXhpdExlYXJuaW5nIiwib25FeGl0TGVhcm5pbmciLCJ1c2VyIiwibG9nb3V0IiwicGF0aG5hbWUiLCJuYXZJdGVtcyIsImhyZWYiLCJsYWJlbCIsIm5hdiIsImNsYXNzTmFtZSIsImRpdiIsIm1hcCIsIml0ZW0iLCJidXR0b24iLCJvbkNsaWNrIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); /***/ }), diff --git a/frontend/.next/static/chunks/app/flashcards/page.js b/frontend/.next/static/chunks/app/flashcards/page.js index cb07b06..0cd5ec9 100644 --- a/frontend/.next/static/chunks/app/flashcards/page.js +++ b/frontend/.next/static/chunks/app/flashcards/page.js @@ -37,7 +37,7 @@ eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* har /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n },\n {\n href: '/generate',\n label: 'AI 生成'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 28,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 22,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 46,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 45,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 53,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 56,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 57,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 52,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 43,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 21,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 20,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 19,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQUV6QyxTQUFTRztRQStDQ0MsaUJBQUFBOztJQTlDZixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdILDhEQUFPQTtJQUNoQyxNQUFNSSxXQUFXTCw0REFBV0E7SUFFNUIsTUFBTU0sV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO1FBQzlCO1lBQUVELE1BQU07WUFBYUMsT0FBTztRQUFRO0tBQ3JDO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDWCxrREFBSUE7Z0NBQUNRLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDZCxrREFBSUE7d0NBRUhRLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsaUNBSVYsT0FIQ0wsYUFBYVEsS0FBS04sSUFBSSxHQUNsQixpQkFDQTtrREFHTE0sS0FBS0wsS0FBSzt1Q0FSTkssS0FBS04sSUFBSTs7Ozs7Ozs7Ozs7Ozs7OztrQ0FjdEIsOERBQUNJO3dCQUFJRCxXQUFVOzswQ0FFYiw4REFBQ0k7Z0NBQU9KLFdBQVU7MENBQ2hCLDRFQUFDSztvQ0FBSUwsV0FBVTtvQ0FBVU0sTUFBSztvQ0FBT0MsUUFBTztvQ0FBZUMsU0FBUTs4Q0FDakUsNEVBQUNDO3dDQUFLQyxlQUFjO3dDQUFRQyxnQkFBZTt3Q0FBUUMsYUFBYTt3Q0FBR0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7OzswQ0FLekUsOERBQUNaO2dDQUFJRCxXQUFVOztrREFDYiw4REFBQ0M7d0NBQUlELFdBQVU7a0RBQ1pQLENBQUFBLGlCQUFBQSw0QkFBQUEsaUJBQUFBLEtBQU1xQixRQUFRLGNBQWRyQixzQ0FBQUEsa0JBQUFBLGNBQWdCLENBQUMsRUFBRSxjQUFuQkEsc0NBQUFBLGdCQUFxQnNCLFdBQVcsT0FBTTs7Ozs7O2tEQUV6Qyw4REFBQ0M7d0NBQUtoQixXQUFVO2tEQUF1QlAsQ0FBQUEsaUJBQUFBLDJCQUFBQSxLQUFNd0IsV0FBVyxNQUFJeEIsaUJBQUFBLDJCQUFBQSxLQUFNcUIsUUFBUTs7Ozs7O2tEQUMxRSw4REFBQ1Y7d0NBQ0NjLFNBQVN4Qjt3Q0FDVE0sV0FBVTtrREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmO0dBOURnQlI7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oKSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfSxcclxuICAgIHsgaHJlZjogJy9nZW5lcmF0ZScsIGxhYmVsOiAnQUkg55Sf5oiQJyB9LFxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog6YCa55+l5oyJ6YiVICovfVxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgey8qIOeUqOaItuizh+ioiiAqL31cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctOCBoLTggYmctcHJpbWFyeSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LXNlbWlib2xkXCI+XHJcbiAgICAgICAgICAgICAgICB7dXNlcj8udXNlcm5hbWU/LlswXT8udG9VcHBlckNhc2UoKSB8fCAnVSd9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPnt1c2VyPy5kaXNwbGF5TmFtZSB8fCB1c2VyPy51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWwtNCB0ZXh0LXNtIHRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uYXY+XHJcbiAgKVxyXG59Il0sIm5hbWVzIjpbIkxpbmsiLCJ1c2VQYXRobmFtZSIsInVzZUF1dGgiLCJOYXZpZ2F0aW9uIiwidXNlciIsImxvZ291dCIsInBhdGhuYW1lIiwibmF2SXRlbXMiLCJocmVmIiwibGFiZWwiLCJuYXYiLCJjbGFzc05hbWUiLCJkaXYiLCJtYXAiLCJpdGVtIiwiYnV0dG9uIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSIsIm9uQ2xpY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n let { showExitLearning = false, onExitLearning } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: showExitLearning ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onExitLearning,\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 59,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 70,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 71,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQU96QyxTQUFTRztRQUFXLEVBQUVDLG1CQUFtQixLQUFLLEVBQUVDLGNBQWMsRUFBbUIsR0FBN0QsaUVBQWdFLENBQUM7UUF3RHZFQyxpQkFBQUE7O0lBdkRuQixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdMLDhEQUFPQTtJQUNoQyxNQUFNTSxXQUFXUCw0REFBV0E7SUFFNUIsTUFBTVEsV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO0tBQy9CO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDYixrREFBSUE7Z0NBQUNVLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDaEIsa0RBQUlBO3dDQUVIVSxNQUFNTSxLQUFLTixJQUFJO3dDQUNmRyxXQUFXLGlDQUlWLE9BSENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0E7a0RBR0xNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTtrQ0FFWlQsaUNBQ0MsOERBQUNhOzRCQUNDQyxTQUFTYjs0QkFDVFEsV0FBVTtzQ0FDWDs7Ozs7aURBSUQ7OzhDQUVFLDhEQUFDSTtvQ0FBT0osV0FBVTs4Q0FDaEIsNEVBQUNNO3dDQUFJTixXQUFVO3dDQUFVTyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzhDQUt6RSw4REFBQ2I7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTtzREFDWlAsQ0FBQUEsaUJBQUFBLDRCQUFBQSxpQkFBQUEsS0FBTXNCLFFBQVEsY0FBZHRCLHNDQUFBQSxrQkFBQUEsY0FBZ0IsQ0FBQyxFQUFFLGNBQW5CQSxzQ0FBQUEsZ0JBQXFCdUIsV0FBVyxPQUFNOzs7Ozs7c0RBRXpDLDhEQUFDQzs0Q0FBS2pCLFdBQVU7c0RBQXVCUCxDQUFBQSxpQkFBQUEsMkJBQUFBLEtBQU15QixXQUFXLE1BQUl6QixpQkFBQUEsMkJBQUFBLEtBQU1zQixRQUFROzs7Ozs7c0RBQzFFLDhEQUFDWDs0Q0FDQ0MsU0FBU1g7NENBQ1RNLFdBQVU7c0RBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV25CO0dBekVnQlY7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuaW50ZXJmYWNlIE5hdmlnYXRpb25Qcm9wcyB7XHJcbiAgc2hvd0V4aXRMZWFybmluZz86IGJvb2xlYW5cclxuICBvbkV4aXRMZWFybmluZz86ICgpID0+IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oeyBzaG93RXhpdExlYXJuaW5nID0gZmFsc2UsIG9uRXhpdExlYXJuaW5nIH06IE5hdmlnYXRpb25Qcm9wcyA9IHt9KSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfVxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog5a2457+S5qih5byP55qE57WQ5p2f5a2457+S5oyJ6YiVICovfVxyXG4gICAgICAgICAgICB7c2hvd0V4aXRMZWFybmluZyA/IChcclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkV4aXRMZWFybmluZ31cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgw5cg57WQ5p2f5a2457+SXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIHsvKiDpgJrnn6XmjInpiJUgKi99XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDE3aDVsLTEuNDA1LTEuNDA1QTIuMDMyIDIuMDMyIDAgMDExOCAxNC4xNThWMTFhNi4wMDIgNi4wMDIgMCAwMC00LTUuNjU5VjVhMiAyIDAgMTAtNCAwdi4zNDFDNy42NyA2LjE2NSA2IDguMzg4IDYgMTF2My4xNTljMCAuNTM4LS4yMTQgMS4wNTUtLjU5NSAxLjQzNkw0IDE3aDVtNiAwdjFhMyAzIDAgMTEtNiAwdi0xbTYgMEg5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICB7Lyog55So5oi26LOH6KiKICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTggaC04IGJnLXByaW1hcnkgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt1c2VyPy51c2VybmFtZT8uWzBdPy50b1VwcGVyQ2FzZSgpIHx8ICdVJ31cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW1cIj57dXNlcj8uZGlzcGxheU5hbWUgfHwgdXNlcj8udXNlcm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1sLTQgdGV4dC1zbSB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25hdj5cclxuICApXHJcbn0iXSwibmFtZXMiOlsiTGluayIsInVzZVBhdGhuYW1lIiwidXNlQXV0aCIsIk5hdmlnYXRpb24iLCJzaG93RXhpdExlYXJuaW5nIiwib25FeGl0TGVhcm5pbmciLCJ1c2VyIiwibG9nb3V0IiwicGF0aG5hbWUiLCJuYXZJdGVtcyIsImhyZWYiLCJsYWJlbCIsIm5hdiIsImNsYXNzTmFtZSIsImRpdiIsIm1hcCIsIml0ZW0iLCJidXR0b24iLCJvbkNsaWNrIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); /***/ }), diff --git a/frontend/.next/static/chunks/app/layout.js b/frontend/.next/static/chunks/app/layout.js index 9e54091..2e5694f 100644 --- a/frontend/.next/static/chunks/app/layout.js +++ b/frontend/.next/static/chunks/app/layout.js @@ -15,7 +15,7 @@ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"fdcd4ccf38fb\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcImZkY2Q0Y2NmMzhmYlwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); +eval(__webpack_require__.ts("__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__ = (\"60dcbf7812e7\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjYwZGNiZjc4MTJlN1wiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); /***/ }), diff --git a/frontend/.next/static/chunks/app/learn/page.js b/frontend/.next/static/chunks/app/learn/page.js index 0debc8c..1ede194 100644 --- a/frontend/.next/static/chunks/app/learn/page.js +++ b/frontend/.next/static/chunks/app/learn/page.js @@ -15,7 +15,51 @@ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LearnPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\nfunction LearnPage() {\n _s();\n const [currentCardIndex, setCurrentCardIndex] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [isFlipped, setIsFlipped] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('flip');\n const [score, setScore] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n correct: 0,\n total: 0\n });\n const [selectedAnswer, setSelectedAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showResult, setShowResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [fillAnswer, setFillAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [showHint, setShowHint] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [isRecording, setIsRecording] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [audioPlaying, setAudioPlaying] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [modalImage, setModalImage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showReportModal, setShowReportModal] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [reportReason, setReportReason] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [reportingCard, setReportingCard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Mock data with real example images\n const cards = [\n {\n id: 1,\n word: 'brought',\n partOfSpeech: 'verb',\n pronunciation: '/brɔːt/',\n translation: '提出、帶來',\n definition: 'Past tense of bring; to mention or introduce a topic in conversation',\n example: 'He brought this thing up during our meeting and no one agreed.',\n exampleTranslation: '他在我們的會議中提出了這件事,但沒有人同意。',\n exampleImage: '/images/examples/bring_up.png',\n synonyms: [\n 'mentioned',\n 'raised',\n 'introduced'\n ],\n difficulty: 'B1'\n },\n {\n id: 2,\n word: 'instincts',\n partOfSpeech: 'noun',\n pronunciation: '/ˈɪnstɪŋkts/',\n translation: '本能、直覺',\n definition: 'Natural abilities that help living things survive without learning',\n example: 'Animals use their instincts to find food and stay safe.',\n exampleTranslation: '動物利用本能來尋找食物並保持安全。',\n exampleImage: '/images/examples/instinct.png',\n synonyms: [\n 'intuition',\n 'impulse',\n 'tendency'\n ],\n difficulty: 'B2'\n },\n {\n id: 3,\n word: 'warrants',\n partOfSpeech: 'noun',\n pronunciation: '/ˈwɔːrənts/',\n translation: '搜查令、授權令',\n definition: 'Official documents that give police permission to do something',\n example: 'The police obtained warrants to search the building.',\n exampleTranslation: '警方取得了搜查令來搜查這棟建築物。',\n exampleImage: '/images/examples/warrant.png',\n synonyms: [\n 'authorization',\n 'permit',\n 'license'\n ],\n difficulty: 'C1'\n }\n ];\n const currentCard = cards[currentCardIndex];\n // Quiz mode options - dynamically generate from current cards\n const quizOptions = [\n cards[currentCardIndex].translation,\n ...cards.filter((_, idx)=>idx !== currentCardIndex).map((card)=>card.translation).slice(0, 2),\n '建議、提議' // additional wrong option\n ].sort(()=>Math.random() - 0.5) // shuffle options\n ;\n const handleFlip = ()=>{\n setIsFlipped(!isFlipped);\n };\n const handleNext = ()=>{\n if (currentCardIndex < cards.length - 1) {\n setCurrentCardIndex(currentCardIndex + 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handlePrevious = ()=>{\n if (currentCardIndex > 0) {\n setCurrentCardIndex(currentCardIndex - 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handleDifficultyRate = (rating)=>{\n // Mock rating logic\n console.log(\"Rated \".concat(rating, \" for \").concat(currentCard.word));\n handleNext();\n };\n const handleQuizAnswer = (answer)=>{\n setSelectedAnswer(answer);\n setShowResult(true);\n if (answer === currentCard.translation) {\n setScore({\n ...score,\n correct: score.correct + 1,\n total: score.total + 1\n });\n } else {\n setScore({\n ...score,\n total: score.total + 1\n });\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 126,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/dashboard\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"儀表板\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 128,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/flashcards\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 129,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/learn\",\n className: \"text-gray-900 font-medium\",\n children: \"學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 130,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/generate\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"AI 生成\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 131,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 127,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 125,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>window.location.href = '/dashboard',\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 134,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 124,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 123,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 122,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-4xl mx-auto px-4 py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: \"進度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 148,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n currentCardIndex + 1,\n \" / \",\n cards.length\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 149,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 147,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full bg-gray-200 rounded-full h-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-primary h-2 rounded-full transition-all\",\n style: {\n width: \"\".concat((currentCardIndex + 1) / cards.length * 100, \"%\")\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 154,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 153,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 146,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-sm p-1 inline-flex flex-wrap\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('flip'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'flip' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"翻卡模式\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 164,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('quiz'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'quiz' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"選擇題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 174,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('fill'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'fill' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"填空題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 184,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('listening'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'listening' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"聽力測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('speaking'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'speaking' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"口說測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 204,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 163,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 162,\n columnNumber: 9\n }, this),\n mode === 'flip' ? /* Flip Card Mode */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 231,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 230,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 222,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 221,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full h-96 cursor-pointer\",\n onClick: handleFlip,\n style: {\n perspective: '1000px'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full transition-transform duration-600 \".concat(isFlipped ? 'rotate-y-180' : ''),\n style: {\n transformStyle: 'preserve-3d',\n transform: isFlipped ? 'rotateY(180deg)' : 'rotateY(0deg)'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 flex flex-col items-center justify-center\",\n style: {\n backfaceVisibility: 'hidden'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-4xl font-bold text-gray-900 mb-4\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 256,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-600 mb-2\",\n children: currentCard.partOfSpeech\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 259,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 262,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8 text-sm text-gray-400\",\n children: \"點擊翻轉查看答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 265,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 252,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 overflow-y-auto\",\n style: {\n backfaceVisibility: 'hidden',\n transform: 'rotateY(180deg)'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-1\",\n children: \"翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 280,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-bold text-gray-900\",\n children: currentCard.translation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 281,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 279,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"定義\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 284,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 285,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 283,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 288,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 289,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 text-sm mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 290,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 287,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"同義詞\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 293,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-2\",\n children: currentCard.synonyms.map((syn, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"px-3 py-1 bg-gray-100 rounded-full text-sm\",\n children: syn\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 296,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 294,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 292,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 278,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 271,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 242,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 237,\n columnNumber: 13\n }, this),\n isFlipped && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-600\",\n children: \"這個單字對你來說難度如何?\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 311,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 310,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(1),\n className: \"px-4 py-2 bg-red-100 text-red-700 rounded-lg hover:bg-red-200 transition-colors\",\n children: \"\\uD83D\\uDE14 完全不記得\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 314,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(3),\n className: \"px-4 py-2 bg-yellow-100 text-yellow-700 rounded-lg hover:bg-yellow-200 transition-colors\",\n children: \"\\uD83D\\uDE10 有點困難\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 320,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(5),\n className: \"px-4 py-2 bg-green-100 text-green-700 rounded-lg hover:bg-green-200 transition-colors\",\n children: \"\\uD83D\\uDE0A 很簡單\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 326,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 313,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 309,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 219,\n columnNumber: 11\n }, this) : mode === 'quiz' ? /* Quiz Mode - 選擇題:英文定義選中文翻譯 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 350,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 349,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 341,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 340,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"根據定義選擇正確的中文翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 358,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 359,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 mt-2\",\n children: [\n \"(\",\n currentCard.partOfSpeech,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 362,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 357,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: quizOptions.map((option, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(option),\n disabled: showResult,\n className: \"w-full p-4 text-left rounded-lg border-2 transition-all \".concat(showResult && option === currentCard.translation ? 'border-green-500 bg-green-50' : showResult && option === selectedAnswer && option !== currentCard.translation ? 'border-red-500 bg-red-50' : selectedAnswer === option ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: option\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 384,\n columnNumber: 21\n }, this),\n showResult && option === currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-green-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 387,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 386,\n columnNumber: 23\n }, this),\n showResult && option === selectedAnswer && option !== currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-red-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 392,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 391,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 383,\n columnNumber: 19\n }, this)\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 369,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 367,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 356,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 338,\n columnNumber: 11\n }, this) : mode === 'fill' ? /* Fill in the Blank Mode - 填空題 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 416,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 415,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 407,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 406,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"根據例句圖片和句子填入正確的詞彙\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 424,\n columnNumber: 17\n }, this),\n currentCard.exampleImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: currentCard.exampleImage,\n alt: \"Example context\",\n className: \"w-full rounded-lg shadow-md cursor-pointer hover:shadow-lg transition-shadow\",\n style: {\n maxHeight: '400px',\n objectFit: 'contain'\n },\n onClick: ()=>setModalImage(currentCard.exampleImage)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 429,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-gray-500 mt-2 text-center\",\n children: \"點擊圖片可放大查看\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 436,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 428,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-800 mb-4\",\n children: currentCard.example.split(currentCard.word).map((part, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n part,\n i < currentCard.example.split(currentCard.word).length - 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block w-32 border-b-2 border-gray-400 mx-1\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 446,\n columnNumber: 23\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 443,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 441,\n columnNumber: 15\n }, this),\n !showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowHint(true),\n className: \"text-sm text-primary hover:text-primary-hover flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 459,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 458,\n columnNumber: 19\n }, this),\n \"點擊查看提示\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 454,\n columnNumber: 17\n }, this),\n showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 bg-blue-50 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-blue-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"定義提示:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 469,\n columnNumber: 21\n }, this),\n \" \",\n currentCard.definition\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 468,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 467,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 423,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: fillAnswer,\n onChange: (e)=>setFillAnswer(e.target.value),\n placeholder: \"輸入答案...\",\n className: \"w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:border-primary focus:outline-none text-lg\",\n onKeyPress: (e)=>{\n if (e.key === 'Enter' && fillAnswer) {\n setShowResult(true);\n }\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 477,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 476,\n columnNumber: 13\n }, this),\n !showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>fillAnswer && setShowResult(true),\n disabled: !fillAnswer,\n className: \"w-full py-3 bg-primary text-white rounded-lg font-medium hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: \"提交答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 493,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 rounded-lg \".concat(fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'bg-green-50 border-2 border-green-500' : 'bg-red-50 border-2 border-red-500'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold \".concat(fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'text-green-700' : 'text-red-700'),\n children: fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? '✓ 正確!' : '✗ 錯誤'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 510,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 509,\n columnNumber: 17\n }, this),\n fillAnswer.toLowerCase() !== currentCard.word.toLowerCase() && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-700\",\n children: [\n \"正確答案:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-bold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 520,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 519,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-semibold mb-1\",\n children: \"完整例句:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 524,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 525,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 526,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 523,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 504,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 422,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 404,\n columnNumber: 11\n }, this) : mode === 'listening' ? /* Listening Test Mode - 聽力測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 546,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 545,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 537,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 536,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"聽音頻,選擇正確的單字\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 554,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setAudioPlaying(true);\n // Simulate audio playing\n setTimeout(()=>setAudioPlaying(false), 2000);\n },\n className: \"mx-auto mb-6 p-8 bg-gray-100 rounded-full hover:bg-gray-200 transition-colors\",\n children: audioPlaying ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-primary animate-pulse\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 567,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 566,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-gray-600\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 571,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 572,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 570,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 557,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500\",\n children: \"點擊播放按鈕聽發音\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 577,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 553,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-3\",\n children: [\n currentCard.word,\n 'determine',\n 'achieve',\n 'consider'\n ].map((word)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(word),\n disabled: showResult,\n className: \"p-4 text-lg font-medium rounded-lg border-2 transition-all \".concat(showResult && word === currentCard.word ? 'border-green-500 bg-green-50' : showResult && word === selectedAnswer && word !== currentCard.word ? 'border-red-500 bg-red-50' : selectedAnswer === word ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'),\n children: word\n }, word, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 583,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 581,\n columnNumber: 13\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-gray-50 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-2\",\n children: \"單字詳情\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 605,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 608,\n columnNumber: 21\n }, this),\n \" - \",\n currentCard.translation\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 607,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 610,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 italic\",\n children: [\n '\"',\n currentCard.example,\n '\"'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 611,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 606,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 604,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 552,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 534,\n columnNumber: 11\n }, this) : mode === 'speaking' ? /* Speaking Test Mode - 口說測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 631,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 630,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 622,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 621,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"念出以下例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 639,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 bg-gray-50 rounded-lg mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed mb-3\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 643,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 646,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 642,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"重點單字發音:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 653,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold text-lg\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 655,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 656,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-primary hover:text-primary-hover\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 659,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 658,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 657,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 654,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 652,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setIsRecording(!isRecording);\n if (!isRecording) {\n // Start recording\n setTimeout(()=>{\n setIsRecording(false);\n setShowResult(true);\n }, 3000);\n }\n },\n className: \"p-6 rounded-full transition-all \".concat(isRecording ? 'bg-red-500 hover:bg-red-600 animate-pulse' : 'bg-primary hover:bg-primary-hover'),\n children: isRecording ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 686,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 687,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 685,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 691,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 690,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 667,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: isRecording ? '錄音中... 點擊停止' : '點擊開始錄音'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 695,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 666,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-green-50 border-2 border-green-500 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-green-700 font-semibold mb-2\",\n children: \"✓ 完成口說練習!\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 703,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: \"提示:持續練習可以提高發音準確度和流暢度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 706,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 702,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 638,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 637,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 619,\n columnNumber: 11\n }, this) : null,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handlePrevious,\n disabled: currentCardIndex === 0,\n className: \"flex items-center space-x-2 px-6 py-3 bg-white rounded-lg shadow-sm hover:shadow-md transition-shadow disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 19l-7-7 7-7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 724,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 723,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"上一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 726,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 718,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleNext,\n disabled: currentCardIndex === cards.length - 1,\n className: \"flex items-center space-x-2 px-6 py-3 bg-primary text-white rounded-lg shadow-sm hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"下一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 734,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 5l7 7-7 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 736,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 735,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 729,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 717,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 144,\n columnNumber: 7\n }, this),\n modalImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-75 p-4\",\n onClick: ()=>setModalImage(null),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative max-w-4xl max-h-[90vh] bg-white rounded-lg overflow-hidden\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setModalImage(null),\n className: \"absolute top-2 right-2 z-10 p-2 bg-white bg-opacity-90 rounded-full hover:bg-opacity-100 transition-all shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-gray-700\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 758,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 757,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 753,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: modalImage,\n alt: \"Example context enlarged\",\n className: \"w-full h-full object-contain\",\n style: {\n maxHeight: 'calc(90vh - 2rem)'\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 764,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 763,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 748,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 744,\n columnNumber: 9\n }, this),\n showReportModal && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4\",\n onClick: ()=>setShowReportModal(false),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-xl max-w-md w-full p-6\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: \"回報錯誤\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 786,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowReportModal(false),\n className: \"text-gray-400 hover:text-gray-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 792,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 791,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 787,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 785,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"詞卡:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: reportingCard === null || reportingCard === void 0 ? void 0 : reportingCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 799,\n columnNumber: 20\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 798,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"測驗模式:\",\n mode === 'flip' ? '翻卡模式' : mode === 'quiz' ? '選擇題' : mode === 'fill' ? '填空題' : mode === 'listening' ? '聽力測試' : '口說測試'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 801,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 797,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"錯誤原因(選填)\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 807,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n value: reportReason,\n onChange: (e)=>setReportReason(e.target.value),\n placeholder: \"請描述錯誤內容...\",\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-primary focus:border-primary\",\n rows: 3\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 810,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 806,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // Submit error report\n console.log('Error reported:', {\n card: reportingCard,\n mode,\n reason: reportReason\n });\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n // Show success message (could add a toast notification here)\n alert('感謝您的回報,我們會盡快處理!');\n },\n className: \"flex-1 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-hover transition-colors\",\n children: \"送出回報\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 820,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n },\n className: \"flex-1 px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition-colors\",\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 838,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 819,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 781,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 777,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 120,\n columnNumber: 5\n }, this);\n}\n_s(LearnPage, \"WqPWxKK2kVLHn5FQq3JGaZOrz6Y=\");\n_c = LearnPage;\nvar _c;\n$RefreshReg$(_c, \"LearnPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FDbkI7b0NBQ0FtQyxXQUFVOzhDQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmO0dBaDFCd0JqRTtLQUFBQSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvYXBwL2xlYXJuL3BhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMZWFyblBhZ2UoKSB7XG4gIGNvbnN0IFtjdXJyZW50Q2FyZEluZGV4LCBzZXRDdXJyZW50Q2FyZEluZGV4XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc0ZsaXBwZWQsIHNldElzRmxpcHBlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGUsIHNldE1vZGVdID0gdXNlU3RhdGU8J2ZsaXAnIHwgJ3F1aXonIHwgJ2ZpbGwnIHwgJ2xpc3RlbmluZycgfCAnc3BlYWtpbmcnPignZmxpcCcpXG4gIGNvbnN0IFtzY29yZSwgc2V0U2NvcmVdID0gdXNlU3RhdGUoeyBjb3JyZWN0OiAwLCB0b3RhbDogMCB9KVxuICBjb25zdCBbc2VsZWN0ZWRBbnN3ZXIsIHNldFNlbGVjdGVkQW5zd2VyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93UmVzdWx0LCBzZXRTaG93UmVzdWx0XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZmlsbEFuc3dlciwgc2V0RmlsbEFuc3dlcl0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3Nob3dIaW50LCBzZXRTaG93SGludF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzUmVjb3JkaW5nLCBzZXRJc1JlY29yZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2F1ZGlvUGxheWluZywgc2V0QXVkaW9QbGF5aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxJbWFnZSwgc2V0TW9kYWxJbWFnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1JlcG9ydE1vZGFsLCBzZXRTaG93UmVwb3J0TW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtyZXBvcnRSZWFzb24sIHNldFJlcG9ydFJlYXNvbl0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3JlcG9ydGluZ0NhcmQsIHNldFJlcG9ydGluZ0NhcmRdID0gdXNlU3RhdGU8YW55PihudWxsKVxuXG4gIC8vIE1vY2sgZGF0YSB3aXRoIHJlYWwgZXhhbXBsZSBpbWFnZXNcbiAgY29uc3QgY2FyZHMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICB3b3JkOiAnYnJvdWdodCcsXG4gICAgICBwYXJ0T2ZTcGVlY2g6ICd2ZXJiJyxcbiAgICAgIHByb251bmNpYXRpb246ICcvYnLJlMuQdC8nLFxuICAgICAgdHJhbnNsYXRpb246ICfmj5Dlh7rjgIHluLbkvoYnLFxuICAgICAgZGVmaW5pdGlvbjogJ1Bhc3QgdGVuc2Ugb2YgYnJpbmc7IHRvIG1lbnRpb24gb3IgaW50cm9kdWNlIGEgdG9waWMgaW4gY29udmVyc2F0aW9uJyxcbiAgICAgIGV4YW1wbGU6ICdIZSBicm91Z2h0IHRoaXMgdGhpbmcgdXAgZHVyaW5nIG91ciBtZWV0aW5nIGFuZCBubyBvbmUgYWdyZWVkLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICfku5blnKjmiJHlgJHnmoTmnIPorbDkuK3mj5Dlh7rkuobpgJnku7bkuovvvIzkvYbmspLmnInkurrlkIzmhI/jgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy9icmluZ191cC5wbmcnLFxuICAgICAgc3lub255bXM6IFsnbWVudGlvbmVkJywgJ3JhaXNlZCcsICdpbnRyb2R1Y2VkJ10sXG4gICAgICBkaWZmaWN1bHR5OiAnQjEnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHdvcmQ6ICdpbnN0aW5jdHMnLFxuICAgICAgcGFydE9mU3BlZWNoOiAnbm91bicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL8uIyapuc3TJqsWLa3RzLycsXG4gICAgICB0cmFuc2xhdGlvbjogJ+acrOiDveOAgeebtOimuicsXG4gICAgICBkZWZpbml0aW9uOiAnTmF0dXJhbCBhYmlsaXRpZXMgdGhhdCBoZWxwIGxpdmluZyB0aGluZ3Mgc3Vydml2ZSB3aXRob3V0IGxlYXJuaW5nJyxcbiAgICAgIGV4YW1wbGU6ICdBbmltYWxzIHVzZSB0aGVpciBpbnN0aW5jdHMgdG8gZmluZCBmb29kIGFuZCBzdGF5IHNhZmUuJyxcbiAgICAgIGV4YW1wbGVUcmFuc2xhdGlvbjogJ+WLleeJqeWIqeeUqOacrOiDveS+huWwi+aJvumjn+eJqeS4puS/neaMgeWuieWFqOOAgicsXG4gICAgICBleGFtcGxlSW1hZ2U6ICcvaW1hZ2VzL2V4YW1wbGVzL2luc3RpbmN0LnBuZycsXG4gICAgICBzeW5vbnltczogWydpbnR1aXRpb24nLCAnaW1wdWxzZScsICd0ZW5kZW5jeSddLFxuICAgICAgZGlmZmljdWx0eTogJ0IyJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDMsXG4gICAgICB3b3JkOiAnd2FycmFudHMnLFxuICAgICAgcGFydE9mU3BlZWNoOiAnbm91bicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL8uId8mUy5ByyZludHMvJyxcbiAgICAgIHRyYW5zbGF0aW9uOiAn5pCc5p+l5Luk44CB5o6I5qyK5LukJyxcbiAgICAgIGRlZmluaXRpb246ICdPZmZpY2lhbCBkb2N1bWVudHMgdGhhdCBnaXZlIHBvbGljZSBwZXJtaXNzaW9uIHRvIGRvIHNvbWV0aGluZycsXG4gICAgICBleGFtcGxlOiAnVGhlIHBvbGljZSBvYnRhaW5lZCB3YXJyYW50cyB0byBzZWFyY2ggdGhlIGJ1aWxkaW5nLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICforabmlrnlj5blvpfkuobmkJzmn6Xku6TkvobmkJzmn6XpgJnmo5/lu7rnr4nnianjgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy93YXJyYW50LnBuZycsXG4gICAgICBzeW5vbnltczogWydhdXRob3JpemF0aW9uJywgJ3Blcm1pdCcsICdsaWNlbnNlJ10sXG4gICAgICBkaWZmaWN1bHR5OiAnQzEnXG4gICAgfVxuICBdXG5cbiAgY29uc3QgY3VycmVudENhcmQgPSBjYXJkc1tjdXJyZW50Q2FyZEluZGV4XVxuXG4gIC8vIFF1aXogbW9kZSBvcHRpb25zIC0gZHluYW1pY2FsbHkgZ2VuZXJhdGUgZnJvbSBjdXJyZW50IGNhcmRzXG4gIGNvbnN0IHF1aXpPcHRpb25zID0gW1xuICAgIGNhcmRzW2N1cnJlbnRDYXJkSW5kZXhdLnRyYW5zbGF0aW9uLFxuICAgIC4uLmNhcmRzXG4gICAgICAuZmlsdGVyKChfLCBpZHgpID0+IGlkeCAhPT0gY3VycmVudENhcmRJbmRleClcbiAgICAgIC5tYXAoY2FyZCA9PiBjYXJkLnRyYW5zbGF0aW9uKVxuICAgICAgLnNsaWNlKDAsIDIpLFxuICAgICflu7rorbDjgIHmj5DorbAnIC8vIGFkZGl0aW9uYWwgd3Jvbmcgb3B0aW9uXG4gIF0uc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KSAvLyBzaHVmZmxlIG9wdGlvbnNcblxuICBjb25zdCBoYW5kbGVGbGlwID0gKCkgPT4ge1xuICAgIHNldElzRmxpcHBlZCghaXNGbGlwcGVkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlTmV4dCA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudENhcmRJbmRleCA8IGNhcmRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHNldEN1cnJlbnRDYXJkSW5kZXgoY3VycmVudENhcmRJbmRleCArIDEpXG4gICAgICBzZXRJc0ZsaXBwZWQoZmFsc2UpXG4gICAgICBzZXRTZWxlY3RlZEFuc3dlcihudWxsKVxuICAgICAgc2V0U2hvd1Jlc3VsdChmYWxzZSlcbiAgICAgIHNldEZpbGxBbnN3ZXIoJycpXG4gICAgICBzZXRTaG93SGludChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVQcmV2aW91cyA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudENhcmRJbmRleCA+IDApIHtcbiAgICAgIHNldEN1cnJlbnRDYXJkSW5kZXgoY3VycmVudENhcmRJbmRleCAtIDEpXG4gICAgICBzZXRJc0ZsaXBwZWQoZmFsc2UpXG4gICAgICBzZXRTZWxlY3RlZEFuc3dlcihudWxsKVxuICAgICAgc2V0U2hvd1Jlc3VsdChmYWxzZSlcbiAgICAgIHNldEZpbGxBbnN3ZXIoJycpXG4gICAgICBzZXRTaG93SGludChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEaWZmaWN1bHR5UmF0ZSA9IChyYXRpbmc6IG51bWJlcikgPT4ge1xuICAgIC8vIE1vY2sgcmF0aW5nIGxvZ2ljXG4gICAgY29uc29sZS5sb2coYFJhdGVkICR7cmF0aW5nfSBmb3IgJHtjdXJyZW50Q2FyZC53b3JkfWApXG4gICAgaGFuZGxlTmV4dCgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVRdWl6QW5zd2VyID0gKGFuc3dlcjogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRBbnN3ZXIoYW5zd2VyKVxuICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICBpZiAoYW5zd2VyID09PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbikge1xuICAgICAgc2V0U2NvcmUoeyAuLi5zY29yZSwgY29ycmVjdDogc2NvcmUuY29ycmVjdCArIDEsIHRvdGFsOiBzY29yZS50b3RhbCArIDEgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2NvcmUoeyAuLi5zY29yZSwgdG90YWw6IHNjb3JlLnRvdGFsICsgMSB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1ibHVlLTUwIHRvLWluZGlnby0xMDBcIj5cbiAgICAgIHsvKiBOYXZpZ2F0aW9uICovfVxuICAgICAgPG5hdiBjbGFzc05hbWU9XCJiZy13aGl0ZSBzaGFkb3ctc20gYm9yZGVyLWJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy03eGwgbXgtYXV0byBweC00IHNtOnB4LTYgbGc6cHgtOFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaC0xNlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LThcIj5cbiAgICAgICAgICAgICAgPExpbmsgaHJlZj1cIi9kYXNoYm9hcmRcIiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1wcmltYXJ5XCI+RHJhbWFMaW5nPC9MaW5rPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpmbGV4IHNwYWNlLXgtNlwiPlxuICAgICAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCI+5YSA6KGo5p2/PC9MaW5rPlxuICAgICAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZmxhc2hjYXJkc1wiIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiPuipnuWNoTwvTGluaz5cbiAgICAgICAgICAgICAgICA8TGluayBocmVmPVwiL2xlYXJuXCIgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTkwMCBmb250LW1lZGl1bVwiPuWtuOe/kjwvTGluaz5cbiAgICAgICAgICAgICAgICA8TGluayBocmVmPVwiL2dlbmVyYXRlXCIgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCI+QUkg55Sf5oiQPC9MaW5rPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvZGFzaGJvYXJkJ31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgw5cg57WQ5p2f5a2457+SXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25hdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy00eGwgbXgtYXV0byBweC00IHB5LThcIj5cbiAgICAgICAgey8qIFByb2dyZXNzIEJhciAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi04XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+6YCy5bqmPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgIHtjdXJyZW50Q2FyZEluZGV4ICsgMX0gLyB7Y2FyZHMubGVuZ3RofVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGJnLWdyYXktMjAwIHJvdW5kZWQtZnVsbCBoLTJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSBoLTIgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IGAkeygoY3VycmVudENhcmRJbmRleCArIDEpIC8gY2FyZHMubGVuZ3RoKSAqIDEwMH0lYCB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7LyogTW9kZSBUb2dnbGUgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBtYi02XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy1zbSBwLTEgaW5saW5lLWZsZXggZmxleC13cmFwXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ2ZsaXAnKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0yIHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICBtb2RlID09PSAnZmxpcCdcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOe/u+WNoeaooeW8j1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ3F1aXonKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0yIHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICBtb2RlID09PSAncXVpeidcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOmBuOaTh+mhjFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ2ZpbGwnKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0yIHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICBtb2RlID09PSAnZmlsbCdcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOWhq+epuumhjFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ2xpc3RlbmluZycpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdsaXN0ZW5pbmcnXG4gICAgICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUnXG4gICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDogb3lipvmuKzoqaZcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RlKCdzcGVha2luZycpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdzcGVha2luZydcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOWPo+iqqua4rOipplxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHttb2RlID09PSAnZmxpcCcgPyAoXG4gICAgICAgICAgLyogRmxpcCBDYXJkIE1vZGUgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgRmxpcCBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC05NiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUZsaXB9XG4gICAgICAgICAgICAgIHN0eWxlPXt7IHBlcnNwZWN0aXZlOiAnMTAwMHB4JyB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi02MDAgJHtcbiAgICAgICAgICAgICAgICAgIGlzRmxpcHBlZCA/ICdyb3RhdGUteS0xODAnIDogJydcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3R5bGU6ICdwcmVzZXJ2ZS0zZCcsXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IGlzRmxpcHBlZCA/ICdyb3RhdGVZKDE4MGRlZyknIDogJ3JvdGF0ZVkoMGRlZyknXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsvKiBGcm9udCBvZiBjYXJkICovfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHctZnVsbCBoLWZ1bGwgYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBiYWNrZmFjZVZpc2liaWxpdHk6ICdoaWRkZW4nIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTR4bCBmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBtYi00XCI+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC53b3JkfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGcgdGV4dC1ncmF5LTYwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5wYXJ0T2ZTcGVlY2h9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5wcm9udW5jaWF0aW9ufVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTggdGV4dC1zbSB0ZXh0LWdyYXktNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgIOm7nuaTiue/u+i9ieafpeeci+etlOahiFxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB7LyogQmFjayBvZiBjYXJkICovfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHctZnVsbCBoLWZ1bGwgYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOCBvdmVyZmxvdy15LWF1dG9cIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICAgICAgICAgIGJhY2tmYWNlVmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZVkoMTgwZGVnKSdcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTFcIj7nv7vora88L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwXCI+e2N1cnJlbnRDYXJkLnRyYW5zbGF0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTFcIj7lrprnvqk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDBcIj57Y3VycmVudENhcmQuZGVmaW5pdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCBtYi0xXCI+5L6L5Y+lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+e2N1cnJlbnRDYXJkLmV4YW1wbGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIHRleHQtc20gbXQtMVwiPntjdXJyZW50Q2FyZC5leGFtcGxlVHJhbnNsYXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPuWQjOe+qeipnjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5zeW5vbnltcy5tYXAoKHN5biwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17aWR4fSBjbGFzc05hbWU9XCJweC0zIHB5LTEgYmctZ3JheS0xMDAgcm91bmRlZC1mdWxsIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3lufVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIERpZmZpY3VsdHkgUmF0aW5nICovfVxuICAgICAgICAgICAge2lzRmxpcHBlZCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtOFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMFwiPumAmeWAi+WWruWtl+WwjeS9oOS+huiqqumbo+W6puWmguS9le+8nzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXIgc3BhY2UteC0zXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURpZmZpY3VsdHlSYXRlKDEpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC00IHB5LTIgYmctcmVkLTEwMCB0ZXh0LXJlZC03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy1yZWQtMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg8J+YlCDlrozlhajkuI3oqJjlvpdcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEaWZmaWN1bHR5UmF0ZSgzKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNCBweS0yIGJnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctNzAwIHJvdW5kZWQtbGcgaG92ZXI6YmcteWVsbG93LTIwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIPCfmJAg5pyJ6bue5Zuw6ZujXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRGlmZmljdWx0eVJhdGUoNSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy1ncmVlbi0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDwn5iKIOW+iOewoeWWrlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG1vZGUgPT09ICdxdWl6JyA/IChcbiAgICAgICAgICAvKiBRdWl6IE1vZGUgLSDpgbjmk4fpoYzvvJroi7HmloflrprnvqnpgbjkuK3mlofnv7vora8gKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgUXVpeiBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTJcIj7moLnmk5rlrprnvqnpgbjmk4fmraPnorrnmoTkuK3mlofnv7vora88L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteGwgdGV4dC1ncmF5LTgwMCBsZWFkaW5nLXJlbGF4ZWRcIj5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5kZWZpbml0aW9ufVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICh7Y3VycmVudENhcmQucGFydE9mU3BlZWNofSlcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG4gICAgICAgICAgICAgIHtxdWl6T3B0aW9ucy5tYXAoKG9wdGlvbiwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAga2V5PXtpZHh9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiAhc2hvd1Jlc3VsdCAmJiBoYW5kbGVRdWl6QW5zd2VyKG9wdGlvbil9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2hvd1Jlc3VsdH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHctZnVsbCBwLTQgdGV4dC1sZWZ0IHJvdW5kZWQtbGcgYm9yZGVyLTIgdHJhbnNpdGlvbi1hbGwgJHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd1Jlc3VsdCAmJiBvcHRpb24gPT09IGN1cnJlbnRDYXJkLnRyYW5zbGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLWdyZWVuLTUwMCBiZy1ncmVlbi01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNob3dSZXN1bHQgJiYgb3B0aW9uID09PSBzZWxlY3RlZEFuc3dlciAmJiBvcHRpb24gIT09IGN1cnJlbnRDYXJkLnRyYW5zbGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTUwJ1xuICAgICAgICAgICAgICAgICAgICAgIDogc2VsZWN0ZWRBbnN3ZXIgPT09IG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1wcmltYXJ5IGJnLXByaW1hcnktbGlnaHQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJvcmRlci1ncmF5LTMwMCdcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e29wdGlvbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gY3VycmVudENhcmQudHJhbnNsYXRpb24gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNSB0ZXh0LWdyZWVuLTUwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTUgMTNsNCA0TDE5IDdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiBvcHRpb24gPT09IHNlbGVjdGVkQW5zd2VyICYmIG9wdGlvbiAhPT0gY3VycmVudENhcmQudHJhbnNsYXRpb24gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNSB0ZXh0LXJlZC01MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG1vZGUgPT09ICdmaWxsJyA/IChcbiAgICAgICAgICAvKiBGaWxsIGluIHRoZSBCbGFuayBNb2RlIC0g5aGr56m66aGMICovXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgey8qIEVycm9yIFJlcG9ydCBCdXR0b24gZm9yIEZpbGwgTW9kZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBtYi0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKGN1cnJlbnRDYXJkKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5Zue5aCx6Yyv6KqkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAg5Zue5aCx6Yyv6KqkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi00XCI+5qC55pOa5L6L5Y+l5ZyW54mH5ZKM5Y+l5a2Q5aGr5YWl5q2j56K655qE6Kme5b2ZPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIEV4YW1wbGUgSW1hZ2UgKi99XG4gICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5leGFtcGxlSW1hZ2UgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNFwiPlxuICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICBzcmM9e2N1cnJlbnRDYXJkLmV4YW1wbGVJbWFnZX1cbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiRXhhbXBsZSBjb250ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbGcgc2hhZG93LW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOnNoYWRvdy1sZyB0cmFuc2l0aW9uLXNoYWRvd1wiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1heEhlaWdodDogJzQwMHB4Jywgb2JqZWN0Rml0OiAnY29udGFpbicgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kYWxJbWFnZShjdXJyZW50Q2FyZC5leGFtcGxlSW1hZ2UpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LWdyYXktNTAwIG10LTIgdGV4dC1jZW50ZXJcIj7pu57mk4rlnJbniYflj6/mlL7lpKfmn6XnnIs8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICB7LyogRXhhbXBsZSBTZW50ZW5jZSB3aXRoIEJsYW5rICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGcgdGV4dC1ncmF5LTgwMCBtYi00XCI+XG4gICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGUuc3BsaXQoY3VycmVudENhcmQud29yZCkubWFwKChwYXJ0LCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e2l9PlxuICAgICAgICAgICAgICAgICAgICB7cGFydH1cbiAgICAgICAgICAgICAgICAgICAge2kgPCBjdXJyZW50Q2FyZC5leGFtcGxlLnNwbGl0KGN1cnJlbnRDYXJkLndvcmQpLmxlbmd0aCAtIDEgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImlubGluZS1ibG9jayB3LTMyIGJvcmRlci1iLTIgYm9yZGVyLWdyYXktNDAwIG14LTFcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBIaW50IEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgeyFzaG93SGludCAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd0hpbnQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcHJpbWFyeSBob3Zlcjp0ZXh0LXByaW1hcnktaG92ZXIgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTMgMTZoLTF2LTRoLTFtMS00aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICDpu57mk4rmn6XnnIvmj5DnpLpcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICB7LyogRGVmaW5pdGlvbiBIaW50ICovfVxuICAgICAgICAgICAgICB7c2hvd0hpbnQgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBwLTMgYmctYmx1ZS01MCByb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ibHVlLTgwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPuWumue+qeaPkOekuu+8mjwvc3Ryb25nPiB7Y3VycmVudENhcmQuZGVmaW5pdGlvbn1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBBbnN3ZXIgSW5wdXQgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtmaWxsQW5zd2VyfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0RmlsbEFuc3dlcihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLovLjlhaXnrZTmoYguLi5cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC00IHB5LTMgYm9yZGVyLTIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgZm9jdXM6Ym9yZGVyLXByaW1hcnkgZm9jdXM6b3V0bGluZS1ub25lIHRleHQtbGdcIlxuICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgZmlsbEFuc3dlcikge1xuICAgICAgICAgICAgICAgICAgICBzZXRTaG93UmVzdWx0KHRydWUpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogU3VibWl0IEJ1dHRvbiAqL31cbiAgICAgICAgICAgIHshc2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBmaWxsQW5zd2VyICYmIHNldFNob3dSZXN1bHQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFmaWxsQW5zd2VyfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweS0zIGJnLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLWxnIGZvbnQtbWVkaXVtIGhvdmVyOmJnLXByaW1hcnktaG92ZXIgdHJhbnNpdGlvbi1jb2xvcnMgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg5o+Q5Lqk562U5qGIXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgey8qIFJlc3VsdCBEaXNwbGF5ICovfVxuICAgICAgICAgICAge3Nob3dSZXN1bHQgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHAtNCByb3VuZGVkLWxnICR7XG4gICAgICAgICAgICAgICAgZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgID8gJ2JnLWdyZWVuLTUwIGJvcmRlci0yIGJvcmRlci1ncmVlbi01MDAnXG4gICAgICAgICAgICAgICAgICA6ICdiZy1yZWQtNTAgYm9yZGVyLTIgYm9yZGVyLXJlZC01MDAnXG4gICAgICAgICAgICAgIH1gfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Bmb250LXNlbWlib2xkICR7XG4gICAgICAgICAgICAgICAgICAgIGZpbGxBbnN3ZXIudG9Mb3dlckNhc2UoKSA9PT0gY3VycmVudENhcmQud29yZC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgPyAndGV4dC1ncmVlbi03MDAnXG4gICAgICAgICAgICAgICAgICAgICAgOiAndGV4dC1yZWQtNzAwJ1xuICAgICAgICAgICAgICAgICAgfWB9PlxuICAgICAgICAgICAgICAgICAgICB7ZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKCkgPyAn4pyTIOato+eiuu+8gScgOiAn4pyXIOmMr+iqpCd9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge2ZpbGxBbnN3ZXIudG9Mb3dlckNhc2UoKSAhPT0gY3VycmVudENhcmQud29yZC50b0xvd2VyQ2FzZSgpICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNzAwXCI+XG4gICAgICAgICAgICAgICAgICAgIOato+eiuuetlOahiO+8mjxzcGFuIGNsYXNzTmFtZT1cImZvbnQtYm9sZFwiPntjdXJyZW50Q2FyZC53b3JkfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHRleHQtc20gdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIG1iLTFcIj7lrozmlbTkvovlj6XvvJo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+e2N1cnJlbnRDYXJkLmV4YW1wbGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgbXQtMVwiPntjdXJyZW50Q2FyZC5leGFtcGxlVHJhbnNsYXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ2xpc3RlbmluZycgPyAoXG4gICAgICAgICAgLyogTGlzdGVuaW5nIFRlc3QgTW9kZSAtIOiBveWKm+a4rOippiAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBMaXN0ZW5pbmcgTW9kZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBtYi0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKGN1cnJlbnRDYXJkKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5Zue5aCx6Yyv6KqkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAg5Zue5aCx6Yyv6KqkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTYgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi00XCI+6IG96Z+z6aC777yM6YG45pOH5q2j56K655qE5Zau5a2XPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIEF1ZGlvIFBsYXkgQnV0dG9uICovfVxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0QXVkaW9QbGF5aW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAvLyBTaW11bGF0ZSBhdWRpbyBwbGF5aW5nXG4gICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldEF1ZGlvUGxheWluZyhmYWxzZSksIDIwMDApXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteC1hdXRvIG1iLTYgcC04IGJnLWdyYXktMTAwIHJvdW5kZWQtZnVsbCBob3ZlcjpiZy1ncmF5LTIwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7YXVkaW9QbGF5aW5nID8gKFxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTE2IGgtMTYgdGV4dC1wcmltYXJ5IGFuaW1hdGUtcHVsc2VcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1LjUzNiA4LjQ2NGE1IDUgMCAwMTAgNy4wNzJtMi44MjgtOS45YTkgOSAwIDAxMCAxMi43MjhNNS41ODYgMTVINGExIDEgMCAwMS0xLTF2LTRhMSAxIDAgMDExLTFoMS41ODZsNC43MDctNC43MDdDMTAuOTIzIDMuNjYzIDEyIDQuMTA5IDEyIDV2MTRjMCAuODkxLTEuMDc3IDEuMzM3LTEuNzA3LjcwN0w1LjU4NiAxNXpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy0xNiBoLTE2IHRleHQtZ3JheS02MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE0Ljc1MiAxMS4xNjhsLTMuMTk3LTIuMTMyQTEgMSAwIDAwMTAgOS44N3Y0LjI2M2ExIDEgMCAwMDEuNTU1LjgzMmwzLjE5Ny0yLjEzMmExIDEgMCAwMDAtMS42NjR6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTUwMFwiPum7nuaTiuaSreaUvuaMiemIleiBveeZvOmfszwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBXb3JkIE9wdGlvbnMgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAge1tjdXJyZW50Q2FyZC53b3JkLCAnZGV0ZXJtaW5lJywgJ2FjaGlldmUnLCAnY29uc2lkZXInXS5tYXAoKHdvcmQpID0+IChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e3dvcmR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiAhc2hvd1Jlc3VsdCAmJiBoYW5kbGVRdWl6QW5zd2VyKHdvcmQpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Nob3dSZXN1bHR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BwLTQgdGV4dC1sZyBmb250LW1lZGl1bSByb3VuZGVkLWxnIGJvcmRlci0yIHRyYW5zaXRpb24tYWxsICR7XG4gICAgICAgICAgICAgICAgICAgIHNob3dSZXN1bHQgJiYgd29yZCA9PT0gY3VycmVudENhcmQud29yZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1ncmVlbi01MDAgYmctZ3JlZW4tNTAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBzaG93UmVzdWx0ICYmIHdvcmQgPT09IHNlbGVjdGVkQW5zd2VyICYmIHdvcmQgIT09IGN1cnJlbnRDYXJkLndvcmRcbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZEFuc3dlciA9PT0gd29yZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1wcmltYXJ5IGJnLXByaW1hcnktbGlnaHQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJvcmRlci1ncmF5LTMwMCdcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt3b3JkfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogUmVzdWx0IERpc3BsYXkgKi99XG4gICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNiBwLTQgYmctZ3JheS01MCByb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCBtYi0yXCI+5Zau5a2X6Kmz5oOFPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGRcIj57Y3VycmVudENhcmQud29yZH08L3NwYW4+IC0ge2N1cnJlbnRDYXJkLnRyYW5zbGF0aW9ufVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMFwiPntjdXJyZW50Q2FyZC5kZWZpbml0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDAgaXRhbGljXCI+XCJ7Y3VycmVudENhcmQuZXhhbXBsZX1cIjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG1vZGUgPT09ICdzcGVha2luZycgPyAoXG4gICAgICAgICAgLyogU3BlYWtpbmcgVGVzdCBNb2RlIC0g5Y+j6Kqq5ris6KmmICovXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgey8qIEVycm9yIFJlcG9ydCBCdXR0b24gZm9yIFNwZWFraW5nIE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLThcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItNFwiPuW/teWHuuS7peS4i+S+i+WPpTwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBUYXJnZXQgU2VudGVuY2UgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC02IGJnLWdyYXktNTAgcm91bmRlZC1sZyBtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhsIHRleHQtZ3JheS04MDAgbGVhZGluZy1yZWxheGVkIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5leGFtcGxlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGVUcmFuc2xhdGlvbn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFByb251bmNpYXRpb24gR3VpZGUgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTJcIj7ph43pu57llq7lrZfnmbzpn7PvvJo8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIHRleHQtbGdcIj57Y3VycmVudENhcmQud29yZH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwXCI+e2N1cnJlbnRDYXJkLnByb251bmNpYXRpb259PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJ0ZXh0LXByaW1hcnkgaG92ZXI6dGV4dC1wcmltYXJ5LWhvdmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNS41MzYgOC40NjRhNSA1IDAgMDEwIDcuMDcybTIuODI4LTkuOWE5IDkgMCAwMTAgMTIuNzI4TTUuNTg2IDE1SDRhMSAxIDAgMDEtMS0xdi00YTEgMSAwIDAxMS0xaDEuNTg2bDQuNzA3LTQuNzA3QzEwLjkyMyAzLjY2MyAxMiA0LjEwOSAxMiA1djE0YzAgLjg5MS0xLjA3NyAxLjMzNy0xLjcwNy43MDdMNS41ODYgMTV6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlY29yZGluZyBCdXR0b24gKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldElzUmVjb3JkaW5nKCFpc1JlY29yZGluZylcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlY29yZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHJlY29yZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNSZWNvcmRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93UmVzdWx0KHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMzAwMClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHAtNiByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1hbGwgJHtcbiAgICAgICAgICAgICAgICAgICAgaXNSZWNvcmRpbmdcbiAgICAgICAgICAgICAgICAgICAgICA/ICdiZy1yZWQtNTAwIGhvdmVyOmJnLXJlZC02MDAgYW5pbWF0ZS1wdWxzZSdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdiZy1wcmltYXJ5IGhvdmVyOmJnLXByaW1hcnktaG92ZXInXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7aXNSZWNvcmRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy0xMiBoLTEyIHRleHQtd2hpdGVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNOSAxMGExIDEgMCAwMTEtMWg0YTEgMSAwIDAxMSAxdjRhMSAxIDAgMDEtMSAxaC00YTEgMSAwIDAxLTEtMXYtNHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy0xMiBoLTEyIHRleHQtd2hpdGVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTkgMTFhNyA3IDAgMDEtNyA3bTAgMGE3IDcgMCAwMS03LTdtNyA3djRtMCAwSDhtNCAwaDRtLTQtOGEzIDMgMCAwMS0zLTNWNWEzIDMgMCAxMTYgMHY2YTMgMyAwIDAxLTMgM3pcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHRleHQtc20gdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAge2lzUmVjb3JkaW5nID8gJ+mMhOmfs+S4rS4uLiDpu57mk4rlgZzmraInIDogJ+m7nuaTiumWi+Wni+mMhOmfsyd9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBSZXN1bHQgRGlzcGxheSAqL31cbiAgICAgICAgICAgICAge3Nob3dSZXN1bHQgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNiBwLTQgYmctZ3JlZW4tNTAgYm9yZGVyLTIgYm9yZGVyLWdyZWVuLTUwMCByb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JlZW4tNzAwIGZvbnQtc2VtaWJvbGQgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICDinJMg5a6M5oiQ5Y+j6Kqq57e057+S77yBXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgIOaPkOekuu+8muaMgee6jOe3tOe/kuWPr+S7peaPkOmrmOeZvOmfs+a6lueiuuW6puWSjOa1geaaouW6plxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgey8qIE5hdmlnYXRpb24gQnV0dG9ucyAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBtdC04XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUHJldmlvdXN9XG4gICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVudENhcmRJbmRleCA9PT0gMH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiBweC02IHB5LTMgYmctd2hpdGUgcm91bmRlZC1sZyBzaGFkb3ctc20gaG92ZXI6c2hhZG93LW1kIHRyYW5zaXRpb24tc2hhZG93IGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDE5bC03LTcgNy03XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPHNwYW4+5LiK5LiA5YCLPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTmV4dH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtjdXJyZW50Q2FyZEluZGV4ID09PSBjYXJkcy5sZW5ndGggLSAxfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHB4LTYgcHktMyBiZy1wcmltYXJ5IHRleHQtd2hpdGUgcm91bmRlZC1sZyBzaGFkb3ctc20gaG92ZXI6YmctcHJpbWFyeS1ob3ZlciB0cmFuc2l0aW9uLWNvbG9ycyBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+5LiL5LiA5YCLPC9zcGFuPlxuICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk05IDVsNyA3LTcgN1wiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIEltYWdlIE1vZGFsICovfVxuICAgICAge21vZGFsSW1hZ2UgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZml4ZWQgaW5zZXQtMCB6LTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWJsYWNrIGJnLW9wYWNpdHktNzUgcC00XCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RhbEltYWdlKG51bGwpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgbWF4LXctNHhsIG1heC1oLVs5MHZoXSBiZy13aGl0ZSByb3VuZGVkLWxnIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogQ2xvc2UgQnV0dG9uICovfVxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RhbEltYWdlKG51bGwpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMiByaWdodC0yIHotMTAgcC0yIGJnLXdoaXRlIGJnLW9wYWNpdHktOTAgcm91bmRlZC1mdWxsIGhvdmVyOmJnLW9wYWNpdHktMTAwIHRyYW5zaXRpb24tYWxsIHNoYWRvdy1sZ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNiB0ZXh0LWdyYXktNzAwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICB7LyogSW1hZ2UgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNFwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgc3JjPXttb2RhbEltYWdlfVxuICAgICAgICAgICAgICAgIGFsdD1cIkV4YW1wbGUgY29udGV4dCBlbmxhcmdlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBvYmplY3QtY29udGFpblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbWF4SGVpZ2h0OiAnY2FsYyg5MHZoIC0gMnJlbSknIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7LyogRXJyb3IgUmVwb3J0IE1vZGFsICovfVxuICAgICAge3Nob3dSZXBvcnRNb2RhbCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmxhY2sgYmctb3BhY2l0eS01MCBwLTRcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXBvcnRNb2RhbChmYWxzZSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy14bCBtYXgtdy1tZCB3LWZ1bGwgcC02XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTRcIj5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZFwiPuWbnuWgsemMr+iqpDwvaDM+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UmVwb3J0TW9kYWwoZmFsc2UpfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1ncmF5LTYwMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICDoqZ7ljaHvvJo8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntyZXBvcnRpbmdDYXJkPy53b3JkfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICDmuKzpqZfmqKHlvI/vvJp7bW9kZSA9PT0gJ2ZsaXAnID8gJ+e/u+WNoeaooeW8jycgOiBtb2RlID09PSAncXVpeicgPyAn6YG45pOH6aGMJyA6IG1vZGUgPT09ICdmaWxsJyA/ICfloavnqbrpoYwnIDogbW9kZSA9PT0gJ2xpc3RlbmluZycgPyAn6IG95Yqb5ris6KmmJyA6ICflj6PoqqrmuKzoqaYnfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAg6Yyv6Kqk5Y6f5Zug77yI6YG45aGr77yJXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIHZhbHVlPXtyZXBvcnRSZWFzb259XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRSZXBvcnRSZWFzb24oZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6KuL5o+P6L+w6Yyv6Kqk5YWn5a65Li4uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcHgtMyBweS0yIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBmb2N1czpyaW5nLXByaW1hcnkgZm9jdXM6Ym9yZGVyLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHJvd3M9ezN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBTdWJtaXQgZXJyb3IgcmVwb3J0XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgcmVwb3J0ZWQ6Jywge1xuICAgICAgICAgICAgICAgICAgICBjYXJkOiByZXBvcnRpbmdDYXJkLFxuICAgICAgICAgICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246IHJlcG9ydFJlYXNvblxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbChmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydFJlYXNvbignJylcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQobnVsbClcbiAgICAgICAgICAgICAgICAgIC8vIFNob3cgc3VjY2VzcyBtZXNzYWdlIChjb3VsZCBhZGQgYSB0b2FzdCBub3RpZmljYXRpb24gaGVyZSlcbiAgICAgICAgICAgICAgICAgIGFsZXJ0KCfmhJ/orJ3mgqjnmoTlm57loLHvvIzmiJHlgJHmnIPnm6Hlv6vomZXnkIbvvIEnKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHB4LTQgcHktMiBiZy1wcmltYXJ5IHRleHQtd2hpdGUgcm91bmRlZC1sZyBob3ZlcjpiZy1wcmltYXJ5LWhvdmVyIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIOmAgeWHuuWbnuWgsVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbChmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydFJlYXNvbignJylcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQobnVsbClcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBweC00IHB5LTIgYmctZ3JheS0xMDAgdGV4dC1ncmF5LTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyYXktMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIOWPlua2iFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn0iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJMaW5rIiwiTGVhcm5QYWdlIiwiY3VycmVudENhcmRJbmRleCIsInNldEN1cnJlbnRDYXJkSW5kZXgiLCJpc0ZsaXBwZWQiLCJzZXRJc0ZsaXBwZWQiLCJtb2RlIiwic2V0TW9kZSIsInNjb3JlIiwic2V0U2NvcmUiLCJjb3JyZWN0IiwidG90YWwiLCJzZWxlY3RlZEFuc3dlciIsInNldFNlbGVjdGVkQW5zd2VyIiwic2hvd1Jlc3VsdCIsInNldFNob3dSZXN1bHQiLCJmaWxsQW5zd2VyIiwic2V0RmlsbEFuc3dlciIsInNob3dIaW50Iiwic2V0U2hvd0hpbnQiLCJpc1JlY29yZGluZyIsInNldElzUmVjb3JkaW5nIiwiYXVkaW9QbGF5aW5nIiwic2V0QXVkaW9QbGF5aW5nIiwibW9kYWxJbWFnZSIsInNldE1vZGFsSW1hZ2UiLCJzaG93UmVwb3J0TW9kYWwiLCJzZXRTaG93UmVwb3J0TW9kYWwiLCJyZXBvcnRSZWFzb24iLCJzZXRSZXBvcnRSZWFzb24iLCJyZXBvcnRpbmdDYXJkIiwic2V0UmVwb3J0aW5nQ2FyZCIsImNhcmRzIiwiaWQiLCJ3b3JkIiwicGFydE9mU3BlZWNoIiwicHJvbnVuY2lhdGlvbiIsInRyYW5zbGF0aW9uIiwiZGVmaW5pdGlvbiIsImV4YW1wbGUiLCJleGFtcGxlVHJhbnNsYXRpb24iLCJleGFtcGxlSW1hZ2UiLCJzeW5vbnltcyIsImRpZmZpY3VsdHkiLCJjdXJyZW50Q2FyZCIsInF1aXpPcHRpb25zIiwiZmlsdGVyIiwiXyIsImlkeCIsIm1hcCIsImNhcmQiLCJzbGljZSIsInNvcnQiLCJNYXRoIiwicmFuZG9tIiwiaGFuZGxlRmxpcCIsImhhbmRsZU5leHQiLCJsZW5ndGgiLCJoYW5kbGVQcmV2aW91cyIsImhhbmRsZURpZmZpY3VsdHlSYXRlIiwicmF0aW5nIiwiY29uc29sZSIsImxvZyIsImhhbmRsZVF1aXpBbnN3ZXIiLCJhbnN3ZXIiLCJkaXYiLCJjbGFzc05hbWUiLCJuYXYiLCJocmVmIiwiYnV0dG9uIiwib25DbGljayIsIndpbmRvdyIsImxvY2F0aW9uIiwic3BhbiIsInN0eWxlIiwid2lkdGgiLCJ0aXRsZSIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInBlcnNwZWN0aXZlIiwidHJhbnNmb3JtU3R5bGUiLCJ0cmFuc2Zvcm0iLCJiYWNrZmFjZVZpc2liaWxpdHkiLCJzeW4iLCJvcHRpb24iLCJkaXNhYmxlZCIsImltZyIsInNyYyIsImFsdCIsIm1heEhlaWdodCIsIm9iamVjdEZpdCIsInNwbGl0IiwicGFydCIsImkiLCJzdHJvbmciLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwib25LZXlQcmVzcyIsImtleSIsInRvTG93ZXJDYXNlIiwic2V0VGltZW91dCIsInN0b3BQcm9wYWdhdGlvbiIsImgzIiwibGFiZWwiLCJ0ZXh0YXJlYSIsInJvd3MiLCJyZWFzb24iLCJhbGVydCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/learn/page.tsx\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LearnPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _components_Navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/Navigation */ \"(app-pages-browser)/./components/Navigation.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction LearnPage() {\n _s();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n const [currentCardIndex, setCurrentCardIndex] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [isFlipped, setIsFlipped] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('flip');\n const [score, setScore] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n correct: 0,\n total: 0\n });\n const [selectedAnswer, setSelectedAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showResult, setShowResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [fillAnswer, setFillAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [showHint, setShowHint] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [isRecording, setIsRecording] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [audioPlaying, setAudioPlaying] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [modalImage, setModalImage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showReportModal, setShowReportModal] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [reportReason, setReportReason] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [reportingCard, setReportingCard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Mock data with real example images\n const cards = [\n {\n id: 1,\n word: 'brought',\n partOfSpeech: 'verb',\n pronunciation: '/brɔːt/',\n translation: '提出、帶來',\n definition: 'Past tense of bring; to mention or introduce a topic in conversation',\n example: 'He brought this thing up during our meeting and no one agreed.',\n exampleTranslation: '他在我們的會議中提出了這件事,但沒有人同意。',\n exampleImage: '/images/examples/bring_up.png',\n synonyms: [\n 'mentioned',\n 'raised',\n 'introduced'\n ],\n difficulty: 'B1'\n },\n {\n id: 2,\n word: 'instincts',\n partOfSpeech: 'noun',\n pronunciation: '/ˈɪnstɪŋkts/',\n translation: '本能、直覺',\n definition: 'Natural abilities that help living things survive without learning',\n example: 'Animals use their instincts to find food and stay safe.',\n exampleTranslation: '動物利用本能來尋找食物並保持安全。',\n exampleImage: '/images/examples/instinct.png',\n synonyms: [\n 'intuition',\n 'impulse',\n 'tendency'\n ],\n difficulty: 'B2'\n },\n {\n id: 3,\n word: 'warrants',\n partOfSpeech: 'noun',\n pronunciation: '/ˈwɔːrənts/',\n translation: '搜查令、授權令',\n definition: 'Official documents that give police permission to do something',\n example: 'The police obtained warrants to search the building.',\n exampleTranslation: '警方取得了搜查令來搜查這棟建築物。',\n exampleImage: '/images/examples/warrant.png',\n synonyms: [\n 'authorization',\n 'permit',\n 'license'\n ],\n difficulty: 'C1'\n }\n ];\n const currentCard = cards[currentCardIndex];\n // Quiz mode options - dynamically generate from current cards\n const quizOptions = [\n cards[currentCardIndex].translation,\n ...cards.filter((_, idx)=>idx !== currentCardIndex).map((card)=>card.translation).slice(0, 2),\n '建議、提議' // additional wrong option\n ].sort(()=>Math.random() - 0.5) // shuffle options\n ;\n const handleFlip = ()=>{\n setIsFlipped(!isFlipped);\n };\n const handleNext = ()=>{\n if (currentCardIndex < cards.length - 1) {\n setCurrentCardIndex(currentCardIndex + 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handlePrevious = ()=>{\n if (currentCardIndex > 0) {\n setCurrentCardIndex(currentCardIndex - 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handleDifficultyRate = (rating)=>{\n // Mock rating logic\n console.log(\"Rated \".concat(rating, \" for \").concat(currentCard.word));\n handleNext();\n };\n const handleQuizAnswer = (answer)=>{\n setSelectedAnswer(answer);\n setShowResult(true);\n if (answer === currentCard.translation) {\n setScore({\n ...score,\n correct: score.correct + 1,\n total: score.total + 1\n });\n } else {\n setScore({\n ...score,\n total: score.total + 1\n });\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_Navigation__WEBPACK_IMPORTED_MODULE_3__.Navigation, {\n showExitLearning: true,\n onExitLearning: ()=>router.push('/dashboard')\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 125,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-4xl mx-auto px-4 py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: \"進度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 134,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n currentCardIndex + 1,\n \" / \",\n cards.length\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 135,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 133,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full bg-gray-200 rounded-full h-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-primary h-2 rounded-full transition-all\",\n style: {\n width: \"\".concat((currentCardIndex + 1) / cards.length * 100, \"%\")\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 140,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 139,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 132,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-sm p-1 inline-flex flex-wrap\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('flip'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'flip' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"翻卡模式\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 150,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('quiz'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'quiz' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"選擇題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 160,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('fill'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'fill' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"填空題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 170,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('listening'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'listening' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"聽力測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 180,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('speaking'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'speaking' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"口說測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 149,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 148,\n columnNumber: 9\n }, this),\n mode === 'flip' ? /* Flip Card Mode */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 217,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 216,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full h-96 cursor-pointer\",\n onClick: handleFlip,\n style: {\n perspective: '1000px'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full transition-transform duration-600 \".concat(isFlipped ? 'rotate-y-180' : ''),\n style: {\n transformStyle: 'preserve-3d',\n transform: isFlipped ? 'rotateY(180deg)' : 'rotateY(0deg)'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 flex flex-col items-center justify-center\",\n style: {\n backfaceVisibility: 'hidden'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-4xl font-bold text-gray-900 mb-4\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 242,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-600 mb-2\",\n children: currentCard.partOfSpeech\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 245,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 248,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8 text-sm text-gray-400\",\n children: \"點擊翻轉查看答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 251,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 238,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 overflow-y-auto\",\n style: {\n backfaceVisibility: 'hidden',\n transform: 'rotateY(180deg)'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-1\",\n children: \"翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 266,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-bold text-gray-900\",\n children: currentCard.translation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 267,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 265,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"定義\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 270,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 269,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 274,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 275,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 text-sm mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 276,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 273,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"同義詞\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 279,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-2\",\n children: currentCard.synonyms.map((syn, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"px-3 py-1 bg-gray-100 rounded-full text-sm\",\n children: syn\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 280,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 278,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 264,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 257,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 228,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 223,\n columnNumber: 13\n }, this),\n isFlipped && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-600\",\n children: \"這個單字對你來說難度如何?\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 297,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 296,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(1),\n className: \"px-4 py-2 bg-red-100 text-red-700 rounded-lg hover:bg-red-200 transition-colors\",\n children: \"\\uD83D\\uDE14 完全不記得\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 300,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(3),\n className: \"px-4 py-2 bg-yellow-100 text-yellow-700 rounded-lg hover:bg-yellow-200 transition-colors\",\n children: \"\\uD83D\\uDE10 有點困難\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 306,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(5),\n className: \"px-4 py-2 bg-green-100 text-green-700 rounded-lg hover:bg-green-200 transition-colors\",\n children: \"\\uD83D\\uDE0A 很簡單\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 312,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 295,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this) : mode === 'quiz' ? /* Quiz Mode - 選擇題:英文定義選中文翻譯 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 336,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 335,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 327,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 326,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"根據定義選擇正確的中文翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 344,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 345,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 mt-2\",\n children: [\n \"(\",\n currentCard.partOfSpeech,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 348,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 343,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: quizOptions.map((option, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(option),\n disabled: showResult,\n className: \"w-full p-4 text-left rounded-lg border-2 transition-all \".concat(showResult && option === currentCard.translation ? 'border-green-500 bg-green-50' : showResult && option === selectedAnswer && option !== currentCard.translation ? 'border-red-500 bg-red-50' : selectedAnswer === option ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: option\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 370,\n columnNumber: 21\n }, this),\n showResult && option === currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-green-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 373,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 372,\n columnNumber: 23\n }, this),\n showResult && option === selectedAnswer && option !== currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-red-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 378,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 377,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 369,\n columnNumber: 19\n }, this)\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 355,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 353,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 342,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 324,\n columnNumber: 11\n }, this) : mode === 'fill' ? /* Fill in the Blank Mode - 填空題 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 402,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 401,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 393,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 392,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"根據例句圖片和句子填入正確的詞彙\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 410,\n columnNumber: 17\n }, this),\n currentCard.exampleImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: currentCard.exampleImage,\n alt: \"Example context\",\n className: \"w-full rounded-lg shadow-md cursor-pointer hover:shadow-lg transition-shadow\",\n style: {\n maxHeight: '400px',\n objectFit: 'contain'\n },\n onClick: ()=>setModalImage(currentCard.exampleImage)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 415,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-gray-500 mt-2 text-center\",\n children: \"點擊圖片可放大查看\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 422,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 414,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-800 mb-4\",\n children: currentCard.example.split(currentCard.word).map((part, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n part,\n i < currentCard.example.split(currentCard.word).length - 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block w-32 border-b-2 border-gray-400 mx-1\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 432,\n columnNumber: 23\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 429,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 427,\n columnNumber: 15\n }, this),\n !showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowHint(true),\n className: \"text-sm text-primary hover:text-primary-hover flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 445,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 444,\n columnNumber: 19\n }, this),\n \"點擊查看提示\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 440,\n columnNumber: 17\n }, this),\n showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 bg-blue-50 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-blue-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"定義提示:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 455,\n columnNumber: 21\n }, this),\n \" \",\n currentCard.definition\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 454,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 453,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 409,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: fillAnswer,\n onChange: (e)=>setFillAnswer(e.target.value),\n placeholder: \"輸入答案...\",\n className: \"w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:border-primary focus:outline-none text-lg\",\n onKeyPress: (e)=>{\n if (e.key === 'Enter' && fillAnswer) {\n setShowResult(true);\n }\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 463,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 462,\n columnNumber: 13\n }, this),\n !showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>fillAnswer && setShowResult(true),\n disabled: !fillAnswer,\n className: \"w-full py-3 bg-primary text-white rounded-lg font-medium hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: \"提交答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 479,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 rounded-lg \".concat(fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'bg-green-50 border-2 border-green-500' : 'bg-red-50 border-2 border-red-500'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold \".concat(fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'text-green-700' : 'text-red-700'),\n children: fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? '✓ 正確!' : '✗ 錯誤'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 496,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 495,\n columnNumber: 17\n }, this),\n fillAnswer.toLowerCase() !== currentCard.word.toLowerCase() && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-700\",\n children: [\n \"正確答案:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-bold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 506,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 505,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-semibold mb-1\",\n children: \"完整例句:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 510,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 511,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 512,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 509,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 490,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 408,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 390,\n columnNumber: 11\n }, this) : mode === 'listening' ? /* Listening Test Mode - 聽力測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 532,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 531,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 523,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 522,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"聽音頻,選擇正確的單字\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 540,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setAudioPlaying(true);\n // Simulate audio playing\n setTimeout(()=>setAudioPlaying(false), 2000);\n },\n className: \"mx-auto mb-6 p-8 bg-gray-100 rounded-full hover:bg-gray-200 transition-colors\",\n children: audioPlaying ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-primary animate-pulse\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 553,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 552,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-gray-600\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 557,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 558,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 556,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 543,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500\",\n children: \"點擊播放按鈕聽發音\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 563,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 539,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-3\",\n children: [\n currentCard.word,\n 'determine',\n 'achieve',\n 'consider'\n ].map((word)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(word),\n disabled: showResult,\n className: \"p-4 text-lg font-medium rounded-lg border-2 transition-all \".concat(showResult && word === currentCard.word ? 'border-green-500 bg-green-50' : showResult && word === selectedAnswer && word !== currentCard.word ? 'border-red-500 bg-red-50' : selectedAnswer === word ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'),\n children: word\n }, word, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 569,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 567,\n columnNumber: 13\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-gray-50 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-2\",\n children: \"單字詳情\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 591,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 594,\n columnNumber: 21\n }, this),\n \" - \",\n currentCard.translation\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 593,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 596,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 italic\",\n children: [\n '\"',\n currentCard.example,\n '\"'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 597,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 592,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 590,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 538,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 520,\n columnNumber: 11\n }, this) : mode === 'speaking' ? /* Speaking Test Mode - 口說測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 617,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 616,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 608,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 607,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"念出以下例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 625,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 bg-gray-50 rounded-lg mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed mb-3\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 629,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 632,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 628,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"重點單字發音:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 639,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold text-lg\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 641,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 642,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-primary hover:text-primary-hover\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 645,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 644,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 643,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 640,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 638,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setIsRecording(!isRecording);\n if (!isRecording) {\n // Start recording\n setTimeout(()=>{\n setIsRecording(false);\n setShowResult(true);\n }, 3000);\n }\n },\n className: \"p-6 rounded-full transition-all \".concat(isRecording ? 'bg-red-500 hover:bg-red-600 animate-pulse' : 'bg-primary hover:bg-primary-hover'),\n children: isRecording ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 672,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 673,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 671,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 677,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 676,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 653,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: isRecording ? '錄音中... 點擊停止' : '點擊開始錄音'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 681,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 652,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-green-50 border-2 border-green-500 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-green-700 font-semibold mb-2\",\n children: \"✓ 完成口說練習!\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 689,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: \"提示:持續練習可以提高發音準確度和流暢度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 692,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 688,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 624,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 623,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 605,\n columnNumber: 11\n }, this) : null,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handlePrevious,\n disabled: currentCardIndex === 0,\n className: \"flex items-center space-x-2 px-6 py-3 bg-white rounded-lg shadow-sm hover:shadow-md transition-shadow disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 19l-7-7 7-7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 710,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 709,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"上一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 712,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 704,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleNext,\n disabled: currentCardIndex === cards.length - 1,\n className: \"flex items-center space-x-2 px-6 py-3 bg-primary text-white rounded-lg shadow-sm hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"下一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 720,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 5l7 7-7 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 722,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 721,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 715,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 703,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 130,\n columnNumber: 7\n }, this),\n modalImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-75 p-4\",\n onClick: ()=>setModalImage(null),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative max-w-4xl max-h-[90vh] bg-white rounded-lg overflow-hidden\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setModalImage(null),\n className: \"absolute top-2 right-2 z-10 p-2 bg-white bg-opacity-90 rounded-full hover:bg-opacity-100 transition-all shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-gray-700\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 744,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 743,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 739,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: modalImage,\n alt: \"Example context enlarged\",\n className: \"w-full h-full object-contain\",\n style: {\n maxHeight: 'calc(90vh - 2rem)'\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 750,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 749,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 734,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 730,\n columnNumber: 9\n }, this),\n showReportModal && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4\",\n onClick: ()=>setShowReportModal(false),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-xl max-w-md w-full p-6\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: \"回報錯誤\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 772,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowReportModal(false),\n className: \"text-gray-400 hover:text-gray-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 778,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 777,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 773,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 771,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"詞卡:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: reportingCard === null || reportingCard === void 0 ? void 0 : reportingCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 785,\n columnNumber: 20\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 784,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"測驗模式:\",\n mode === 'flip' ? '翻卡模式' : mode === 'quiz' ? '選擇題' : mode === 'fill' ? '填空題' : mode === 'listening' ? '聽力測試' : '口說測試'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 787,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 783,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"錯誤原因(選填)\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 793,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n value: reportReason,\n onChange: (e)=>setReportReason(e.target.value),\n placeholder: \"請描述錯誤內容...\",\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-primary focus:border-primary\",\n rows: 3\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 796,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 792,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // Submit error report\n console.log('Error reported:', {\n card: reportingCard,\n mode,\n reason: reportReason\n });\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n // Show success message (could add a toast notification here)\n alert('感謝您的回報,我們會盡快處理!');\n },\n className: \"flex-1 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-hover transition-colors\",\n children: \"送出回報\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 806,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n },\n className: \"flex-1 px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition-colors\",\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 824,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 805,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 767,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 763,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 123,\n columnNumber: 5\n }, this);\n}\n_s(LearnPage, \"A33pHe7n/okUhfaMoz3QjZYl284=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter\n ];\n});\n_c = LearnPage;\nvar _c;\n$RefreshReg$(_c, \"LearnPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q2IsOERBQUNnRDtvQ0FBTWhELFdBQVU7OENBQStDOzs7Ozs7OENBR2hFLDhEQUFDaUQ7b0NBQ0NaLE9BQU8zRTtvQ0FDUDRFLFVBQVUsQ0FBQ0MsSUFBTTVFLGdCQUFnQjRFLEVBQUVDLE1BQU0sQ0FBQ0gsS0FBSztvQ0FDL0NJLGFBQVk7b0NBQ1p6QyxXQUFVO29DQUNWa0QsTUFBTTs7Ozs7Ozs7Ozs7O3NDQUlWLDhEQUFDbkQ7NEJBQUlDLFdBQVU7OzhDQUNiLDhEQUFDTztvQ0FDQ0MsU0FBUzt3Q0FDUCxzQkFBc0I7d0NBQ3RCYixRQUFRQyxHQUFHLENBQUMsbUJBQW1COzRDQUM3QlosTUFBTXBCOzRDQUNOeEI7NENBQ0ErRyxRQUFRekY7d0NBQ1Y7d0NBQ0FELG1CQUFtQjt3Q0FDbkJFLGdCQUFnQjt3Q0FDaEJFLGlCQUFpQjt3Q0FDakIsNkRBQTZEO3dDQUM3RHVGLE1BQU07b0NBQ1I7b0NBQ0FwRCxXQUFVOzhDQUNYOzs7Ozs7OENBR0QsOERBQUNPO29DQUNDQyxTQUFTO3dDQUNQL0MsbUJBQW1CO3dDQUNuQkUsZ0JBQWdCO3dDQUNoQkUsaUJBQWlCO29DQUNuQjtvQ0FDQW1DLFdBQVU7OENBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU2Y7R0FoMEJ3QmxFOztRQUNQRixzREFBU0E7OztLQURGRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvYXBwL2xlYXJuL3BhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xuaW1wb3J0IHsgTmF2aWdhdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9OYXZpZ2F0aW9uJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMZWFyblBhZ2UoKSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gIGNvbnN0IFtjdXJyZW50Q2FyZEluZGV4LCBzZXRDdXJyZW50Q2FyZEluZGV4XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc0ZsaXBwZWQsIHNldElzRmxpcHBlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGUsIHNldE1vZGVdID0gdXNlU3RhdGU8J2ZsaXAnIHwgJ3F1aXonIHwgJ2ZpbGwnIHwgJ2xpc3RlbmluZycgfCAnc3BlYWtpbmcnPignZmxpcCcpXG4gIGNvbnN0IFtzY29yZSwgc2V0U2NvcmVdID0gdXNlU3RhdGUoeyBjb3JyZWN0OiAwLCB0b3RhbDogMCB9KVxuICBjb25zdCBbc2VsZWN0ZWRBbnN3ZXIsIHNldFNlbGVjdGVkQW5zd2VyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93UmVzdWx0LCBzZXRTaG93UmVzdWx0XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZmlsbEFuc3dlciwgc2V0RmlsbEFuc3dlcl0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3Nob3dIaW50LCBzZXRTaG93SGludF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzUmVjb3JkaW5nLCBzZXRJc1JlY29yZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2F1ZGlvUGxheWluZywgc2V0QXVkaW9QbGF5aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxJbWFnZSwgc2V0TW9kYWxJbWFnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1JlcG9ydE1vZGFsLCBzZXRTaG93UmVwb3J0TW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtyZXBvcnRSZWFzb24sIHNldFJlcG9ydFJlYXNvbl0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3JlcG9ydGluZ0NhcmQsIHNldFJlcG9ydGluZ0NhcmRdID0gdXNlU3RhdGU8YW55PihudWxsKVxuXG4gIC8vIE1vY2sgZGF0YSB3aXRoIHJlYWwgZXhhbXBsZSBpbWFnZXNcbiAgY29uc3QgY2FyZHMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICB3b3JkOiAnYnJvdWdodCcsXG4gICAgICBwYXJ0T2ZTcGVlY2g6ICd2ZXJiJyxcbiAgICAgIHByb251bmNpYXRpb246ICcvYnLJlMuQdC8nLFxuICAgICAgdHJhbnNsYXRpb246ICfmj5Dlh7rjgIHluLbkvoYnLFxuICAgICAgZGVmaW5pdGlvbjogJ1Bhc3QgdGVuc2Ugb2YgYnJpbmc7IHRvIG1lbnRpb24gb3IgaW50cm9kdWNlIGEgdG9waWMgaW4gY29udmVyc2F0aW9uJyxcbiAgICAgIGV4YW1wbGU6ICdIZSBicm91Z2h0IHRoaXMgdGhpbmcgdXAgZHVyaW5nIG91ciBtZWV0aW5nIGFuZCBubyBvbmUgYWdyZWVkLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICfku5blnKjmiJHlgJHnmoTmnIPorbDkuK3mj5Dlh7rkuobpgJnku7bkuovvvIzkvYbmspLmnInkurrlkIzmhI/jgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy9icmluZ191cC5wbmcnLFxuICAgICAgc3lub255bXM6IFsnbWVudGlvbmVkJywgJ3JhaXNlZCcsICdpbnRyb2R1Y2VkJ10sXG4gICAgICBkaWZmaWN1bHR5OiAnQjEnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHdvcmQ6ICdpbnN0aW5jdHMnLFxuICAgICAgcGFydE9mU3BlZWNoOiAnbm91bicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL8uIyapuc3TJqsWLa3RzLycsXG4gICAgICB0cmFuc2xhdGlvbjogJ+acrOiDveOAgeebtOimuicsXG4gICAgICBkZWZpbml0aW9uOiAnTmF0dXJhbCBhYmlsaXRpZXMgdGhhdCBoZWxwIGxpdmluZyB0aGluZ3Mgc3Vydml2ZSB3aXRob3V0IGxlYXJuaW5nJyxcbiAgICAgIGV4YW1wbGU6ICdBbmltYWxzIHVzZSB0aGVpciBpbnN0aW5jdHMgdG8gZmluZCBmb29kIGFuZCBzdGF5IHNhZmUuJyxcbiAgICAgIGV4YW1wbGVUcmFuc2xhdGlvbjogJ+WLleeJqeWIqeeUqOacrOiDveS+huWwi+aJvumjn+eJqeS4puS/neaMgeWuieWFqOOAgicsXG4gICAgICBleGFtcGxlSW1hZ2U6ICcvaW1hZ2VzL2V4YW1wbGVzL2luc3RpbmN0LnBuZycsXG4gICAgICBzeW5vbnltczogWydpbnR1aXRpb24nLCAnaW1wdWxzZScsICd0ZW5kZW5jeSddLFxuICAgICAgZGlmZmljdWx0eTogJ0IyJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDMsXG4gICAgICB3b3JkOiAnd2FycmFudHMnLFxuICAgICAgcGFydE9mU3BlZWNoOiAnbm91bicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL8uId8mUy5ByyZludHMvJyxcbiAgICAgIHRyYW5zbGF0aW9uOiAn5pCc5p+l5Luk44CB5o6I5qyK5LukJyxcbiAgICAgIGRlZmluaXRpb246ICdPZmZpY2lhbCBkb2N1bWVudHMgdGhhdCBnaXZlIHBvbGljZSBwZXJtaXNzaW9uIHRvIGRvIHNvbWV0aGluZycsXG4gICAgICBleGFtcGxlOiAnVGhlIHBvbGljZSBvYnRhaW5lZCB3YXJyYW50cyB0byBzZWFyY2ggdGhlIGJ1aWxkaW5nLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICforabmlrnlj5blvpfkuobmkJzmn6Xku6TkvobmkJzmn6XpgJnmo5/lu7rnr4nnianjgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy93YXJyYW50LnBuZycsXG4gICAgICBzeW5vbnltczogWydhdXRob3JpemF0aW9uJywgJ3Blcm1pdCcsICdsaWNlbnNlJ10sXG4gICAgICBkaWZmaWN1bHR5OiAnQzEnXG4gICAgfVxuICBdXG5cbiAgY29uc3QgY3VycmVudENhcmQgPSBjYXJkc1tjdXJyZW50Q2FyZEluZGV4XVxuXG4gIC8vIFF1aXogbW9kZSBvcHRpb25zIC0gZHluYW1pY2FsbHkgZ2VuZXJhdGUgZnJvbSBjdXJyZW50IGNhcmRzXG4gIGNvbnN0IHF1aXpPcHRpb25zID0gW1xuICAgIGNhcmRzW2N1cnJlbnRDYXJkSW5kZXhdLnRyYW5zbGF0aW9uLFxuICAgIC4uLmNhcmRzXG4gICAgICAuZmlsdGVyKChfLCBpZHgpID0+IGlkeCAhPT0gY3VycmVudENhcmRJbmRleClcbiAgICAgIC5tYXAoY2FyZCA9PiBjYXJkLnRyYW5zbGF0aW9uKVxuICAgICAgLnNsaWNlKDAsIDIpLFxuICAgICflu7rorbDjgIHmj5DorbAnIC8vIGFkZGl0aW9uYWwgd3Jvbmcgb3B0aW9uXG4gIF0uc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KSAvLyBzaHVmZmxlIG9wdGlvbnNcblxuICBjb25zdCBoYW5kbGVGbGlwID0gKCkgPT4ge1xuICAgIHNldElzRmxpcHBlZCghaXNGbGlwcGVkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlTmV4dCA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudENhcmRJbmRleCA8IGNhcmRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHNldEN1cnJlbnRDYXJkSW5kZXgoY3VycmVudENhcmRJbmRleCArIDEpXG4gICAgICBzZXRJc0ZsaXBwZWQoZmFsc2UpXG4gICAgICBzZXRTZWxlY3RlZEFuc3dlcihudWxsKVxuICAgICAgc2V0U2hvd1Jlc3VsdChmYWxzZSlcbiAgICAgIHNldEZpbGxBbnN3ZXIoJycpXG4gICAgICBzZXRTaG93SGludChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVQcmV2aW91cyA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudENhcmRJbmRleCA+IDApIHtcbiAgICAgIHNldEN1cnJlbnRDYXJkSW5kZXgoY3VycmVudENhcmRJbmRleCAtIDEpXG4gICAgICBzZXRJc0ZsaXBwZWQoZmFsc2UpXG4gICAgICBzZXRTZWxlY3RlZEFuc3dlcihudWxsKVxuICAgICAgc2V0U2hvd1Jlc3VsdChmYWxzZSlcbiAgICAgIHNldEZpbGxBbnN3ZXIoJycpXG4gICAgICBzZXRTaG93SGludChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEaWZmaWN1bHR5UmF0ZSA9IChyYXRpbmc6IG51bWJlcikgPT4ge1xuICAgIC8vIE1vY2sgcmF0aW5nIGxvZ2ljXG4gICAgY29uc29sZS5sb2coYFJhdGVkICR7cmF0aW5nfSBmb3IgJHtjdXJyZW50Q2FyZC53b3JkfWApXG4gICAgaGFuZGxlTmV4dCgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVRdWl6QW5zd2VyID0gKGFuc3dlcjogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRBbnN3ZXIoYW5zd2VyKVxuICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICBpZiAoYW5zd2VyID09PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbikge1xuICAgICAgc2V0U2NvcmUoeyAuLi5zY29yZSwgY29ycmVjdDogc2NvcmUuY29ycmVjdCArIDEsIHRvdGFsOiBzY29yZS50b3RhbCArIDEgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2NvcmUoeyAuLi5zY29yZSwgdG90YWw6IHNjb3JlLnRvdGFsICsgMSB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1ibHVlLTUwIHRvLWluZGlnby0xMDBcIj5cbiAgICAgIHsvKiBOYXZpZ2F0aW9uICovfVxuICAgICAgPE5hdmlnYXRpb25cbiAgICAgICAgc2hvd0V4aXRMZWFybmluZz17dHJ1ZX1cbiAgICAgICAgb25FeGl0TGVhcm5pbmc9eygpID0+IHJvdXRlci5wdXNoKCcvZGFzaGJvYXJkJyl9XG4gICAgICAvPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTR4bCBteC1hdXRvIHB4LTQgcHktOFwiPlxuICAgICAgICB7LyogUHJvZ3Jlc3MgQmFyICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLThcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj7pgLLluqY8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAge2N1cnJlbnRDYXJkSW5kZXggKyAxfSAvIHtjYXJkcy5sZW5ndGh9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIGgtMlwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IGgtMiByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1hbGxcIlxuICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogYCR7KChjdXJyZW50Q2FyZEluZGV4ICsgMSkgLyBjYXJkcy5sZW5ndGgpICogMTAwfSVgIH19XG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBNb2RlIFRvZ2dsZSAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIG1iLTZcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LXNtIHAtMSBpbmxpbmUtZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnZmxpcCcpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdmbGlwJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg57+75Y2h5qih5byPXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgncXVpeicpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdxdWl6J1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg6YG45pOH6aGMXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnZmlsbCcpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdmaWxsJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg5aGr56m66aGMXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnbGlzdGVuaW5nJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ2xpc3RlbmluZydcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOiBveWKm+a4rOipplxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ3NwZWFraW5nJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ3NwZWFraW5nJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg5Y+j6Kqq5ris6KmmXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAge21vZGUgPT09ICdmbGlwJyA/IChcbiAgICAgICAgICAvKiBGbGlwIENhcmQgTW9kZSAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBGbGlwIE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLTk2IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRmxpcH1cbiAgICAgICAgICAgICAgc3R5bGU9e3sgcGVyc3BlY3RpdmU6ICcxMDAwcHgnIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BhYnNvbHV0ZSB3LWZ1bGwgaC1mdWxsIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTYwMCAke1xuICAgICAgICAgICAgICAgICAgaXNGbGlwcGVkID8gJ3JvdGF0ZS15LTE4MCcgOiAnJ1xuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHlsZTogJ3ByZXNlcnZlLTNkJyxcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogaXNGbGlwcGVkID8gJ3JvdGF0ZVkoMTgwZGVnKScgOiAncm90YXRlWSgwZGVnKSdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgey8qIEZyb250IG9mIGNhcmQgKi99XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCBiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tmYWNlVmlzaWJpbGl0eTogJ2hpZGRlbicgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtNHhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTRcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLndvcmR9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LWdyYXktNjAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnBhcnRPZlNwZWVjaH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxnIHRleHQtZ3JheS01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnByb251bmNpYXRpb259XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtOCB0ZXh0LXNtIHRleHQtZ3JheS00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg6bue5pOK57+76L2J5p+l55yL562U5qGIXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIHsvKiBCYWNrIG9mIGNhcmQgKi99XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCBiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04IG92ZXJmbG93LXktYXV0b1wiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBcbiAgICAgICAgICAgICAgICAgICAgYmFja2ZhY2VWaXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlWSgxODBkZWcpJ1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPue/u+itrzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDBcIj57Y3VycmVudENhcmQudHJhbnNsYXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPuWumue+qTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMFwiPntjdXJyZW50Q2FyZC5kZWZpbml0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTFcIj7kvovlj6U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDBcIj57Y3VycmVudENhcmQuZXhhbXBsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgdGV4dC1zbSBtdC0xXCI+e2N1cnJlbnRDYXJkLmV4YW1wbGVUcmFuc2xhdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCBtYi0xXCI+5ZCM576p6KmePC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnN5bm9ueW1zLm1hcCgoc3luLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtpZHh9IGNsYXNzTmFtZT1cInB4LTMgcHktMSBiZy1ncmF5LTEwMCByb3VuZGVkLWZ1bGwgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzeW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogRGlmZmljdWx0eSBSYXRpbmcgKi99XG4gICAgICAgICAgICB7aXNGbGlwcGVkICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC04XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+6YCZ5YCL5Zau5a2X5bCN5L2g5L6G6Kqq6Zuj5bqm5aaC5L2V77yfPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRGlmZmljdWx0eVJhdGUoMSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy1yZWQtMTAwIHRleHQtcmVkLTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLXJlZC0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDwn5iUIOWujOWFqOS4jeiomOW+l1xuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURpZmZpY3VsdHlSYXRlKDMpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC00IHB5LTIgYmcteWVsbG93LTEwMCB0ZXh0LXllbGxvdy03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy15ZWxsb3ctMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg8J+YkCDmnInpu57lm7Dpm6NcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEaWZmaWN1bHR5UmF0ZSg1KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNCBweS0yIGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyZWVuLTIwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIPCfmIog5b6I57Ch5ZauXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ3F1aXonID8gKFxuICAgICAgICAgIC8qIFF1aXogTW9kZSAtIOmBuOaTh+mhjO+8muiLseaWh+Wumue+qemBuOS4reaWh+e/u+itryAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBRdWl6IE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLThcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPuagueaTmuWumue+qemBuOaTh+ato+eiuueahOS4reaWh+e/u+itrzwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14bCB0ZXh0LWdyYXktODAwIGxlYWRpbmctcmVsYXhlZFwiPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmRlZmluaXRpb259XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDAgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgKHtjdXJyZW50Q2FyZC5wYXJ0T2ZTcGVlY2h9KVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICAgICAge3F1aXpPcHRpb25zLm1hcCgob3B0aW9uLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e2lkeH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFzaG93UmVzdWx0ICYmIGhhbmRsZVF1aXpBbnN3ZXIob3B0aW9uKX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzaG93UmVzdWx0fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHAtNCB0ZXh0LWxlZnQgcm91bmRlZC1sZyBib3JkZXItMiB0cmFuc2l0aW9uLWFsbCAke1xuICAgICAgICAgICAgICAgICAgICBzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gY3VycmVudENhcmQudHJhbnNsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItZ3JlZW4tNTAwIGJnLWdyZWVuLTUwJ1xuICAgICAgICAgICAgICAgICAgICAgIDogc2hvd1Jlc3VsdCAmJiBvcHRpb24gPT09IHNlbGVjdGVkQW5zd2VyICYmIG9wdGlvbiAhPT0gY3VycmVudENhcmQudHJhbnNsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZEFuc3dlciA9PT0gb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgYmctcHJpbWFyeS1saWdodCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItZ3JheS0yMDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwJ1xuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57b3B0aW9ufTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3Nob3dSZXN1bHQgJiYgb3B0aW9uID09PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtZ3JlZW4tNTAwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNSAxM2w0IDRMMTkgN1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gc2VsZWN0ZWRBbnN3ZXIgJiYgb3B0aW9uICE9PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtcmVkLTUwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ2ZpbGwnID8gKFxuICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIEJsYW5rIE1vZGUgLSDloavnqbrpoYwgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgRmlsbCBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTRcIj7moLnmk5rkvovlj6XlnJbniYflkozlj6XlrZDloavlhaXmraPnorrnmoToqZ7lvZk8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogRXhhbXBsZSBJbWFnZSAqL31cbiAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGVJbWFnZSAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIHNyYz17Y3VycmVudENhcmQuZXhhbXBsZUltYWdlfVxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJFeGFtcGxlIGNvbnRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1sZyBzaGFkb3ctbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6c2hhZG93LWxnIHRyYW5zaXRpb24tc2hhZG93XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWF4SGVpZ2h0OiAnNDAwcHgnLCBvYmplY3RGaXQ6ICdjb250YWluJyB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RhbEltYWdlKGN1cnJlbnRDYXJkLmV4YW1wbGVJbWFnZSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMiB0ZXh0LWNlbnRlclwiPum7nuaTiuWclueJh+WPr+aUvuWkp+afpeecizwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiBFeGFtcGxlIFNlbnRlbmNlIHdpdGggQmxhbmsgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LWdyYXktODAwIG1iLTRcIj5cbiAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZXhhbXBsZS5zcGxpdChjdXJyZW50Q2FyZC53b3JkKS5tYXAoKHBhcnQsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17aX0+XG4gICAgICAgICAgICAgICAgICAgIHtwYXJ0fVxuICAgICAgICAgICAgICAgICAgICB7aSA8IGN1cnJlbnRDYXJkLmV4YW1wbGUuc3BsaXQoY3VycmVudENhcmQud29yZCkubGVuZ3RoIC0gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWJsb2NrIHctMzIgYm9yZGVyLWItMiBib3JkZXItZ3JheS00MDAgbXgtMVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIEhpbnQgQnV0dG9uICovfVxuICAgICAgICAgICAgICB7IXNob3dIaW50ICYmIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93SGludCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1wcmltYXJ5IGhvdmVyOnRleHQtcHJpbWFyeS1ob3ZlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMyAxNmgtMXYtNGgtMW0xLTRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIOm7nuaTiuafpeeci+aPkOekulxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiBEZWZpbml0aW9uIEhpbnQgKi99XG4gICAgICAgICAgICAgIHtzaG93SGludCAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHAtMyBiZy1ibHVlLTUwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWJsdWUtODAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+5a6a576p5o+Q56S677yaPC9zdHJvbmc+IHtjdXJyZW50Q2FyZC5kZWZpbml0aW9ufVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEFuc3dlciBJbnB1dCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2ZpbGxBbnN3ZXJ9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRGaWxsQW5zd2VyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIui8uOWFpeetlOahiC4uLlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTQgcHktMyBib3JkZXItMiBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBmb2N1czpib3JkZXItcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgdGV4dC1sZ1wiXG4gICAgICAgICAgICAgICAgb25LZXlQcmVzcz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiBmaWxsQW5zd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBTdWJtaXQgQnV0dG9uICovfVxuICAgICAgICAgICAgeyFzaG93UmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGxBbnN3ZXIgJiYgc2V0U2hvd1Jlc3VsdCh0cnVlKX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWZpbGxBbnN3ZXJ9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB5LTMgYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgZm9udC1tZWRpdW0gaG92ZXI6YmctcHJpbWFyeS1ob3ZlciB0cmFuc2l0aW9uLWNvbG9ycyBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDmj5DkuqTnrZTmoYhcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7LyogUmVzdWx0IERpc3BsYXkgKi99XG4gICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgcC00IHJvdW5kZWQtbGcgJHtcbiAgICAgICAgICAgICAgICBmaWxsQW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRDYXJkLndvcmQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgPyAnYmctZ3JlZW4tNTAgYm9yZGVyLTIgYm9yZGVyLWdyZWVuLTUwMCdcbiAgICAgICAgICAgICAgICAgIDogJ2JnLXJlZC01MCBib3JkZXItMiBib3JkZXItcmVkLTUwMCdcbiAgICAgICAgICAgICAgfWB9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGZvbnQtc2VtaWJvbGQgJHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LWdyZWVuLTcwMCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LXJlZC03MDAnXG4gICAgICAgICAgICAgICAgICB9YH0+XG4gICAgICAgICAgICAgICAgICAgIHtmaWxsQW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRDYXJkLndvcmQudG9Mb3dlckNhc2UoKSA/ICfinJMg5q2j56K677yBJyA6ICfinJcg6Yyv6KqkJ31cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7ZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpICE9PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKCkgJiYgKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg5q2j56K6562U5qGI77yaPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+e2N1cnJlbnRDYXJkLndvcmR9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgdGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgbWItMVwiPuWujOaVtOS+i+WPpe+8mjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdj57Y3VycmVudENhcmQuZXhhbXBsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMCBtdC0xXCI+e2N1cnJlbnRDYXJkLmV4YW1wbGVUcmFuc2xhdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBtb2RlID09PSAnbGlzdGVuaW5nJyA/IChcbiAgICAgICAgICAvKiBMaXN0ZW5pbmcgVGVzdCBNb2RlIC0g6IG95Yqb5ris6KmmICovXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgey8qIEVycm9yIFJlcG9ydCBCdXR0b24gZm9yIExpc3RlbmluZyBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTRcIj7ogb3pn7PpoLvvvIzpgbjmk4fmraPnorrnmoTllq7lrZc8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogQXVkaW8gUGxheSBCdXR0b24gKi99XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRBdWRpb1BsYXlpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlIGF1ZGlvIHBsYXlpbmdcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0QXVkaW9QbGF5aW5nKGZhbHNlKSwgMjAwMClcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14LWF1dG8gbWItNiBwLTggYmctZ3JheS0xMDAgcm91bmRlZC1mdWxsIGhvdmVyOmJnLWdyYXktMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthdWRpb1BsYXlpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctMTYgaC0xNiB0ZXh0LXByaW1hcnkgYW5pbWF0ZS1wdWxzZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTUuNTM2IDguNDY0YTUgNSAwIDAxMCA3LjA3Mm0yLjgyOC05LjlhOSA5IDAgMDEwIDEyLjcyOE01LjU4NiAxNUg0YTEgMSAwIDAxLTEtMXYtNGExIDEgMCAwMTEtMWgxLjU4Nmw0LjcwNy00LjcwN0MxMC45MjMgMy42NjMgMTIgNC4xMDkgMTIgNXYxNGMwIC44OTEtMS4wNzcgMS4zMzctMS43MDcuNzA3TDUuNTg2IDE1elwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTE2IGgtMTYgdGV4dC1ncmF5LTYwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTQuNzUyIDExLjE2OGwtMy4xOTctMi4xMzJBMSAxIDAgMDAxMCA5Ljg3djQuMjYzYTEgMSAwIDAwMS41NTUuODMybDMuMTk3LTIuMTMyYTEgMSAwIDAwMC0xLjY2NHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+6bue5pOK5pKt5pS+5oyJ6YiV6IG955m86Z+zPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIFdvcmQgT3B0aW9ucyAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtM1wiPlxuICAgICAgICAgICAgICB7W2N1cnJlbnRDYXJkLndvcmQsICdkZXRlcm1pbmUnLCAnYWNoaWV2ZScsICdjb25zaWRlciddLm1hcCgod29yZCkgPT4gKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17d29yZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFzaG93UmVzdWx0ICYmIGhhbmRsZVF1aXpBbnN3ZXIod29yZCl9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2hvd1Jlc3VsdH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHAtNCB0ZXh0LWxnIGZvbnQtbWVkaXVtIHJvdW5kZWQtbGcgYm9yZGVyLTIgdHJhbnNpdGlvbi1hbGwgJHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd1Jlc3VsdCAmJiB3b3JkID09PSBjdXJyZW50Q2FyZC53b3JkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLWdyZWVuLTUwMCBiZy1ncmVlbi01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNob3dSZXN1bHQgJiYgd29yZCA9PT0gc2VsZWN0ZWRBbnN3ZXIgJiYgd29yZCAhPT0gY3VycmVudENhcmQud29yZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkQW5zd2VyID09PSB3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgYmctcHJpbWFyeS1saWdodCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItZ3JheS0yMDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwJ1xuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3dvcmR9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBSZXN1bHQgRGlzcGxheSAqL31cbiAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IHAtNCBiZy1ncmF5LTUwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTJcIj7llq7lrZfoqbPmg4U8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZFwiPntjdXJyZW50Q2FyZC53b3JkfTwvc3Bhbj4gLSB7Y3VycmVudENhcmQudHJhbnNsYXRpb259XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+e2N1cnJlbnRDYXJkLmRlZmluaXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTUwMCBpdGFsaWNcIj5cIntjdXJyZW50Q2FyZC5leGFtcGxlfVwiPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ3NwZWFraW5nJyA/IChcbiAgICAgICAgICAvKiBTcGVha2luZyBUZXN0IE1vZGUgLSDlj6PoqqrmuKzoqaYgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgU3BlYWtpbmcgTW9kZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBtYi0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKGN1cnJlbnRDYXJkKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5Zue5aCx6Yyv6KqkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAg5Zue5aCx6Yyv6KqkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi00XCI+5b+15Ye65Lul5LiL5L6L5Y+lPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFRhcmdldCBTZW50ZW5jZSAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTYgYmctZ3JheS01MCByb3VuZGVkLWxnIG1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteGwgdGV4dC1ncmF5LTgwMCBsZWFkaW5nLXJlbGF4ZWQgbWItM1wiPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGV9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZXhhbXBsZVRyYW5zbGF0aW9ufVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogUHJvbnVuY2lhdGlvbiBHdWlkZSAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPumHjem7nuWWruWtl+eZvOmfs++8mjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgdGV4dC1sZ1wiPntjdXJyZW50Q2FyZC53b3JkfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDBcIj57Y3VycmVudENhcmQucHJvbnVuY2lhdGlvbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInRleHQtcHJpbWFyeSBob3Zlcjp0ZXh0LXByaW1hcnktaG92ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1LjUzNiA4LjQ2NGE1IDUgMCAwMTAgNy4wNzJtMi44MjgtOS45YTkgOSAwIDAxMCAxMi43MjhNNS41ODYgMTVINGExIDEgMCAwMS0xLTF2LTRhMSAxIDAgMDExLTFoMS41ODZsNC43MDctNC43MDdDMTAuOTIzIDMuNjYzIDEyIDQuMTA5IDEyIDV2MTRjMCAuODkxLTEuMDc3IDEuMzM3LTEuNzA3LjcwN0w1LjU4NiAxNXpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogUmVjb3JkaW5nIEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNSZWNvcmRpbmcoIWlzUmVjb3JkaW5nKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVjb3JkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgcmVjb3JkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJc1JlY29yZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICB9LCAzMDAwKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcC02IHJvdW5kZWQtZnVsbCB0cmFuc2l0aW9uLWFsbCAke1xuICAgICAgICAgICAgICAgICAgICBpc1JlY29yZGluZ1xuICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLXJlZC01MDAgaG92ZXI6YmctcmVkLTYwMCBhbmltYXRlLXB1bHNlJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLXByaW1hcnkgaG92ZXI6YmctcHJpbWFyeS1ob3ZlcidcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtpc1JlY29yZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTEyIGgtMTIgdGV4dC13aGl0ZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk05IDEwYTEgMSAwIDAxMS0xaDRhMSAxIDAgMDExIDF2NGExIDEgMCAwMS0xIDFoLTRhMSAxIDAgMDEtMS0xdi00elwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTEyIGgtMTIgdGV4dC13aGl0ZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xOSAxMWE3IDcgMCAwMS03IDdtMCAwYTcgNyAwIDAxLTctN203IDd2NG0wIDBIOG00IDBoNG0tNC04YTMgMyAwIDAxLTMtM1Y1YTMgMyAwIDExNiAwdjZhMyAzIDAgMDEtMyAzelwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgdGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICB7aXNSZWNvcmRpbmcgPyAn6YyE6Z+z5LitLi4uIOm7nuaTiuWBnOatoicgOiAn6bue5pOK6ZaL5aeL6YyE6Z+zJ31cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlc3VsdCBEaXNwbGF5ICovfVxuICAgICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IHAtNCBiZy1ncmVlbi01MCBib3JkZXItMiBib3JkZXItZ3JlZW4tNTAwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmVlbi03MDAgZm9udC1zZW1pYm9sZCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIOKckyDlrozmiJDlj6Poqqrnt7Tnv5LvvIFcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg5o+Q56S677ya5oyB57qM57e057+S5Y+v5Lul5o+Q6auY55m86Z+z5rqW56K65bqm5ZKM5rWB5pqi5bqmXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7LyogTmF2aWdhdGlvbiBCdXR0b25zICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIG10LThcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVQcmV2aW91c31cbiAgICAgICAgICAgIGRpc2FibGVkPXtjdXJyZW50Q2FyZEluZGV4ID09PSAwfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHB4LTYgcHktMyBiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy1zbSBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTUgMTlsLTctNyA3LTdcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8c3Bhbj7kuIrkuIDlgIs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVOZXh0fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2N1cnJlbnRDYXJkSW5kZXggPT09IGNhcmRzLmxlbmd0aCAtIDF9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgcHgtNiBweS0zIGJnLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy1zbSBob3ZlcjpiZy1wcmltYXJ5LWhvdmVyIHRyYW5zaXRpb24tY29sb3JzIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj7kuIvkuIDlgIs8L3NwYW4+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTkgNWw3IDctNyA3XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogSW1hZ2UgTW9kYWwgKi99XG4gICAgICB7bW9kYWxJbWFnZSAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmxhY2sgYmctb3BhY2l0eS03NSBwLTRcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsSW1hZ2UobnVsbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBtYXgtdy00eGwgbWF4LWgtWzkwdmhdIGJnLXdoaXRlIHJvdW5kZWQtbGcgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBDbG9zZSBCdXR0b24gKi99XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsSW1hZ2UobnVsbCl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0yIHJpZ2h0LTIgei0xMCBwLTIgYmctd2hpdGUgYmctb3BhY2l0eS05MCByb3VuZGVkLWZ1bGwgaG92ZXI6Ymctb3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1hbGwgc2hhZG93LWxnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02IHRleHQtZ3JheS03MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIHsvKiBJbWFnZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC00XCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9e21vZGFsSW1hZ2V9XG4gICAgICAgICAgICAgICAgYWx0PVwiRXhhbXBsZSBjb250ZXh0IGVubGFyZ2VkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhIZWlnaHQ6ICdjYWxjKDkwdmggLSAycmVtKScgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBFcnJvciBSZXBvcnQgTW9kYWwgKi99XG4gICAgICB7c2hvd1JlcG9ydE1vZGFsICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjayBiZy1vcGFjaXR5LTUwIHAtNFwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LXhsIG1heC13LW1kIHctZnVsbCBwLTZcIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkXCI+5Zue5aCx6Yyv6KqkPC9oMz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXBvcnRNb2RhbChmYWxzZSl9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWdyYXktNjAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgIOipnuWNoe+8mjxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3JlcG9ydGluZ0NhcmQ/LndvcmR9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgIOa4rOmpl+aooeW8j++8mnttb2RlID09PSAnZmxpcCcgPyAn57+75Y2h5qih5byPJyA6IG1vZGUgPT09ICdxdWl6JyA/ICfpgbjmk4fpoYwnIDogbW9kZSA9PT0gJ2ZpbGwnID8gJ+Whq+epuumhjCcgOiBtb2RlID09PSAnbGlzdGVuaW5nJyA/ICfogb3lipvmuKzoqaYnIDogJ+WPo+iqqua4rOippid9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICDpjK/oqqTljp/lm6DvvIjpgbjloavvvIlcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgdmFsdWU9e3JlcG9ydFJlYXNvbn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFJlcG9ydFJlYXNvbihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLoq4vmj4/ov7DpjK/oqqTlhaflrrkuLi5cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC0zIHB5LTIgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGZvY3VzOnJpbmctcHJpbWFyeSBmb2N1czpib3JkZXItcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgcm93cz17M31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1Ym1pdCBlcnJvciByZXBvcnRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciByZXBvcnRlZDonLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmQ6IHJlcG9ydGluZ0NhcmQsXG4gICAgICAgICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVwb3J0UmVhc29uXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0UmVhc29uKCcnKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChudWxsKVxuICAgICAgICAgICAgICAgICAgLy8gU2hvdyBzdWNjZXNzIG1lc3NhZ2UgKGNvdWxkIGFkZCBhIHRvYXN0IG5vdGlmaWNhdGlvbiBoZXJlKVxuICAgICAgICAgICAgICAgICAgYWxlcnQoJ+aEn+isneaCqOeahOWbnuWgse+8jOaIkeWAkeacg+eboeW/q+iZleeQhu+8gScpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcHgtNCBweS0yIGJnLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLWxnIGhvdmVyOmJnLXByaW1hcnktaG92ZXIgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg6YCB5Ye65Zue5aCxXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0UmVhc29uKCcnKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChudWxsKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHB4LTQgcHktMiBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg5Y+W5raIXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufSJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZVJvdXRlciIsIk5hdmlnYXRpb24iLCJMZWFyblBhZ2UiLCJyb3V0ZXIiLCJjdXJyZW50Q2FyZEluZGV4Iiwic2V0Q3VycmVudENhcmRJbmRleCIsImlzRmxpcHBlZCIsInNldElzRmxpcHBlZCIsIm1vZGUiLCJzZXRNb2RlIiwic2NvcmUiLCJzZXRTY29yZSIsImNvcnJlY3QiLCJ0b3RhbCIsInNlbGVjdGVkQW5zd2VyIiwic2V0U2VsZWN0ZWRBbnN3ZXIiLCJzaG93UmVzdWx0Iiwic2V0U2hvd1Jlc3VsdCIsImZpbGxBbnN3ZXIiLCJzZXRGaWxsQW5zd2VyIiwic2hvd0hpbnQiLCJzZXRTaG93SGludCIsImlzUmVjb3JkaW5nIiwic2V0SXNSZWNvcmRpbmciLCJhdWRpb1BsYXlpbmciLCJzZXRBdWRpb1BsYXlpbmciLCJtb2RhbEltYWdlIiwic2V0TW9kYWxJbWFnZSIsInNob3dSZXBvcnRNb2RhbCIsInNldFNob3dSZXBvcnRNb2RhbCIsInJlcG9ydFJlYXNvbiIsInNldFJlcG9ydFJlYXNvbiIsInJlcG9ydGluZ0NhcmQiLCJzZXRSZXBvcnRpbmdDYXJkIiwiY2FyZHMiLCJpZCIsIndvcmQiLCJwYXJ0T2ZTcGVlY2giLCJwcm9udW5jaWF0aW9uIiwidHJhbnNsYXRpb24iLCJkZWZpbml0aW9uIiwiZXhhbXBsZSIsImV4YW1wbGVUcmFuc2xhdGlvbiIsImV4YW1wbGVJbWFnZSIsInN5bm9ueW1zIiwiZGlmZmljdWx0eSIsImN1cnJlbnRDYXJkIiwicXVpek9wdGlvbnMiLCJmaWx0ZXIiLCJfIiwiaWR4IiwibWFwIiwiY2FyZCIsInNsaWNlIiwic29ydCIsIk1hdGgiLCJyYW5kb20iLCJoYW5kbGVGbGlwIiwiaGFuZGxlTmV4dCIsImxlbmd0aCIsImhhbmRsZVByZXZpb3VzIiwiaGFuZGxlRGlmZmljdWx0eVJhdGUiLCJyYXRpbmciLCJjb25zb2xlIiwibG9nIiwiaGFuZGxlUXVpekFuc3dlciIsImFuc3dlciIsImRpdiIsImNsYXNzTmFtZSIsInNob3dFeGl0TGVhcm5pbmciLCJvbkV4aXRMZWFybmluZyIsInB1c2giLCJzcGFuIiwic3R5bGUiLCJ3aWR0aCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJ0aXRsZSIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInBlcnNwZWN0aXZlIiwidHJhbnNmb3JtU3R5bGUiLCJ0cmFuc2Zvcm0iLCJiYWNrZmFjZVZpc2liaWxpdHkiLCJzeW4iLCJvcHRpb24iLCJkaXNhYmxlZCIsImltZyIsInNyYyIsImFsdCIsIm1heEhlaWdodCIsIm9iamVjdEZpdCIsInNwbGl0IiwicGFydCIsImkiLCJzdHJvbmciLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwib25LZXlQcmVzcyIsImtleSIsInRvTG93ZXJDYXNlIiwic2V0VGltZW91dCIsInN0b3BQcm9wYWdhdGlvbiIsImgzIiwibGFiZWwiLCJ0ZXh0YXJlYSIsInJvd3MiLCJyZWFzb24iLCJhbGVydCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/learn/page.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./components/Navigation.tsx": +/*!***********************************!*\ + !*** ./components/Navigation.tsx ***! + \***********************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n let { showExitLearning = false, onExitLearning } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: showExitLearning ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onExitLearning,\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 59,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 70,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 71,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQU96QyxTQUFTRztRQUFXLEVBQUVDLG1CQUFtQixLQUFLLEVBQUVDLGNBQWMsRUFBbUIsR0FBN0QsaUVBQWdFLENBQUM7UUF3RHZFQyxpQkFBQUE7O0lBdkRuQixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdMLDhEQUFPQTtJQUNoQyxNQUFNTSxXQUFXUCw0REFBV0E7SUFFNUIsTUFBTVEsV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO0tBQy9CO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDYixrREFBSUE7Z0NBQUNVLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDaEIsa0RBQUlBO3dDQUVIVSxNQUFNTSxLQUFLTixJQUFJO3dDQUNmRyxXQUFXLGlDQUlWLE9BSENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0E7a0RBR0xNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTtrQ0FFWlQsaUNBQ0MsOERBQUNhOzRCQUNDQyxTQUFTYjs0QkFDVFEsV0FBVTtzQ0FDWDs7Ozs7aURBSUQ7OzhDQUVFLDhEQUFDSTtvQ0FBT0osV0FBVTs4Q0FDaEIsNEVBQUNNO3dDQUFJTixXQUFVO3dDQUFVTyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzhDQUt6RSw4REFBQ2I7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTtzREFDWlAsQ0FBQUEsaUJBQUFBLDRCQUFBQSxpQkFBQUEsS0FBTXNCLFFBQVEsY0FBZHRCLHNDQUFBQSxrQkFBQUEsY0FBZ0IsQ0FBQyxFQUFFLGNBQW5CQSxzQ0FBQUEsZ0JBQXFCdUIsV0FBVyxPQUFNOzs7Ozs7c0RBRXpDLDhEQUFDQzs0Q0FBS2pCLFdBQVU7c0RBQXVCUCxDQUFBQSxpQkFBQUEsMkJBQUFBLEtBQU15QixXQUFXLE1BQUl6QixpQkFBQUEsMkJBQUFBLEtBQU1zQixRQUFROzs7Ozs7c0RBQzFFLDhEQUFDWDs0Q0FDQ0MsU0FBU1g7NENBQ1RNLFdBQVU7c0RBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV25CO0dBekVnQlY7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuaW50ZXJmYWNlIE5hdmlnYXRpb25Qcm9wcyB7XHJcbiAgc2hvd0V4aXRMZWFybmluZz86IGJvb2xlYW5cclxuICBvbkV4aXRMZWFybmluZz86ICgpID0+IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oeyBzaG93RXhpdExlYXJuaW5nID0gZmFsc2UsIG9uRXhpdExlYXJuaW5nIH06IE5hdmlnYXRpb25Qcm9wcyA9IHt9KSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfVxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog5a2457+S5qih5byP55qE57WQ5p2f5a2457+S5oyJ6YiVICovfVxyXG4gICAgICAgICAgICB7c2hvd0V4aXRMZWFybmluZyA/IChcclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkV4aXRMZWFybmluZ31cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgw5cg57WQ5p2f5a2457+SXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIHsvKiDpgJrnn6XmjInpiJUgKi99XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDE3aDVsLTEuNDA1LTEuNDA1QTIuMDMyIDIuMDMyIDAgMDExOCAxNC4xNThWMTFhNi4wMDIgNi4wMDIgMCAwMC00LTUuNjU5VjVhMiAyIDAgMTAtNCAwdi4zNDFDNy42NyA2LjE2NSA2IDguMzg4IDYgMTF2My4xNTljMCAuNTM4LS4yMTQgMS4wNTUtLjU5NSAxLjQzNkw0IDE3aDVtNiAwdjFhMyAzIDAgMTEtNiAwdi0xbTYgMEg5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICB7Lyog55So5oi26LOH6KiKICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTggaC04IGJnLXByaW1hcnkgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt1c2VyPy51c2VybmFtZT8uWzBdPy50b1VwcGVyQ2FzZSgpIHx8ICdVJ31cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW1cIj57dXNlcj8uZGlzcGxheU5hbWUgfHwgdXNlcj8udXNlcm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1sLTQgdGV4dC1zbSB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25hdj5cclxuICApXHJcbn0iXSwibmFtZXMiOlsiTGluayIsInVzZVBhdGhuYW1lIiwidXNlQXV0aCIsIk5hdmlnYXRpb24iLCJzaG93RXhpdExlYXJuaW5nIiwib25FeGl0TGVhcm5pbmciLCJ1c2VyIiwibG9nb3V0IiwicGF0aG5hbWUiLCJuYXZJdGVtcyIsImhyZWYiLCJsYWJlbCIsIm5hdiIsImNsYXNzTmFtZSIsImRpdiIsIm1hcCIsIml0ZW0iLCJidXR0b24iLCJvbkNsaWNrIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./contexts/AuthContext.tsx": +/*!**********************************!*\ + !*** ./contexts/AuthContext.tsx ***! + \**********************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ 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 */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/services/auth */ \"(app-pages-browser)/./lib/services/auth.ts\");\n/* __next_internal_client_entry_do_not_use__ useAuth,AuthProvider auto */ \nvar _s = $RefreshSig$(), _s1 = $RefreshSig$();\n\n\nconst AuthContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(undefined);\nconst useAuth = ()=>{\n _s();\n const context = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n};\n_s(useAuth, \"b9L3QQ+jgeyIrH0NfHrJ8nn7VMU=\");\nconst AuthProvider = (param)=>{\n let { children } = param;\n _s1();\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n user: null,\n token: null,\n isAuthenticated: false,\n isLoading: true\n });\n // 初始化時檢查認證狀態\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"AuthProvider.useEffect\": ()=>{\n const initAuth = {\n \"AuthProvider.useEffect.initAuth\": async ()=>{\n const token = _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.getToken();\n const user = _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.getUser();\n if (token && user) {\n // 驗證 token 是否仍然有效\n const isValid = await _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.checkAuthStatus();\n if (isValid) {\n setState({\n user,\n token,\n isAuthenticated: true,\n isLoading: false\n });\n } else {\n // Token 無效,清除本地存儲\n _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.logout();\n setState({\n user: null,\n token: null,\n isAuthenticated: false,\n isLoading: false\n });\n }\n } else {\n setState({\n user: null,\n token: null,\n isAuthenticated: false,\n isLoading: false\n });\n }\n }\n }[\"AuthProvider.useEffect.initAuth\"];\n initAuth();\n }\n }[\"AuthProvider.useEffect\"], []);\n const login = async (email, password)=>{\n try {\n const response = await _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.login({\n email,\n password\n });\n if (response.success && response.data) {\n setState({\n user: response.data.user,\n token: response.data.token,\n isAuthenticated: true,\n isLoading: false\n });\n return {\n success: true\n };\n } else {\n return {\n success: false,\n error: response.error || '登入失敗'\n };\n }\n } catch (error) {\n return {\n success: false,\n error: '網路錯誤,請稍後再試'\n };\n }\n };\n const register = async (username, email, password)=>{\n try {\n const response = await _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.register({\n username,\n email,\n password\n });\n if (response.success && response.data) {\n setState({\n user: response.data.user,\n token: response.data.token,\n isAuthenticated: true,\n isLoading: false\n });\n return {\n success: true\n };\n } else {\n return {\n success: false,\n error: response.error || '註冊失敗'\n };\n }\n } catch (error) {\n return {\n success: false,\n error: '網路錯誤,請稍後再試'\n };\n }\n };\n const logout = ()=>{\n _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.logout();\n setState({\n user: null,\n token: null,\n isAuthenticated: false,\n isLoading: false\n });\n };\n const checkAuth = async ()=>{\n if (!state.token) return false;\n const isValid = await _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.checkAuthStatus();\n if (!isValid) {\n logout();\n return false;\n }\n return true;\n };\n const contextValue = {\n ...state,\n login,\n register,\n logout,\n checkAuth\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(AuthContext.Provider, {\n value: contextValue,\n children: children\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/contexts/AuthContext.tsx\",\n lineNumber: 151,\n columnNumber: 5\n }, undefined);\n};\n_s1(AuthProvider, \"STD6XmSLej9PRMYjA5U8weIzddw=\");\n_c = AuthProvider;\nvar _c;\n$RefreshReg$(_c, \"AuthProvider\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbnRleHRzL0F1dGhDb250ZXh0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUV3RjtBQUNqQztBQWdCdkQsTUFBTU0sNEJBQWNMLG9EQUFhQSxDQUE4Qk07QUFFeEQsTUFBTUMsVUFBVTs7SUFDckIsTUFBTUMsVUFBVVAsaURBQVVBLENBQUNJO0lBQzNCLElBQUlHLFlBQVlGLFdBQVc7UUFDekIsTUFBTSxJQUFJRyxNQUFNO0lBQ2xCO0lBQ0EsT0FBT0Q7QUFDVCxFQUFDO0dBTllEO0FBWU4sTUFBTUcsZUFBNEM7UUFBQyxFQUFFQyxRQUFRLEVBQUU7O0lBQ3BFLE1BQU0sQ0FBQ0MsT0FBT0MsU0FBUyxHQUFHViwrQ0FBUUEsQ0FBWTtRQUM1Q1csTUFBTTtRQUNOQyxPQUFPO1FBQ1BDLGlCQUFpQjtRQUNqQkMsV0FBVztJQUNiO0lBRUEsYUFBYTtJQUNiZixnREFBU0E7a0NBQUM7WUFDUixNQUFNZ0I7bURBQVc7b0JBQ2YsTUFBTUgsUUFBUVgsMkRBQVdBLENBQUNlLFFBQVE7b0JBQ2xDLE1BQU1MLE9BQU9WLDJEQUFXQSxDQUFDZ0IsT0FBTztvQkFFaEMsSUFBSUwsU0FBU0QsTUFBTTt3QkFDakIsa0JBQWtCO3dCQUNsQixNQUFNTyxVQUFVLE1BQU1qQiwyREFBV0EsQ0FBQ2tCLGVBQWU7d0JBQ2pELElBQUlELFNBQVM7NEJBQ1hSLFNBQVM7Z0NBQ1BDO2dDQUNBQztnQ0FDQUMsaUJBQWlCO2dDQUNqQkMsV0FBVzs0QkFDYjt3QkFDRixPQUFPOzRCQUNMLGtCQUFrQjs0QkFDbEJiLDJEQUFXQSxDQUFDbUIsTUFBTTs0QkFDbEJWLFNBQVM7Z0NBQ1BDLE1BQU07Z0NBQ05DLE9BQU87Z0NBQ1BDLGlCQUFpQjtnQ0FDakJDLFdBQVc7NEJBQ2I7d0JBQ0Y7b0JBQ0YsT0FBTzt3QkFDTEosU0FBUzs0QkFDUEMsTUFBTTs0QkFDTkMsT0FBTzs0QkFDUEMsaUJBQWlCOzRCQUNqQkMsV0FBVzt3QkFDYjtvQkFDRjtnQkFDRjs7WUFFQUM7UUFDRjtpQ0FBRyxFQUFFO0lBRUwsTUFBTU0sUUFBUSxPQUFPQyxPQUFlQztRQUNsQyxJQUFJO1lBQ0YsTUFBTUMsV0FBVyxNQUFNdkIsMkRBQVdBLENBQUNvQixLQUFLLENBQUM7Z0JBQUVDO2dCQUFPQztZQUFTO1lBRTNELElBQUlDLFNBQVNDLE9BQU8sSUFBSUQsU0FBU0UsSUFBSSxFQUFFO2dCQUNyQ2hCLFNBQVM7b0JBQ1BDLE1BQU1hLFNBQVNFLElBQUksQ0FBQ2YsSUFBSTtvQkFDeEJDLE9BQU9ZLFNBQVNFLElBQUksQ0FBQ2QsS0FBSztvQkFDMUJDLGlCQUFpQjtvQkFDakJDLFdBQVc7Z0JBQ2I7Z0JBQ0EsT0FBTztvQkFBRVcsU0FBUztnQkFBSztZQUN6QixPQUFPO2dCQUNMLE9BQU87b0JBQUVBLFNBQVM7b0JBQU9FLE9BQU9ILFNBQVNHLEtBQUssSUFBSTtnQkFBTztZQUMzRDtRQUNGLEVBQUUsT0FBT0EsT0FBTztZQUNkLE9BQU87Z0JBQUVGLFNBQVM7Z0JBQU9FLE9BQU87WUFBYTtRQUMvQztJQUNGO0lBRUEsTUFBTUMsV0FBVyxPQUFPQyxVQUFrQlAsT0FBZUM7UUFDdkQsSUFBSTtZQUNGLE1BQU1DLFdBQVcsTUFBTXZCLDJEQUFXQSxDQUFDMkIsUUFBUSxDQUFDO2dCQUFFQztnQkFBVVA7Z0JBQU9DO1lBQVM7WUFFeEUsSUFBSUMsU0FBU0MsT0FBTyxJQUFJRCxTQUFTRSxJQUFJLEVBQUU7Z0JBQ3JDaEIsU0FBUztvQkFDUEMsTUFBTWEsU0FBU0UsSUFBSSxDQUFDZixJQUFJO29CQUN4QkMsT0FBT1ksU0FBU0UsSUFBSSxDQUFDZCxLQUFLO29CQUMxQkMsaUJBQWlCO29CQUNqQkMsV0FBVztnQkFDYjtnQkFDQSxPQUFPO29CQUFFVyxTQUFTO2dCQUFLO1lBQ3pCLE9BQU87Z0JBQ0wsT0FBTztvQkFBRUEsU0FBUztvQkFBT0UsT0FBT0gsU0FBU0csS0FBSyxJQUFJO2dCQUFPO1lBQzNEO1FBQ0YsRUFBRSxPQUFPQSxPQUFPO1lBQ2QsT0FBTztnQkFBRUYsU0FBUztnQkFBT0UsT0FBTztZQUFhO1FBQy9DO0lBQ0Y7SUFFQSxNQUFNUCxTQUFTO1FBQ2JuQiwyREFBV0EsQ0FBQ21CLE1BQU07UUFDbEJWLFNBQVM7WUFDUEMsTUFBTTtZQUNOQyxPQUFPO1lBQ1BDLGlCQUFpQjtZQUNqQkMsV0FBVztRQUNiO0lBQ0Y7SUFFQSxNQUFNZ0IsWUFBWTtRQUNoQixJQUFJLENBQUNyQixNQUFNRyxLQUFLLEVBQUUsT0FBTztRQUV6QixNQUFNTSxVQUFVLE1BQU1qQiwyREFBV0EsQ0FBQ2tCLGVBQWU7UUFDakQsSUFBSSxDQUFDRCxTQUFTO1lBQ1pFO1lBQ0EsT0FBTztRQUNUO1FBQ0EsT0FBTztJQUNUO0lBRUEsTUFBTVcsZUFBZ0M7UUFDcEMsR0FBR3RCLEtBQUs7UUFDUlk7UUFDQU87UUFDQVI7UUFDQVU7SUFDRjtJQUVBLHFCQUNFLDhEQUFDNUIsWUFBWThCLFFBQVE7UUFBQ0MsT0FBT0Y7a0JBQzFCdkI7Ozs7OztBQUdQLEVBQUM7SUF6SFlEO0tBQUFBIiwic291cmNlcyI6WyIvVXNlcnMvamV0dGNoZW5nMTAxOC9jb2RlL2RyYW1hbGluZy12b2NhYi1sZWFybmluZy9mcm9udGVuZC9jb250ZXh0cy9BdXRoQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXHJcblxyXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXHJcbmltcG9ydCB7IGF1dGhTZXJ2aWNlLCBVc2VyIH0gZnJvbSAnQC9saWIvc2VydmljZXMvYXV0aCdcclxuXHJcbmludGVyZmFjZSBBdXRoU3RhdGUge1xyXG4gIHVzZXI6IFVzZXIgfCBudWxsXHJcbiAgdG9rZW46IHN0cmluZyB8IG51bGxcclxuICBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW5cclxuICBpc0xvYWRpbmc6IGJvb2xlYW5cclxufVxyXG5cclxuaW50ZXJmYWNlIEF1dGhDb250ZXh0VHlwZSBleHRlbmRzIEF1dGhTdGF0ZSB7XHJcbiAgbG9naW46IChlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSA9PiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfT5cclxuICByZWdpc3RlcjogKHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpID0+IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9PlxyXG4gIGxvZ291dDogKCkgPT4gdm9pZFxyXG4gIGNoZWNrQXV0aDogKCkgPT4gUHJvbWlzZTxib29sZWFuPlxyXG59XHJcblxyXG5jb25zdCBBdXRoQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QXV0aENvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXHJcblxyXG5leHBvcnQgY29uc3QgdXNlQXV0aCA9ICgpID0+IHtcclxuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChBdXRoQ29udGV4dClcclxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUF1dGggbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBBdXRoUHJvdmlkZXInKVxyXG4gIH1cclxuICByZXR1cm4gY29udGV4dFxyXG59XHJcblxyXG5pbnRlcmZhY2UgQXV0aFByb3ZpZGVyUHJvcHMge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IEF1dGhQcm92aWRlcjogUmVhY3QuRkM8QXV0aFByb3ZpZGVyUHJvcHM+ID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xyXG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGU8QXV0aFN0YXRlPih7XHJcbiAgICB1c2VyOiBudWxsLFxyXG4gICAgdG9rZW46IG51bGwsXHJcbiAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxyXG4gICAgaXNMb2FkaW5nOiB0cnVlLFxyXG4gIH0pXHJcblxyXG4gIC8vIOWIneWni+WMluaZguaqouafpeiqjeitieeLgOaFi1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zdCBpbml0QXV0aCA9IGFzeW5jICgpID0+IHtcclxuICAgICAgY29uc3QgdG9rZW4gPSBhdXRoU2VydmljZS5nZXRUb2tlbigpXHJcbiAgICAgIGNvbnN0IHVzZXIgPSBhdXRoU2VydmljZS5nZXRVc2VyKClcclxuXHJcbiAgICAgIGlmICh0b2tlbiAmJiB1c2VyKSB7XHJcbiAgICAgICAgLy8g6amX6K2JIHRva2VuIOaYr+WQpuS7jeeEtuacieaViFxyXG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCBhdXRoU2VydmljZS5jaGVja0F1dGhTdGF0dXMoKVxyXG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICBzZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHVzZXIsXHJcbiAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBUb2tlbiDnhKHmlYjvvIzmuIXpmaTmnKzlnLDlrZjlhLJcclxuICAgICAgICAgIGF1dGhTZXJ2aWNlLmxvZ291dCgpXHJcbiAgICAgICAgICBzZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0U3RhdGUoe1xyXG4gICAgICAgICAgdXNlcjogbnVsbCxcclxuICAgICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcclxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRBdXRoKClcclxuICB9LCBbXSlcclxuXHJcbiAgY29uc3QgbG9naW4gPSBhc3luYyAoZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhdXRoU2VydmljZS5sb2dpbih7IGVtYWlsLCBwYXNzd29yZCB9KVxyXG5cclxuICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xyXG4gICAgICAgIHNldFN0YXRlKHtcclxuICAgICAgICAgIHVzZXI6IHJlc3BvbnNlLmRhdGEudXNlcixcclxuICAgICAgICAgIHRva2VuOiByZXNwb25zZS5kYXRhLnRva2VuLFxyXG4gICAgICAgICAgaXNBdXRoZW50aWNhdGVkOiB0cnVlLFxyXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogcmVzcG9uc2UuZXJyb3IgfHwgJ+eZu+WFpeWkseaVlycgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICfntrLot6/pjK/oqqTvvIzoq4vnqI3lvozlho3oqaYnIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHJlZ2lzdGVyID0gYXN5bmMgKHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXV0aFNlcnZpY2UucmVnaXN0ZXIoeyB1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkIH0pXHJcblxyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XHJcbiAgICAgICAgc2V0U3RhdGUoe1xyXG4gICAgICAgICAgdXNlcjogcmVzcG9uc2UuZGF0YS51c2VyLFxyXG4gICAgICAgICAgdG9rZW46IHJlc3BvbnNlLmRhdGEudG9rZW4sXHJcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXHJcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiByZXNwb25zZS5lcnJvciB8fCAn6Ki75YaK5aSx5pWXJyB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ+e2sui3r+mMr+iqpO+8jOiri+eojeW+jOWGjeippicgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgbG9nb3V0ID0gKCkgPT4ge1xyXG4gICAgYXV0aFNlcnZpY2UubG9nb3V0KClcclxuICAgIHNldFN0YXRlKHtcclxuICAgICAgdXNlcjogbnVsbCxcclxuICAgICAgdG9rZW46IG51bGwsXHJcbiAgICAgIGlzQXV0aGVudGljYXRlZDogZmFsc2UsXHJcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2hlY2tBdXRoID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgaWYgKCFzdGF0ZS50b2tlbikgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGF1dGhTZXJ2aWNlLmNoZWNrQXV0aFN0YXR1cygpXHJcbiAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgbG9nb3V0KClcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY29udGV4dFZhbHVlOiBBdXRoQ29udGV4dFR5cGUgPSB7XHJcbiAgICAuLi5zdGF0ZSxcclxuICAgIGxvZ2luLFxyXG4gICAgcmVnaXN0ZXIsXHJcbiAgICBsb2dvdXQsXHJcbiAgICBjaGVja0F1dGgsXHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPEF1dGhDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L0F1dGhDb250ZXh0LlByb3ZpZGVyPlxyXG4gIClcclxufSJdLCJuYW1lcyI6WyJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJhdXRoU2VydmljZSIsIkF1dGhDb250ZXh0IiwidW5kZWZpbmVkIiwidXNlQXV0aCIsImNvbnRleHQiLCJFcnJvciIsIkF1dGhQcm92aWRlciIsImNoaWxkcmVuIiwic3RhdGUiLCJzZXRTdGF0ZSIsInVzZXIiLCJ0b2tlbiIsImlzQXV0aGVudGljYXRlZCIsImlzTG9hZGluZyIsImluaXRBdXRoIiwiZ2V0VG9rZW4iLCJnZXRVc2VyIiwiaXNWYWxpZCIsImNoZWNrQXV0aFN0YXR1cyIsImxvZ291dCIsImxvZ2luIiwiZW1haWwiLCJwYXNzd29yZCIsInJlc3BvbnNlIiwic3VjY2VzcyIsImRhdGEiLCJlcnJvciIsInJlZ2lzdGVyIiwidXNlcm5hbWUiLCJjaGVja0F1dGgiLCJjb250ZXh0VmFsdWUiLCJQcm92aWRlciIsInZhbHVlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./contexts/AuthContext.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./lib/services/auth.ts": +/*!******************************!*\ + !*** ./lib/services/auth.ts ***! + \******************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ authService: () => (/* binding */ authService)\n/* harmony export */ });\n// Auth service for handling authentication API calls\nconst API_BASE_URL = 'http://localhost:5000';\nclass AuthService {\n async makeRequest(endpoint) {\n let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n const url = \"\".concat(API_BASE_URL, \"/api/auth\").concat(endpoint);\n console.log('Making request to:', url);\n console.log('Request body:', options.body);\n const response = await fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n ...options\n });\n if (!response.ok) {\n const errorData = await response.json().catch(()=>({\n error: 'Network error'\n }));\n console.log('API Error Response:', errorData);\n // 處理驗證錯誤 (400 Bad Request)\n if (response.status === 400 && errorData.errors) {\n const validationErrors = Object.entries(errorData.errors).map((param)=>{\n let [field, messages] = param;\n return \"\".concat(field, \": \").concat(Array.isArray(messages) ? messages.join(', ') : messages);\n }).join('\\n');\n throw new Error(validationErrors);\n }\n throw new Error(errorData.error || errorData.title || \"HTTP \".concat(response.status));\n }\n return response.json();\n }\n async login(data) {\n try {\n var _response_data;\n const response = await this.makeRequest('/login', {\n method: 'POST',\n body: JSON.stringify(data)\n });\n if (response.success && ((_response_data = response.data) === null || _response_data === void 0 ? void 0 : _response_data.token)) {\n // Store token in localStorage\n localStorage.setItem('auth_token', response.data.token);\n localStorage.setItem('user_data', JSON.stringify(response.data.user));\n }\n return response;\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Login failed'\n };\n }\n }\n async register(data) {\n try {\n var _response_data;\n console.log('AuthService.register called with:', {\n username: data.username,\n email: data.email,\n password: data.password ? '[hidden]' : 'empty'\n });\n const response = await this.makeRequest('/register', {\n method: 'POST',\n body: JSON.stringify(data)\n });\n if (response.success && ((_response_data = response.data) === null || _response_data === void 0 ? void 0 : _response_data.token)) {\n // Store token in localStorage\n localStorage.setItem('auth_token', response.data.token);\n localStorage.setItem('user_data', JSON.stringify(response.data.user));\n }\n return response;\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Registration failed'\n };\n }\n }\n async logout() {\n localStorage.removeItem('auth_token');\n localStorage.removeItem('user_data');\n }\n getToken() {\n if (false) {}\n return localStorage.getItem('auth_token');\n }\n getUser() {\n if (false) {}\n const userData = localStorage.getItem('user_data');\n return userData ? JSON.parse(userData) : null;\n }\n isAuthenticated() {\n return this.getToken() !== null;\n }\n async checkAuthStatus() {\n const token = this.getToken();\n if (!token) return false;\n try {\n await this.makeRequest('/status', {\n headers: {\n 'Authorization': \"Bearer \".concat(token)\n }\n });\n return true;\n } catch (e) {\n // Token is invalid, clear it\n this.logout();\n return false;\n }\n }\n}\nconst authService = new AuthService();\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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b2NhYi1sZWFybmluZy9mcm9udGVuZC9saWIvc2VydmljZXMvYXV0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBdXRoIHNlcnZpY2UgZm9yIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uIEFQSSBjYWxsc1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlcXVlc3Qge1xyXG4gIGVtYWlsOiBzdHJpbmc7XHJcbiAgcGFzc3dvcmQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlclJlcXVlc3Qge1xyXG4gIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgZW1haWw6IHN0cmluZztcclxuICBwYXNzd29yZDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdXNlcm5hbWU6IHN0cmluZztcclxuICBlbWFpbDogc3RyaW5nO1xyXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCBudWxsO1xyXG4gIGF2YXRhclVybDogc3RyaW5nIHwgbnVsbDtcclxuICBzdWJzY3JpcHRpb25UeXBlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFJlc3BvbnNlIHtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIGRhdGE/OiB7XHJcbiAgICB0b2tlbjogc3RyaW5nO1xyXG4gICAgdXNlcjogVXNlcjtcclxuICB9O1xyXG4gIGVycm9yPzogc3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCBBUElfQkFTRV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo1MDAwJztcclxuXHJcbmNsYXNzIEF1dGhTZXJ2aWNlIHtcclxuICBwcml2YXRlIGFzeW5jIG1ha2VSZXF1ZXN0PFQ+KFxyXG4gICAgZW5kcG9pbnQ6IHN0cmluZyxcclxuICAgIG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge31cclxuICApOiBQcm9taXNlPFQ+IHtcclxuICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL2F1dGgke2VuZHBvaW50fWA7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ01ha2luZyByZXF1ZXN0IHRvOicsIHVybClcclxuICAgIGNvbnNvbGUubG9nKCdSZXF1ZXN0IGJvZHk6Jywgb3B0aW9ucy5ib2R5KVxyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcclxuICAgICAgfSxcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7IGVycm9yOiAnTmV0d29yayBlcnJvcicgfSkpO1xyXG4gICAgICBjb25zb2xlLmxvZygnQVBJIEVycm9yIFJlc3BvbnNlOicsIGVycm9yRGF0YSlcclxuXHJcbiAgICAgIC8vIOiZleeQhumpl+itiemMr+iqpCAoNDAwIEJhZCBSZXF1ZXN0KVxyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgZXJyb3JEYXRhLmVycm9ycykge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSBPYmplY3QuZW50cmllcyhlcnJvckRhdGEuZXJyb3JzKVxyXG4gICAgICAgICAgLm1hcCgoW2ZpZWxkLCBtZXNzYWdlc106IFtzdHJpbmcsIGFueV0pID0+IGAke2ZpZWxkfTogJHtBcnJheS5pc0FycmF5KG1lc3NhZ2VzKSA/IG1lc3NhZ2VzLmpvaW4oJywgJykgOiBtZXNzYWdlc31gKVxyXG4gICAgICAgICAgLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcih2YWxpZGF0aW9uRXJyb3JzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yRGF0YS5lcnJvciB8fCBlcnJvckRhdGEudGl0bGUgfHwgYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvZ2luKGRhdGE6IExvZ2luUmVxdWVzdCk6IFByb21pc2U8QXV0aFJlc3BvbnNlPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3Q8QXV0aFJlc3BvbnNlPignL2xvZ2luJywge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGE/LnRva2VuKSB7XHJcbiAgICAgICAgLy8gU3RvcmUgdG9rZW4gaW4gbG9jYWxTdG9yYWdlXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2F1dGhfdG9rZW4nLCByZXNwb25zZS5kYXRhLnRva2VuKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlcl9kYXRhJywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YS51c2VyKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0xvZ2luIGZhaWxlZCcsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZWdpc3RlcihkYXRhOiBSZWdpc3RlclJlcXVlc3QpOiBQcm9taXNlPEF1dGhSZXNwb25zZT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc29sZS5sb2coJ0F1dGhTZXJ2aWNlLnJlZ2lzdGVyIGNhbGxlZCB3aXRoOicsIHtcclxuICAgICAgICB1c2VybmFtZTogZGF0YS51c2VybmFtZSxcclxuICAgICAgICBlbWFpbDogZGF0YS5lbWFpbCxcclxuICAgICAgICBwYXNzd29yZDogZGF0YS5wYXNzd29yZCA/ICdbaGlkZGVuXScgOiAnZW1wdHknXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3Q8QXV0aFJlc3BvbnNlPignL3JlZ2lzdGVyJywge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGE/LnRva2VuKSB7XHJcbiAgICAgICAgLy8gU3RvcmUgdG9rZW4gaW4gbG9jYWxTdG9yYWdlXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2F1dGhfdG9rZW4nLCByZXNwb25zZS5kYXRhLnRva2VuKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlcl9kYXRhJywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YS51c2VyKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1JlZ2lzdHJhdGlvbiBmYWlsZWQnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9nb3V0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1dGhfdG9rZW4nKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd1c2VyX2RhdGEnKTtcclxuICB9XHJcblxyXG4gIGdldFRva2VuKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXV0aF90b2tlbicpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlcigpOiBVc2VyIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdXNlckRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcl9kYXRhJyk7XHJcbiAgICByZXR1cm4gdXNlckRhdGEgPyBKU09OLnBhcnNlKHVzZXJEYXRhKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbigpICE9PSBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tBdXRoU3RhdHVzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XHJcbiAgICBpZiAoIXRva2VuKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5tYWtlUmVxdWVzdCgnL3N0YXR1cycsIHtcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyBUb2tlbiBpcyBpbnZhbGlkLCBjbGVhciBpdFxyXG4gICAgICB0aGlzLmxvZ291dCgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0aFNlcnZpY2UgPSBuZXcgQXV0aFNlcnZpY2UoKTsiXSwibmFtZXMiOlsiQVBJX0JBU0VfVVJMIiwiQXV0aFNlcnZpY2UiLCJtYWtlUmVxdWVzdCIsImVuZHBvaW50Iiwib3B0aW9ucyIsInVybCIsImNvbnNvbGUiLCJsb2ciLCJib2R5IiwicmVzcG9uc2UiLCJmZXRjaCIsImhlYWRlcnMiLCJvayIsImVycm9yRGF0YSIsImpzb24iLCJjYXRjaCIsImVycm9yIiwic3RhdHVzIiwiZXJyb3JzIiwidmFsaWRhdGlvbkVycm9ycyIsIk9iamVjdCIsImVudHJpZXMiLCJtYXAiLCJmaWVsZCIsIm1lc3NhZ2VzIiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsIkVycm9yIiwidGl0bGUiLCJsb2dpbiIsImRhdGEiLCJtZXRob2QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3VjY2VzcyIsInRva2VuIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInVzZXIiLCJtZXNzYWdlIiwicmVnaXN0ZXIiLCJ1c2VybmFtZSIsImVtYWlsIiwicGFzc3dvcmQiLCJsb2dvdXQiLCJyZW1vdmVJdGVtIiwiZ2V0VG9rZW4iLCJnZXRJdGVtIiwiZ2V0VXNlciIsInVzZXJEYXRhIiwicGFyc2UiLCJpc0F1dGhlbnRpY2F0ZWQiLCJjaGVja0F1dGhTdGF0dXMiLCJhdXRoU2VydmljZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/services/auth.ts\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js": +/*!**************************************************!*\ + !*** ./node_modules/next/dist/api/navigation.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEOztBQUVoRCIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9hcGkvbmF2aWdhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuLi9jbGllbnQvY29tcG9uZW50cy9uYXZpZ2F0aW9uJztcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmF2aWdhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n")); /***/ }), diff --git a/frontend/.next/static/chunks/webpack.js b/frontend/.next/static/chunks/webpack.js index d6d6a46..66ba3de 100644 --- a/frontend/.next/static/chunks/webpack.js +++ b/frontend/.next/static/chunks/webpack.js @@ -182,7 +182,7 @@ /******/ /******/ /* webpack/runtime/getFullHash */ /******/ (() => { -/******/ __webpack_require__.h = () => ("5b6833c08c682ad1") +/******/ __webpack_require__.h = () => ("5cc104d72f085a60") /******/ })(); /******/ /******/ /* webpack/runtime/global */ @@ -1401,5 +1401,5 @@ /******/ /******/ })() -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG4vKioqKioqLyAoKCkgPT4geyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdFwidXNlIHN0cmljdFwiO1xuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9ICh7fSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbi8qKioqKiovIFx0XHRcdGlmIChjYWNoZWRNb2R1bGUuZXJyb3IgIT09IHVuZGVmaW5lZCkgdGhyb3cgY2FjaGVkTW9kdWxlLmVycm9yO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0dmFyIHRocmV3ID0gdHJ1ZTtcbi8qKioqKiovIFx0XHR0cnkge1xuLyoqKioqKi8gXHRcdFx0dmFyIGV4ZWNPcHRpb25zID0geyBpZDogbW9kdWxlSWQsIG1vZHVsZTogbW9kdWxlLCBmYWN0b3J5OiBfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXSwgcmVxdWlyZTogX193ZWJwYWNrX3JlcXVpcmVfXyB9O1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlcikgeyBoYW5kbGVyKGV4ZWNPcHRpb25zKTsgfSk7XG4vKioqKioqLyBcdFx0XHRtb2R1bGUgPSBleGVjT3B0aW9ucy5tb2R1bGU7XG4vKioqKioqLyBcdFx0XHRleGVjT3B0aW9ucy5mYWN0b3J5LmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIGV4ZWNPcHRpb25zLnJlcXVpcmUpO1xuLyoqKioqKi8gXHRcdFx0dGhyZXcgPSBmYWxzZTtcbi8qKioqKiovIFx0XHR9IGZpbmFsbHkge1xuLyoqKioqKi8gXHRcdFx0aWYodGhyZXcpIGRlbGV0ZSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfXztcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGV4ZWN1dGlvbiBpbnRlcmNlcHRvclxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBbXTtcbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0dmFyIGRlZmVycmVkID0gW107XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5PID0gKHJlc3VsdCwgY2h1bmtJZHMsIGZuLCBwcmlvcml0eSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0aWYoY2h1bmtJZHMpIHtcbi8qKioqKiovIFx0XHRcdFx0cHJpb3JpdHkgPSBwcmlvcml0eSB8fCAwO1xuLyoqKioqKi8gXHRcdFx0XHRmb3IodmFyIGkgPSBkZWZlcnJlZC5sZW5ndGg7IGkgPiAwICYmIGRlZmVycmVkW2kgLSAxXVsyXSA+IHByaW9yaXR5OyBpLS0pIGRlZmVycmVkW2ldID0gZGVmZXJyZWRbaSAtIDFdO1xuLyoqKioqKi8gXHRcdFx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuLyoqKioqKi8gXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZWZlcnJlZC5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldID0gZGVmZXJyZWRbaV07XG4vKioqKioqLyBcdFx0XHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuLyoqKioqKi8gXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNodW5rSWRzLmxlbmd0aDsgaisrKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKChwcmlvcml0eSAmIDEgPT09IDAgfHwgbm90RnVsZmlsbGVkID49IHByaW9yaXR5KSAmJiBPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLk8pLmV2ZXJ5KChrZXkpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fLk9ba2V5XShjaHVua0lkc1tqXSkpKSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG4vKioqKioqLyBcdFx0XHRcdFx0fSBlbHNlIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGZ1bGZpbGxlZCA9IGZhbHNlO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRpZihmdWxmaWxsZWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRkZWZlcnJlZC5zcGxpY2UoaS0tLCAxKVxuLyoqKioqKi8gXHRcdFx0XHRcdHZhciByID0gZm4oKTtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gcmVzdWx0O1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuLyoqKioqKi8gXHRcdFx0XHQoKSA9PiAobW9kdWxlKTtcbi8qKioqKiovIFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyAob2JqKSA9PiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpIDogKG9iaikgPT4gKG9iai5fX3Byb3RvX18pO1xuLyoqKioqKi8gXHRcdHZhciBsZWFmUHJvdG90eXBlcztcbi8qKioqKiovIFx0XHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0XHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0XHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0XHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0XHQvLyBtb2RlICYgMTY6IHJldHVybiB2YWx1ZSB3aGVuIGl0J3MgUHJvbWlzZS1saWtlXG4vKioqKioqLyBcdFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSB0aGlzKHZhbHVlKTtcbi8qKioqKiovIFx0XHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0XHRpZih0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmKChtb2RlICYgNCkgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdFx0XHRpZigobW9kZSAmIDE2KSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0XHR2YXIgZGVmID0ge307XG4vKioqKioqLyBcdFx0XHRsZWFmUHJvdG90eXBlcyA9IGxlYWZQcm90b3R5cGVzIHx8IFtudWxsLCBnZXRQcm90byh7fSksIGdldFByb3RvKFtdKSwgZ2V0UHJvdG8oZ2V0UHJvdG8pXTtcbi8qKioqKiovIFx0XHRcdGZvcih2YXIgY3VycmVudCA9IG1vZGUgJiAyICYmIHZhbHVlOyB0eXBlb2YgY3VycmVudCA9PSAnb2JqZWN0JyAmJiAhfmxlYWZQcm90b3R5cGVzLmluZGV4T2YoY3VycmVudCk7IGN1cnJlbnQgPSBnZXRQcm90byhjdXJyZW50KSkge1xuLyoqKioqKi8gXHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IChkZWZba2V5XSA9ICgpID0+ICh2YWx1ZVtrZXldKSkpO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0ZGVmWydkZWZhdWx0J10gPSAoKSA9PiAodmFsdWUpO1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBkZWYpO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcbi8qKioqKiovIFx0XHRcdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcbi8qKioqKiovIFx0XHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZW5zdXJlIGNodW5rICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vKioqKioqLyBcdFx0Ly8gVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlIGVudHJ5IGNodW5rLlxuLyoqKioqKi8gXHRcdC8vIFRoZSBjaHVuayBsb2FkaW5nIGZ1bmN0aW9uIGZvciBhZGRpdGlvbmFsIGNodW5rc1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5mKS5yZWR1Y2UoKHByb21pc2VzLCBrZXkpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mW2tleV0oY2h1bmtJZCwgcHJvbWlzZXMpO1xuLyoqKioqKi8gXHRcdFx0XHRyZXR1cm4gcHJvbWlzZXM7XG4vKioqKioqLyBcdFx0XHR9LCBbXSkpO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3Ncbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgdXBkYXRlIGNodW5rIGZpbGVuYW1lICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYWxsIGNodW5rc1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uaHUgPSAoY2h1bmtJZCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gXCJzdGF0aWMvd2VicGFjay9cIiArIGNodW5rSWQgKyBcIi5cIiArIF9fd2VicGFja19yZXF1aXJlX18uaCgpICsgXCIuaG90LXVwZGF0ZS5qc1wiO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZ2V0IG1pbmktY3NzIGNodW5rIGZpbGVuYW1lICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5taW5pQ3NzRiA9IChjaHVua0lkKSA9PiB7XG4vKioqKioqLyBcdFx0XHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcbi8qKioqKiovIFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9nZXQgdXBkYXRlIG1hbmlmZXN0IGZpbGVuYW1lICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJGID0gKCkgPT4gKFwic3RhdGljL3dlYnBhY2svXCIgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLmgoKSArIFwiLndlYnBhY2suaG90LXVwZGF0ZS5qc29uXCIpO1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5oID0gKCkgPT4gKFwiNWI2ODMzYzA4YzY4MmFkMVwiKVxuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2dsb2JhbCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHRcdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuLyoqKioqKi8gXHRcdFx0dHJ5IHtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4vKioqKioqLyBcdFx0XHR9IGNhdGNoIChlKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9KSgpO1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSlcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9sb2FkIHNjcmlwdCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdHZhciBpblByb2dyZXNzID0ge307XG4vKioqKioqLyBcdFx0dmFyIGRhdGFXZWJwYWNrUHJlZml4ID0gXCJfTl9FOlwiO1xuLyoqKioqKi8gXHRcdC8vIGxvYWRTY3JpcHQgZnVuY3Rpb24gdG8gbG9hZCBhIHNjcmlwdCB2aWEgc2NyaXB0IHRhZ1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubCA9ICh1cmwsIGRvbmUsIGtleSwgY2h1bmtJZCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0aWYoaW5Qcm9ncmVzc1t1cmxdKSB7IGluUHJvZ3Jlc3NbdXJsXS5wdXNoKGRvbmUpOyByZXR1cm47IH1cbi8qKioqKiovIFx0XHRcdHZhciBzY3JpcHQsIG5lZWRBdHRhY2g7XG4vKioqKioqLyBcdFx0XHRpZihrZXkgIT09IHVuZGVmaW5lZCkge1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuLyoqKioqKi8gXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBzID0gc2NyaXB0c1tpXTtcbi8qKioqKiovIFx0XHRcdFx0XHRpZihzLmdldEF0dHJpYnV0ZShcInNyY1wiKSA9PSB1cmwgfHwgcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXdlYnBhY2tcIikgPT0gZGF0YVdlYnBhY2tQcmVmaXggKyBrZXkpIHsgc2NyaXB0ID0gczsgYnJlYWs7IH1cbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0aWYoIXNjcmlwdCkge1xuLyoqKioqKi8gXHRcdFx0XHRuZWVkQXR0YWNoID0gdHJ1ZTtcbi8qKioqKiovIFx0XHRcdFx0c2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdHNjcmlwdC5jaGFyc2V0ID0gJ3V0Zi04Jztcbi8qKioqKiovIFx0XHRcdFx0c2NyaXB0LnRpbWVvdXQgPSAxMjA7XG4vKioqKioqLyBcdFx0XHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm5jKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIF9fd2VicGFja19yZXF1aXJlX18ubmMpO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXdlYnBhY2tcIiwgZGF0YVdlYnBhY2tQcmVmaXggKyBrZXkpO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRzY3JpcHQuc3JjID0gX193ZWJwYWNrX3JlcXVpcmVfXy50dSh1cmwpO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0aW5Qcm9ncmVzc1t1cmxdID0gW2RvbmVdO1xuLyoqKioqKi8gXHRcdFx0dmFyIG9uU2NyaXB0Q29tcGxldGUgPSAocHJldiwgZXZlbnQpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0Ly8gYXZvaWQgbWVtIGxlYWtzIGluIElFLlxuLyoqKioqKi8gXHRcdFx0XHRzY3JpcHQub25lcnJvciA9IHNjcmlwdC5vbmxvYWQgPSBudWxsO1xuLyoqKioqKi8gXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG4vKioqKioqLyBcdFx0XHRcdHZhciBkb25lRm5zID0gaW5Qcm9ncmVzc1t1cmxdO1xuLyoqKioqKi8gXHRcdFx0XHRkZWxldGUgaW5Qcm9ncmVzc1t1cmxdO1xuLyoqKioqKi8gXHRcdFx0XHRzY3JpcHQucGFyZW50Tm9kZSAmJiBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuLyoqKioqKi8gXHRcdFx0XHRkb25lRm5zICYmIGRvbmVGbnMuZm9yRWFjaCgoZm4pID0+IChmbihldmVudCkpKTtcbi8qKioqKiovIFx0XHRcdFx0aWYocHJldikgcmV0dXJuIHByZXYoZXZlbnQpO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0dmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KG9uU2NyaXB0Q29tcGxldGUuYmluZChudWxsLCB1bmRlZmluZWQsIHsgdHlwZTogJ3RpbWVvdXQnLCB0YXJnZXQ6IHNjcmlwdCB9KSwgMTIwMDAwKTtcbi8qKioqKiovIFx0XHRcdHNjcmlwdC5vbmVycm9yID0gb25TY3JpcHRDb21wbGV0ZS5iaW5kKG51bGwsIHNjcmlwdC5vbmVycm9yKTtcbi8qKioqKiovIFx0XHRcdHNjcmlwdC5vbmxvYWQgPSBvblNjcmlwdENvbXBsZXRlLmJpbmQobnVsbCwgc2NyaXB0Lm9ubG9hZCk7XG4vKioqKioqLyBcdFx0XHRuZWVkQXR0YWNoICYmIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuLyoqKioqKi8gXHRcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0bW9kdWxlLnBhdGhzID0gW107XG4vKioqKioqLyBcdFx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gbW9kdWxlO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvdHJ1c3RlZCB0eXBlcyBwb2xpY3kgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHR2YXIgcG9saWN5O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18udHQgPSAoKSA9PiB7XG4vKioqKioqLyBcdFx0XHQvLyBDcmVhdGUgVHJ1c3RlZCBUeXBlIHBvbGljeSBpZiBUcnVzdGVkIFR5cGVzIGFyZSBhdmFpbGFibGUgYW5kIHRoZSBwb2xpY3kgZG9lc24ndCBleGlzdCB5ZXQuXG4vKioqKioqLyBcdFx0XHRpZiAocG9saWN5ID09PSB1bmRlZmluZWQpIHtcbi8qKioqKiovIFx0XHRcdFx0cG9saWN5ID0ge1xuLyoqKioqKi8gXHRcdFx0XHRcdGNyZWF0ZVNjcmlwdDogKHNjcmlwdCkgPT4gKHNjcmlwdCksXG4vKioqKioqLyBcdFx0XHRcdFx0Y3JlYXRlU2NyaXB0VVJMOiAodXJsKSA9PiAodXJsKVxuLyoqKioqKi8gXHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0XHRpZiAodHlwZW9mIHRydXN0ZWRUeXBlcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KSB7XG4vKioqKioqLyBcdFx0XHRcdFx0cG9saWN5ID0gdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeShcIm5leHRqcyNidW5kbGVyXCIsIHBvbGljeSk7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdHJldHVybiBwb2xpY3k7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS90cnVzdGVkIHR5cGVzIHNjcmlwdCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18udHMgPSAoc2NyaXB0KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy50dCgpLmNyZWF0ZVNjcmlwdChzY3JpcHQpKTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS90cnVzdGVkIHR5cGVzIHNjcmlwdCB1cmwgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnR1ID0gKHVybCkgPT4gKF9fd2VicGFja19yZXF1aXJlX18udHQoKS5jcmVhdGVTY3JpcHRVUkwodXJsKSk7XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvaG90IG1vZHVsZSByZXBsYWNlbWVudCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50TW9kdWxlRGF0YSA9IHt9O1xuLyoqKioqKi8gXHRcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIG1vZHVsZSBhbmQgcmVxdWlyZSBjcmVhdGlvblxuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50Q2hpbGRNb2R1bGU7XG4vKioqKioqLyBcdFx0dmFyIGN1cnJlbnRQYXJlbnRzID0gW107XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0Ly8gc3RhdHVzXG4vKioqKioqLyBcdFx0dmFyIHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycyA9IFtdO1xuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50U3RhdHVzID0gXCJpZGxlXCI7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0Ly8gd2hpbGUgZG93bmxvYWRpbmdcbi8qKioqKiovIFx0XHR2YXIgYmxvY2tpbmdQcm9taXNlcyA9IDA7XG4vKioqKioqLyBcdFx0dmFyIGJsb2NraW5nUHJvbWlzZXNXYWl0aW5nID0gW107XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0Ly8gVGhlIHVwZGF0ZSBpbmZvXG4vKioqKioqLyBcdFx0dmFyIGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzO1xuLyoqKioqKi8gXHRcdHZhciBxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXM7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJEID0gY3VycmVudE1vZHVsZURhdGE7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pLnB1c2goZnVuY3Rpb24gKG9wdGlvbnMpIHtcbi8qKioqKiovIFx0XHRcdHZhciBtb2R1bGUgPSBvcHRpb25zLm1vZHVsZTtcbi8qKioqKiovIFx0XHRcdHZhciByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShvcHRpb25zLnJlcXVpcmUsIG9wdGlvbnMuaWQpO1xuLyoqKioqKi8gXHRcdFx0bW9kdWxlLmhvdCA9IGNyZWF0ZU1vZHVsZUhvdE9iamVjdChvcHRpb25zLmlkLCBtb2R1bGUpO1xuLyoqKioqKi8gXHRcdFx0bW9kdWxlLnBhcmVudHMgPSBjdXJyZW50UGFyZW50cztcbi8qKioqKiovIFx0XHRcdG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuLyoqKioqKi8gXHRcdFx0Y3VycmVudFBhcmVudHMgPSBbXTtcbi8qKioqKiovIFx0XHRcdG9wdGlvbnMucmVxdWlyZSA9IHJlcXVpcmU7XG4vKioqKioqLyBcdFx0fSk7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJDID0ge307XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJJID0ge307XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0ZnVuY3Rpb24gY3JlYXRlUmVxdWlyZShyZXF1aXJlLCBtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdFx0dmFyIG1lID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XHRpZiAoIW1lKSByZXR1cm4gcmVxdWlyZTtcbi8qKioqKiovIFx0XHRcdHZhciBmbiA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4vKioqKioqLyBcdFx0XHRcdGlmIChtZS5ob3QuYWN0aXZlKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0pIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciBwYXJlbnRzID0gaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XS5wYXJlbnRzO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYgKHBhcmVudHMuaW5kZXhPZihtb2R1bGVJZCkgPT09IC0xKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdHBhcmVudHMucHVzaChtb2R1bGVJZCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0fSBlbHNlIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRQYXJlbnRzID0gW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRDaGlsZE1vZHVsZSA9IHJlcXVlc3Q7XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdGlmIChtZS5jaGlsZHJlbi5pbmRleE9mKHJlcXVlc3QpID09PSAtMSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0bWUuY2hpbGRyZW4ucHVzaChyZXF1ZXN0KTtcbi8qKioqKiovIFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdH0gZWxzZSB7XG4vKioqKioqLyBcdFx0XHRcdFx0Y29uc29sZS53YXJuKFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgK1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRyZXF1ZXN0ICtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XCIpIGZyb20gZGlzcG9zZWQgbW9kdWxlIFwiICtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWRcbi8qKioqKiovIFx0XHRcdFx0XHQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdGN1cnJlbnRQYXJlbnRzID0gW107XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIHJlcXVpcmUocmVxdWVzdCk7XG4vKioqKioqLyBcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0dmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4vKioqKioqLyBcdFx0XHRcdHJldHVybiB7XG4vKioqKioqLyBcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRyZXR1cm4gcmVxdWlyZVtuYW1lXTtcbi8qKioqKiovIFx0XHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRyZXF1aXJlW25hbWVdID0gdmFsdWU7XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0fTtcbi8qKioqKiovIFx0XHRcdGZvciAodmFyIG5hbWUgaW4gcmVxdWlyZSkge1xuLyoqKioqKi8gXHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcXVpcmUsIG5hbWUpICYmIG5hbWUgIT09IFwiZVwiKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBuYW1lLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IobmFtZSkpO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRmbi5lID0gZnVuY3Rpb24gKGNodW5rSWQsIGZldGNoUHJpb3JpdHkpIHtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIHRyYWNrQmxvY2tpbmdQcm9taXNlKHJlcXVpcmUuZShjaHVua0lkLCBmZXRjaFByaW9yaXR5KSk7XG4vKioqKioqLyBcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGZuO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRmdW5jdGlvbiBjcmVhdGVNb2R1bGVIb3RPYmplY3QobW9kdWxlSWQsIG1lKSB7XG4vKioqKioqLyBcdFx0XHR2YXIgX21haW4gPSBjdXJyZW50Q2hpbGRNb2R1bGUgIT09IG1vZHVsZUlkO1xuLyoqKioqKi8gXHRcdFx0dmFyIGhvdCA9IHtcbi8qKioqKiovIFx0XHRcdFx0Ly8gcHJpdmF0ZSBzdHVmZlxuLyoqKioqKi8gXHRcdFx0XHRfYWNjZXB0ZWREZXBlbmRlbmNpZXM6IHt9LFxuLyoqKioqKi8gXHRcdFx0XHRfYWNjZXB0ZWRFcnJvckhhbmRsZXJzOiB7fSxcbi8qKioqKiovIFx0XHRcdFx0X2RlY2xpbmVkRGVwZW5kZW5jaWVzOiB7fSxcbi8qKioqKiovIFx0XHRcdFx0X3NlbGZBY2NlcHRlZDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdF9zZWxmRGVjbGluZWQ6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRfc2VsZkludmFsaWRhdGVkOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0X2Rpc3Bvc2VIYW5kbGVyczogW10sXG4vKioqKioqLyBcdFx0XHRcdF9tYWluOiBfbWFpbixcbi8qKioqKiovIFx0XHRcdFx0X3JlcXVpcmVTZWxmOiBmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0Y3VycmVudFBhcmVudHMgPSBtZS5wYXJlbnRzLnNsaWNlKCk7XG4vKioqKioqLyBcdFx0XHRcdFx0Y3VycmVudENoaWxkTW9kdWxlID0gX21haW4gPyB1bmRlZmluZWQgOiBtb2R1bGVJZDtcbi8qKioqKiovIFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKTtcbi8qKioqKiovIFx0XHRcdFx0fSxcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0Ly8gTW9kdWxlIEFQSVxuLyoqKioqKi8gXHRcdFx0XHRhY3RpdmU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGFjY2VwdDogZnVuY3Rpb24gKGRlcCwgY2FsbGJhY2ssIGVycm9ySGFuZGxlcikge1xuLyoqKioqKi8gXHRcdFx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmQWNjZXB0ZWQgPSB0cnVlO1xuLyoqKioqKi8gXHRcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwiZnVuY3Rpb25cIikgaG90Ll9zZWxmQWNjZXB0ZWQgPSBkZXA7XG4vKioqKioqLyBcdFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIiAmJiBkZXAgIT09IG51bGwpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRXJyb3JIYW5kbGVyc1tkZXBbaV1dID0gZXJyb3JIYW5kbGVyO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdH0gZWxzZSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWRFcnJvckhhbmRsZXJzW2RlcF0gPSBlcnJvckhhbmRsZXI7XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRkZWNsaW5lOiBmdW5jdGlvbiAoZGVwKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKGRlcCA9PT0gdW5kZWZpbmVkKSBob3QuX3NlbGZEZWNsaW5lZCA9IHRydWU7XG4vKioqKioqLyBcdFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIiAmJiBkZXAgIT09IG51bGwpXG4vKioqKioqLyBcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKylcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBbaV1dID0gdHJ1ZTtcbi8qKioqKiovIFx0XHRcdFx0XHRlbHNlIGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwXSA9IHRydWU7XG4vKioqKioqLyBcdFx0XHRcdH0sXG4vKioqKioqLyBcdFx0XHRcdGRpc3Bvc2U6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuLyoqKioqKi8gXHRcdFx0XHRcdGhvdC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goY2FsbGJhY2spO1xuLyoqKioqKi8gXHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRhZGREaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG4vKioqKioqLyBcdFx0XHRcdH0sXG4vKioqKioqLyBcdFx0XHRcdHJlbW92ZURpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgaWR4ID0gaG90Ll9kaXNwb3NlSGFuZGxlcnMuaW5kZXhPZihjYWxsYmFjayk7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBob3QuX2Rpc3Bvc2VIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbi8qKioqKiovIFx0XHRcdFx0fSxcbi8qKioqKiovIFx0XHRcdFx0aW52YWxpZGF0ZTogZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHRoaXMuX3NlbGZJbnZhbGlkYXRlZCA9IHRydWU7XG4vKioqKioqLyBcdFx0XHRcdFx0c3dpdGNoIChjdXJyZW50U3RhdHVzKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwiaWRsZVwiOlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyA9IFtdO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1ySVtrZXldKFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVyc1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRzZXRTdGF0dXMoXCJyZWFkeVwiKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwicmVhZHlcIjpcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5obXJJKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmhtcklba2V5XShcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnNcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwicHJlcGFyZVwiOlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2FzZSBcImNoZWNrXCI6XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwiZGlzcG9zZVwiOlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2FzZSBcImFwcGx5XCI6XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdChxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMgPSBxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMgfHwgW10pLnB1c2goXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWRcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRkZWZhdWx0OlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHQvLyBpZ25vcmUgcmVxdWVzdHMgaW4gZXJyb3Igc3RhdGVzXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGJyZWFrO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0fSxcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0Ly8gTWFuYWdlbWVudCBBUElcbi8qKioqKiovIFx0XHRcdFx0Y2hlY2s6IGhvdENoZWNrLFxuLyoqKioqKi8gXHRcdFx0XHRhcHBseTogaG90QXBwbHksXG4vKioqKioqLyBcdFx0XHRcdHN0YXR1czogZnVuY3Rpb24gKGwpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoIWwpIHJldHVybiBjdXJyZW50U3RhdHVzO1xuLyoqKioqKi8gXHRcdFx0XHRcdHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuLyoqKioqKi8gXHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRhZGRTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbiAobCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuLyoqKioqKi8gXHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRyZW1vdmVTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbiAobCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBpZHggPSByZWdpc3RlcmVkU3RhdHVzSGFuZGxlcnMuaW5kZXhPZihsKTtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbi8qKioqKiovIFx0XHRcdFx0fSxcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0Ly8gaW5oZXJpdCBmcm9tIHByZXZpb3VzIGRpc3Bvc2UgY2FsbFxuLyoqKioqKi8gXHRcdFx0XHRkYXRhOiBjdXJyZW50TW9kdWxlRGF0YVttb2R1bGVJZF1cbi8qKioqKiovIFx0XHRcdH07XG4vKioqKioqLyBcdFx0XHRjdXJyZW50Q2hpbGRNb2R1bGUgPSB1bmRlZmluZWQ7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaG90O1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRmdW5jdGlvbiBzZXRTdGF0dXMobmV3U3RhdHVzKSB7XG4vKioqKioqLyBcdFx0XHRjdXJyZW50U3RhdHVzID0gbmV3U3RhdHVzO1xuLyoqKioqKi8gXHRcdFx0dmFyIHJlc3VsdHMgPSBbXTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzLmxlbmd0aDsgaSsrKVxuLyoqKioqKi8gXHRcdFx0XHRyZXN1bHRzW2ldID0gcmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzW2ldLmNhbGwobnVsbCwgbmV3U3RhdHVzKTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRzKS50aGVuKGZ1bmN0aW9uICgpIHt9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0ZnVuY3Rpb24gdW5ibG9jaygpIHtcbi8qKioqKiovIFx0XHRcdGlmICgtLWJsb2NraW5nUHJvbWlzZXMgPT09IDApIHtcbi8qKioqKiovIFx0XHRcdFx0c2V0U3RhdHVzKFwicmVhZHlcIikudGhlbihmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKGJsb2NraW5nUHJvbWlzZXMgPT09IDApIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciBsaXN0ID0gYmxvY2tpbmdQcm9taXNlc1dhaXRpbmc7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRibG9ja2luZ1Byb21pc2VzV2FpdGluZyA9IFtdO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGxpc3RbaV0oKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRmdW5jdGlvbiB0cmFja0Jsb2NraW5nUHJvbWlzZShwcm9taXNlKSB7XG4vKioqKioqLyBcdFx0XHRzd2l0Y2ggKGN1cnJlbnRTdGF0dXMpIHtcbi8qKioqKiovIFx0XHRcdFx0Y2FzZSBcInJlYWR5XCI6XG4vKioqKioqLyBcdFx0XHRcdFx0c2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbi8qKioqKiovIFx0XHRcdFx0LyogZmFsbHRocm91Z2ggKi9cbi8qKioqKiovIFx0XHRcdFx0Y2FzZSBcInByZXBhcmVcIjpcbi8qKioqKiovIFx0XHRcdFx0XHRibG9ja2luZ1Byb21pc2VzKys7XG4vKioqKioqLyBcdFx0XHRcdFx0cHJvbWlzZS50aGVuKHVuYmxvY2ssIHVuYmxvY2spO1xuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBwcm9taXNlO1xuLyoqKioqKi8gXHRcdFx0XHRkZWZhdWx0OlxuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBwcm9taXNlO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRmdW5jdGlvbiB3YWl0Rm9yQmxvY2tpbmdQcm9taXNlcyhmbikge1xuLyoqKioqKi8gXHRcdFx0aWYgKGJsb2NraW5nUHJvbWlzZXMgPT09IDApIHJldHVybiBmbigpO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4vKioqKioqLyBcdFx0XHRcdGJsb2NraW5nUHJvbWlzZXNXYWl0aW5nLnB1c2goZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJlc29sdmUoZm4oKSk7XG4vKioqKioqLyBcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdGZ1bmN0aW9uIGhvdENoZWNrKGFwcGx5T25VcGRhdGUpIHtcbi8qKioqKiovIFx0XHRcdGlmIChjdXJyZW50U3RhdHVzICE9PSBcImlkbGVcIikge1xuLyoqKioqKi8gXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjaGVjaygpIGlzIG9ubHkgYWxsb3dlZCBpbiBpZGxlIHN0YXR1c1wiKTtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdHJldHVybiBzZXRTdGF0dXMoXCJjaGVja1wiKVxuLyoqKioqKi8gXHRcdFx0XHQudGhlbihfX3dlYnBhY2tfcmVxdWlyZV9fLmhtck0pXG4vKioqKioqLyBcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICh1cGRhdGUpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoIXVwZGF0ZSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmV0dXJuIHNldFN0YXR1cyhhcHBseUludmFsaWRhdGVkTW9kdWxlcygpID8gXCJyZWFkeVwiIDogXCJpZGxlXCIpLnRoZW4oXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uICgpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdFx0cmV0dXJuIHNldFN0YXR1cyhcInByZXBhcmVcIikudGhlbihmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR2YXIgdXBkYXRlZE1vZHVsZXMgPSBbXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzID0gW107XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uaG1yQykucmVkdWNlKGZ1bmN0aW9uIChcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRwcm9taXNlcyxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRrZXlcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0KSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJDW2tleV0oXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUuYyxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZS5yLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlLm0sXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRwcm9taXNlcyxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlZE1vZHVsZXNcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9taXNlcztcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0fSwgW10pXG4vKioqKioqLyBcdFx0XHRcdFx0XHQpLnRoZW4oZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRyZXR1cm4gd2FpdEZvckJsb2NraW5nUHJvbWlzZXMoZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdGlmIChhcHBseU9uVXBkYXRlKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW50ZXJuYWxBcHBseShhcHBseU9uVXBkYXRlKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNldFN0YXR1cyhcInJlYWR5XCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHVwZGF0ZWRNb2R1bGVzO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0ZnVuY3Rpb24gaG90QXBwbHkob3B0aW9ucykge1xuLyoqKioqKi8gXHRcdFx0aWYgKGN1cnJlbnRTdGF0dXMgIT09IFwicmVhZHlcIikge1xuLyoqKioqKi8gXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XCJhcHBseSgpIGlzIG9ubHkgYWxsb3dlZCBpbiByZWFkeSBzdGF0dXMgKHN0YXRlOiBcIiArXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGN1cnJlbnRTdGF0dXMgK1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcIilcIlxuLyoqKioqKi8gXHRcdFx0XHRcdCk7XG4vKioqKioqLyBcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGludGVybmFsQXBwbHkob3B0aW9ucyk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdGZ1bmN0aW9uIGludGVybmFsQXBwbHkob3B0aW9ucykge1xuLyoqKioqKi8gXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRhcHBseUludmFsaWRhdGVkTW9kdWxlcygpO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0dmFyIHJlc3VsdHMgPSBjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycy5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIGhhbmRsZXIob3B0aW9ucyk7XG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzID0gdW5kZWZpbmVkO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0dmFyIGVycm9ycyA9IHJlc3VsdHNcbi8qKioqKiovIFx0XHRcdFx0Lm1hcChmdW5jdGlvbiAocikge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiByLmVycm9yO1xuLyoqKioqKi8gXHRcdFx0XHR9KVxuLyoqKioqKi8gXHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0aWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4vKioqKioqLyBcdFx0XHRcdHJldHVybiBzZXRTdGF0dXMoXCJhYm9ydFwiKS50aGVuKGZ1bmN0aW9uICgpIHtcbi8qKioqKiovIFx0XHRcdFx0XHR0aHJvdyBlcnJvcnNbMF07XG4vKioqKioqLyBcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0Ly8gTm93IGluIFwiZGlzcG9zZVwiIHBoYXNlXG4vKioqKioqLyBcdFx0XHR2YXIgZGlzcG9zZVByb21pc2UgPSBzZXRTdGF0dXMoXCJkaXNwb3NlXCIpO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0cmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXN1bHQpIHtcbi8qKioqKiovIFx0XHRcdFx0aWYgKHJlc3VsdC5kaXNwb3NlKSByZXN1bHQuZGlzcG9zZSgpO1xuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHQvLyBOb3cgaW4gXCJhcHBseVwiIHBoYXNlXG4vKioqKioqLyBcdFx0XHR2YXIgYXBwbHlQcm9taXNlID0gc2V0U3RhdHVzKFwiYXBwbHlcIik7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHR2YXIgZXJyb3I7XG4vKioqKioqLyBcdFx0XHR2YXIgcmVwb3J0RXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuLyoqKioqKi8gXHRcdFx0fTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcbi8qKioqKiovIFx0XHRcdHJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAocmVzdWx0KSB7XG4vKioqKioqLyBcdFx0XHRcdGlmIChyZXN1bHQuYXBwbHkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgbW9kdWxlcyA9IHJlc3VsdC5hcHBseShyZXBvcnRFcnJvcik7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKG1vZHVsZXMpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaChtb2R1bGVzW2ldKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtkaXNwb3NlUHJvbWlzZSwgYXBwbHlQcm9taXNlXSkudGhlbihmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdC8vIGhhbmRsZSBlcnJvcnMgaW4gYWNjZXB0IGhhbmRsZXJzIGFuZCBzZWxmIGFjY2VwdGVkIG1vZHVsZSBsb2FkXG4vKioqKioqLyBcdFx0XHRcdGlmIChlcnJvcikge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBzZXRTdGF0dXMoXCJmYWlsXCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG4vKioqKioqLyBcdFx0XHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0aWYgKHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcykge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBpbnRlcm5hbEFwcGx5KG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKGxpc3QpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpZiAobGlzdC5pbmRleE9mKG1vZHVsZUlkKSA8IDApIGxpc3QucHVzaChtb2R1bGVJZCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHJldHVybiBsaXN0O1xuLyoqKioqKi8gXHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdHJldHVybiBzZXRTdGF0dXMoXCJpZGxlXCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBvdXRkYXRlZE1vZHVsZXM7XG4vKioqKioqLyBcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdGZ1bmN0aW9uIGFwcGx5SW52YWxpZGF0ZWRNb2R1bGVzKCkge1xuLyoqKioqKi8gXHRcdFx0aWYgKHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcykge1xuLyoqKioqKi8gXHRcdFx0XHRpZiAoIWN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzKSBjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyA9IFtdO1xuLyoqKioqKi8gXHRcdFx0XHRPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJJW2tleV0oXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVyc1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XHRcdHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcyA9IHVuZGVmaW5lZDtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIHRydWU7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGggKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9fbmV4dC9cIjtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9yZWFjdCByZWZyZXNoICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18uaSkge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uaS5wdXNoKChvcHRpb25zKSA9PiB7XG4vKioqKioqLyBcdFx0XHRjb25zdCBvcmlnaW5hbEZhY3RvcnkgPSBvcHRpb25zLmZhY3Rvcnk7XG4vKioqKioqLyBcdFx0XHRvcHRpb25zLmZhY3RvcnkgPSAobW9kdWxlT2JqZWN0LCBtb2R1bGVFeHBvcnRzLCB3ZWJwYWNrUmVxdWlyZSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0XHRjb25zdCBoYXNSZWZyZXNoID0gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgISFzZWxmLiRSZWZyZXNoSW50ZXJjZXB0TW9kdWxlRXhlY3V0aW9uJDtcbi8qKioqKiovIFx0XHRcdFx0Y29uc3QgY2xlYW51cCA9IGhhc1JlZnJlc2ggPyBzZWxmLiRSZWZyZXNoSW50ZXJjZXB0TW9kdWxlRXhlY3V0aW9uJChtb2R1bGVPYmplY3QuaWQpIDogKCkgPT4ge307XG4vKioqKioqLyBcdFx0XHRcdHRyeSB7XG4vKioqKioqLyBcdFx0XHRcdFx0b3JpZ2luYWxGYWN0b3J5LmNhbGwodGhpcywgbW9kdWxlT2JqZWN0LCBtb2R1bGVFeHBvcnRzLCB3ZWJwYWNrUmVxdWlyZSk7XG4vKioqKioqLyBcdFx0XHRcdH0gZmluYWxseSB7XG4vKioqKioqLyBcdFx0XHRcdFx0Y2xlYW51cCgpO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fSlcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvY29tcGF0ICovXG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gbm9vcCBmbnMgdG8gcHJldmVudCBydW50aW1lIGVycm9ycyBkdXJpbmcgaW5pdGlhbGl6YXRpb25cbi8qKioqKiovIFx0aWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKSB7XG4vKioqKioqLyBcdFx0c2VsZi4kUmVmcmVzaFJlZyQgPSBmdW5jdGlvbiAoKSB7fTtcbi8qKioqKiovIFx0XHRzZWxmLiRSZWZyZXNoU2lnJCA9IGZ1bmN0aW9uICgpIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBmdW5jdGlvbiAodHlwZSkge1xuLyoqKioqKi8gXHRcdFx0XHRyZXR1cm4gdHlwZTtcbi8qKioqKiovIFx0XHRcdH07XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2NzcyBsb2FkaW5nICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0dmFyIGNyZWF0ZVN0eWxlc2hlZXQgPSAoY2h1bmtJZCwgZnVsbGhyZWYsIHJlc29sdmUsIHJlamVjdCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0dmFyIGxpbmtUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdGxpbmtUYWcucmVsID0gXCJzdHlsZXNoZWV0XCI7XG4vKioqKioqLyBcdFx0XHRsaW5rVGFnLnR5cGUgPSBcInRleHQvY3NzXCI7XG4vKioqKioqLyBcdFx0XHR2YXIgb25MaW5rQ29tcGxldGUgPSAoZXZlbnQpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0Ly8gYXZvaWQgbWVtIGxlYWtzLlxuLyoqKioqKi8gXHRcdFx0XHRsaW5rVGFnLm9uZXJyb3IgPSBsaW5rVGFnLm9ubG9hZCA9IG51bGw7XG4vKioqKioqLyBcdFx0XHRcdGlmIChldmVudC50eXBlID09PSAnbG9hZCcpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRyZXNvbHZlKCk7XG4vKioqKioqLyBcdFx0XHRcdH0gZWxzZSB7XG4vKioqKioqLyBcdFx0XHRcdFx0dmFyIGVycm9yVHlwZSA9IGV2ZW50ICYmIChldmVudC50eXBlID09PSAnbG9hZCcgPyAnbWlzc2luZycgOiBldmVudC50eXBlKTtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgcmVhbEhyZWYgPSBldmVudCAmJiBldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmhyZWYgfHwgZnVsbGhyZWY7XG4vKioqKioqLyBcdFx0XHRcdFx0dmFyIGVyciA9IG5ldyBFcnJvcihcIkxvYWRpbmcgQ1NTIGNodW5rIFwiICsgY2h1bmtJZCArIFwiIGZhaWxlZC5cXG4oXCIgKyByZWFsSHJlZiArIFwiKVwiKTtcbi8qKioqKiovIFx0XHRcdFx0XHRlcnIuY29kZSA9IFwiQ1NTX0NIVU5LX0xPQURfRkFJTEVEXCI7XG4vKioqKioqLyBcdFx0XHRcdFx0ZXJyLnR5cGUgPSBlcnJvclR5cGU7XG4vKioqKioqLyBcdFx0XHRcdFx0ZXJyLnJlcXVlc3QgPSByZWFsSHJlZjtcbi8qKioqKiovIFx0XHRcdFx0XHRsaW5rVGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGlua1RhZylcbi8qKioqKiovIFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0bGlua1RhZy5vbmVycm9yID0gbGlua1RhZy5vbmxvYWQgPSBvbkxpbmtDb21wbGV0ZTtcbi8qKioqKiovIFx0XHRcdGxpbmtUYWcuaHJlZiA9IGZ1bGxocmVmO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0KGZ1bmN0aW9uKGxpbmtUYWcpIHtcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF9OX0VfU1RZTEVfTE9BRCA9PT0gJ2Z1bmN0aW9uJykge1xuLyoqKioqKi8gXHRcdFx0ICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGhyZWYsIG9ubG9hZCwgb25lcnJvciB9ID0gbGlua1RhZztcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgX05fRV9TVFlMRV9MT0FEKGhyZWYuaW5kZXhPZih3aW5kb3cubG9jYXRpb24ub3JpZ2luKSA9PT0gMCA/IG5ldyBVUkwoaHJlZikucGF0aG5hbWUgOiBocmVmKS50aGVuKCgpPT5vbmxvYWQgPT0gbnVsbCA/IHZvaWQgMCA6IG9ubG9hZC5jYWxsKGxpbmtUYWcsIHtcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbG9hZCdcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAoKT0+b25lcnJvciA9PSBudWxsID8gdm9pZCAwIDogb25lcnJvci5jYWxsKGxpbmtUYWcsIHt9KSk7XG4vKioqKioqLyBcdFx0XHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rVGFnKTtcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICB9XG4vKioqKioqLyBcdFx0XHQgICAgICAgICAgICB9KShsaW5rVGFnKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGxpbmtUYWc7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XHR2YXIgZmluZFN0eWxlc2hlZXQgPSAoaHJlZiwgZnVsbGhyZWYpID0+IHtcbi8qKioqKiovIFx0XHRcdHZhciBleGlzdGluZ0xpbmtUYWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJsaW5rXCIpO1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGV4aXN0aW5nTGlua1RhZ3MubGVuZ3RoOyBpKyspIHtcbi8qKioqKiovIFx0XHRcdFx0dmFyIHRhZyA9IGV4aXN0aW5nTGlua1RhZ3NbaV07XG4vKioqKioqLyBcdFx0XHRcdHZhciBkYXRhSHJlZiA9IHRhZy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhyZWZcIikgfHwgdGFnLmdldEF0dHJpYnV0ZShcImhyZWZcIik7XG4vKioqKioqLyBcdFx0XHRcdGlmKHRhZy5yZWwgPT09IFwic3R5bGVzaGVldFwiICYmIChkYXRhSHJlZiA9PT0gaHJlZiB8fCBkYXRhSHJlZiA9PT0gZnVsbGhyZWYpKSByZXR1cm4gdGFnO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0dmFyIGV4aXN0aW5nU3R5bGVUYWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzdHlsZVwiKTtcbi8qKioqKiovIFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBleGlzdGluZ1N0eWxlVGFncy5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgdGFnID0gZXhpc3RpbmdTdHlsZVRhZ3NbaV07XG4vKioqKioqLyBcdFx0XHRcdHZhciBkYXRhSHJlZiA9IHRhZy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhyZWZcIik7XG4vKioqKioqLyBcdFx0XHRcdGlmKGRhdGFIcmVmID09PSBocmVmIHx8IGRhdGFIcmVmID09PSBmdWxsaHJlZikgcmV0dXJuIHRhZztcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdHZhciBsb2FkU3R5bGVzaGVldCA9IChjaHVua0lkKSA9PiB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgaHJlZiA9IF9fd2VicGFja19yZXF1aXJlX18ubWluaUNzc0YoY2h1bmtJZCk7XG4vKioqKioqLyBcdFx0XHRcdHZhciBmdWxsaHJlZiA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIGhyZWY7XG4vKioqKioqLyBcdFx0XHRcdGlmKGZpbmRTdHlsZXNoZWV0KGhyZWYsIGZ1bGxocmVmKSkgcmV0dXJuIHJlc29sdmUoKTtcbi8qKioqKiovIFx0XHRcdFx0Y3JlYXRlU3R5bGVzaGVldChjaHVua0lkLCBmdWxsaHJlZiwgcmVzb2x2ZSwgcmVqZWN0KTtcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBubyBjaHVuayBsb2FkaW5nXG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0dmFyIG9sZFRhZ3MgPSBbXTtcbi8qKioqKiovIFx0XHR2YXIgbmV3VGFncyA9IFtdO1xuLyoqKioqKi8gXHRcdHZhciBhcHBseUhhbmRsZXIgPSAob3B0aW9ucykgPT4ge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIHsgZGlzcG9zZTogKCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgb2xkVGFncy5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBvbGRUYWcgPSBvbGRUYWdzW2ldO1xuLyoqKioqKi8gXHRcdFx0XHRcdGlmKG9sZFRhZy5wYXJlbnROb2RlKSBvbGRUYWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRUYWcpO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdG9sZFRhZ3MubGVuZ3RoID0gMDtcbi8qKioqKiovIFx0XHRcdH0sIGFwcGx5OiAoKSA9PiB7XG4vKioqKioqLyBcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBuZXdUYWdzLmxlbmd0aDsgaSsrKSBuZXdUYWdzW2ldLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuLyoqKioqKi8gXHRcdFx0XHRuZXdUYWdzLmxlbmd0aCA9IDA7XG4vKioqKioqLyBcdFx0XHR9IH07XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1yQy5taW5pQ3NzID0gKGNodW5rSWRzLCByZW1vdmVkQ2h1bmtzLCByZW1vdmVkTW9kdWxlcywgcHJvbWlzZXMsIGFwcGx5SGFuZGxlcnMsIHVwZGF0ZWRNb2R1bGVzTGlzdCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0YXBwbHlIYW5kbGVycy5wdXNoKGFwcGx5SGFuZGxlcik7XG4vKioqKioqLyBcdFx0XHRjaHVua0lkcy5mb3JFYWNoKChjaHVua0lkKSA9PiB7XG4vKioqKioqLyBcdFx0XHRcdHZhciBocmVmID0gX193ZWJwYWNrX3JlcXVpcmVfXy5taW5pQ3NzRihjaHVua0lkKTtcbi8qKioqKiovIFx0XHRcdFx0dmFyIGZ1bGxocmVmID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgaHJlZjtcbi8qKioqKiovIFx0XHRcdFx0dmFyIG9sZFRhZyA9IGZpbmRTdHlsZXNoZWV0KGhyZWYsIGZ1bGxocmVmKTtcbi8qKioqKiovIFx0XHRcdFx0aWYoIW9sZFRhZykgcmV0dXJuO1xuLyoqKioqKi8gXHRcdFx0XHRwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgdGFnID0gY3JlYXRlU3R5bGVzaGVldChjaHVua0lkLCBmdWxsaHJlZiwgKCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0dGFnLmFzID0gXCJzdHlsZVwiO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0dGFnLnJlbCA9IFwicHJlbG9hZFwiO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuLyoqKioqKi8gXHRcdFx0XHRcdH0sIHJlamVjdCk7XG4vKioqKioqLyBcdFx0XHRcdFx0b2xkVGFncy5wdXNoKG9sZFRhZyk7XG4vKioqKioqLyBcdFx0XHRcdFx0bmV3VGFncy5wdXNoKHRhZyk7XG4vKioqKioqLyBcdFx0XHRcdH0pKTtcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9qc29ucCBjaHVuayBsb2FkaW5nICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gbm8gYmFzZVVSSVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vKioqKioqLyBcdFx0Ly8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vKioqKioqLyBcdFx0Ly8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG4vKioqKioqLyBcdFx0dmFyIGluc3RhbGxlZENodW5rcyA9IF9fd2VicGFja19yZXF1aXJlX18uaG1yU19qc29ucCA9IF9fd2VicGFja19yZXF1aXJlX18uaG1yU19qc29ucCB8fCB7XG4vKioqKioqLyBcdFx0XHRcIndlYnBhY2tcIjogMFxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mLmogPSAoY2h1bmtJZCwgcHJvbWlzZXMpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0Ly8gSlNPTlAgY2h1bmsgbG9hZGluZyBmb3IgamF2YXNjcmlwdFxuLyoqKioqKi8gXHRcdFx0XHR2YXIgaW5zdGFsbGVkQ2h1bmtEYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXy5vKGluc3RhbGxlZENodW5rcywgY2h1bmtJZCkgPyBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gOiB1bmRlZmluZWQ7XG4vKioqKioqLyBcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rRGF0YSAhPT0gMCkgeyAvLyAwIG1lYW5zIFwiYWxyZWFkeSBpbnN0YWxsZWRcIi5cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHQvLyBhIFByb21pc2UgbWVhbnMgXCJjdXJyZW50bHkgbG9hZGluZ1wiLlxuLyoqKioqKi8gXHRcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rRGF0YSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cHJvbWlzZXMucHVzaChpbnN0YWxsZWRDaHVua0RhdGFbMl0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdH0gZWxzZSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRpZihcIndlYnBhY2tcIiAhPSBjaHVua0lkKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdC8vIHNldHVwIFByb21pc2UgaW4gY2h1bmsgY2FjaGVcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiAoaW5zdGFsbGVkQ2h1bmtEYXRhID0gaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gW3Jlc29sdmUsIHJlamVjdF0pKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0cHJvbWlzZXMucHVzaChpbnN0YWxsZWRDaHVua0RhdGFbMl0gPSBwcm9taXNlKTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0Ly8gc3RhcnQgY2h1bmsgbG9hZGluZ1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR2YXIgdXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy51KGNodW5rSWQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHQvLyBjcmVhdGUgZXJyb3IgYmVmb3JlIHN0YWNrIHVud291bmQgdG8gZ2V0IHVzZWZ1bCBzdGFja3RyYWNlIGxhdGVyXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdHZhciBlcnJvciA9IG5ldyBFcnJvcigpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR2YXIgbG9hZGluZ0VuZGVkID0gKGV2ZW50KSA9PiB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGluc3RhbGxlZENodW5rcywgY2h1bmtJZCkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGluc3RhbGxlZENodW5rRGF0YSA9IGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rRGF0YSAhPT0gMCkgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gdW5kZWZpbmVkO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW5zdGFsbGVkQ2h1bmtEYXRhKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvclR5cGUgPSBldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2xvYWQnID8gJ21pc3NpbmcnIDogZXZlbnQudHlwZSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZWFsU3JjID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5zcmM7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yLm1lc3NhZ2UgPSAnTG9hZGluZyBjaHVuayAnICsgY2h1bmtJZCArICcgZmFpbGVkLlxcbignICsgZXJyb3JUeXBlICsgJzogJyArIHJlYWxTcmMgKyAnKSc7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yLm5hbWUgPSAnQ2h1bmtMb2FkRXJyb3InO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvci50eXBlID0gZXJyb3JUeXBlO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvci5yZXF1ZXN0ID0gcmVhbFNyYztcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5zdGFsbGVkQ2h1bmtEYXRhWzFdKGVycm9yKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdH07XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubCh1cmwsIGxvYWRpbmdFbmRlZCwgXCJjaHVuay1cIiArIGNodW5rSWQsIGNodW5rSWQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0fSBlbHNlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IDA7XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHQvLyBubyBwcmVmZXRjaGluZ1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIG5vIHByZWxvYWRlZFxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50VXBkYXRlZE1vZHVsZXNMaXN0O1xuLyoqKioqKi8gXHRcdHZhciB3YWl0aW5nVXBkYXRlUmVzb2x2ZXMgPSB7fTtcbi8qKioqKiovIFx0XHRmdW5jdGlvbiBsb2FkVXBkYXRlQ2h1bmsoY2h1bmtJZCwgdXBkYXRlZE1vZHVsZXNMaXN0KSB7XG4vKioqKioqLyBcdFx0XHRjdXJyZW50VXBkYXRlZE1vZHVsZXNMaXN0ID0gdXBkYXRlZE1vZHVsZXNMaXN0O1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0d2FpdGluZ1VwZGF0ZVJlc29sdmVzW2NodW5rSWRdID0gcmVzb2x2ZTtcbi8qKioqKiovIFx0XHRcdFx0Ly8gc3RhcnQgdXBkYXRlIGNodW5rIGxvYWRpbmdcbi8qKioqKiovIFx0XHRcdFx0dmFyIHVybCA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIF9fd2VicGFja19yZXF1aXJlX18uaHUoY2h1bmtJZCk7XG4vKioqKioqLyBcdFx0XHRcdC8vIGNyZWF0ZSBlcnJvciBiZWZvcmUgc3RhY2sgdW53b3VuZCB0byBnZXQgdXNlZnVsIHN0YWNrdHJhY2UgbGF0ZXJcbi8qKioqKiovIFx0XHRcdFx0dmFyIGVycm9yID0gbmV3IEVycm9yKCk7XG4vKioqKioqLyBcdFx0XHRcdHZhciBsb2FkaW5nRW5kZWQgPSAoZXZlbnQpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0XHRpZih3YWl0aW5nVXBkYXRlUmVzb2x2ZXNbY2h1bmtJZF0pIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSA9IHVuZGVmaW5lZFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0dmFyIGVycm9yVHlwZSA9IGV2ZW50ICYmIChldmVudC50eXBlID09PSAnbG9hZCcgPyAnbWlzc2luZycgOiBldmVudC50eXBlKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciByZWFsU3JjID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5zcmM7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRlcnJvci5tZXNzYWdlID0gJ0xvYWRpbmcgaG90IHVwZGF0ZSBjaHVuayAnICsgY2h1bmtJZCArICcgZmFpbGVkLlxcbignICsgZXJyb3JUeXBlICsgJzogJyArIHJlYWxTcmMgKyAnKSc7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRlcnJvci5uYW1lID0gJ0NodW5rTG9hZEVycm9yJztcbi8qKioqKiovIFx0XHRcdFx0XHRcdGVycm9yLnR5cGUgPSBlcnJvclR5cGU7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRlcnJvci5yZXF1ZXN0ID0gcmVhbFNyYztcbi8qKioqKiovIFx0XHRcdFx0XHRcdHJlamVjdChlcnJvcik7XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmwodXJsLCBsb2FkaW5nRW5kZWQpO1xuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdHNlbGZbXCJ3ZWJwYWNrSG90VXBkYXRlX05fRVwiXSA9IChjaHVua0lkLCBtb3JlTW9kdWxlcywgcnVudGltZSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVbbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHRcdGlmKGN1cnJlbnRVcGRhdGVkTW9kdWxlc0xpc3QpIGN1cnJlbnRVcGRhdGVkTW9kdWxlc0xpc3QucHVzaChtb2R1bGVJZCk7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdGlmKHJ1bnRpbWUpIGN1cnJlbnRVcGRhdGVSdW50aW1lLnB1c2gocnVudGltZSk7XG4vKioqKioqLyBcdFx0XHRpZih3YWl0aW5nVXBkYXRlUmVzb2x2ZXNbY2h1bmtJZF0pIHtcbi8qKioqKiovIFx0XHRcdFx0d2FpdGluZ1VwZGF0ZVJlc29sdmVzW2NodW5rSWRdKCk7XG4vKioqKioqLyBcdFx0XHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSA9IHVuZGVmaW5lZDtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50VXBkYXRlQ2h1bmtzO1xuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50VXBkYXRlO1xuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcztcbi8qKioqKiovIFx0XHR2YXIgY3VycmVudFVwZGF0ZVJ1bnRpbWU7XG4vKioqKioqLyBcdFx0ZnVuY3Rpb24gYXBwbHlIYW5kbGVyKG9wdGlvbnMpIHtcbi8qKioqKiovIFx0XHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmYpIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmYuanNvbnBIbXI7XG4vKioqKioqLyBcdFx0XHRjdXJyZW50VXBkYXRlQ2h1bmtzID0gdW5kZWZpbmVkO1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0QWZmZWN0ZWRNb2R1bGVFZmZlY3RzKHVwZGF0ZU1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgb3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSB7fTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLm1hcChmdW5jdGlvbiAoaWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRyZXR1cm4ge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2hhaW46IFtpZF0sXG4vKioqKioqLyBcdFx0XHRcdFx0XHRpZDogaWRcbi8qKioqKiovIFx0XHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgcXVldWVJdGVtID0gcXVldWUucG9wKCk7XG4vKioqKioqLyBcdFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWVJdGVtLmlkO1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBjaGFpbiA9IHF1ZXVlSXRlbS5jaGFpbjtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoXG4vKioqKioqLyBcdFx0XHRcdFx0XHQhbW9kdWxlIHx8XG4vKioqKioqLyBcdFx0XHRcdFx0XHQobW9kdWxlLmhvdC5fc2VsZkFjY2VwdGVkICYmICFtb2R1bGUuaG90Ll9zZWxmSW52YWxpZGF0ZWQpXG4vKioqKioqLyBcdFx0XHRcdFx0KVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y29udGludWU7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKG1vZHVsZS5ob3QuX3NlbGZEZWNsaW5lZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWRlY2xpbmVkXCIsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG4vKioqKioqLyBcdFx0XHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRpZiAobW9kdWxlLmhvdC5fbWFpbikge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJ1bmFjY2VwdGVkXCIsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG4vKioqKioqLyBcdFx0XHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZS5wYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR2YXIgcGFyZW50SWQgPSBtb2R1bGUucGFyZW50c1tpXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciBwYXJlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbcGFyZW50SWRdO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYgKCFwYXJlbnQpIGNvbnRpbnVlO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYgKHBhcmVudC5ob3QuX2RlY2xpbmVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGVjbGluZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4uY29uY2F0KFtwYXJlbnRJZF0pLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRwYXJlbnRJZDogcGFyZW50SWRcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0fTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRcdGlmIChvdXRkYXRlZE1vZHVsZXMuaW5kZXhPZihwYXJlbnRJZCkgIT09IC0xKSBjb250aW51ZTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGlmIChwYXJlbnQuaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKCFvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0pXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdID0gW107XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSwgW21vZHVsZUlkXSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5wdXNoKHBhcmVudElkKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goe1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4uY29uY2F0KFtwYXJlbnRJZF0pLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpZDogcGFyZW50SWRcbi8qKioqKiovIFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRyZXR1cm4ge1xuLyoqKioqKi8gXHRcdFx0XHRcdHR5cGU6IFwiYWNjZXB0ZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRtb2R1bGVJZDogdXBkYXRlTW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzOiBvdXRkYXRlZE1vZHVsZXMsXG4vKioqKioqLyBcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXM6IG91dGRhdGVkRGVwZW5kZW5jaWVzXG4vKioqKioqLyBcdFx0XHRcdH07XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBhZGRBbGxUb1NldChhLCBiKSB7XG4vKioqKioqLyBcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBpdGVtID0gYltpXTtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoYS5pbmRleE9mKGl0ZW0pID09PSAtMSkgYS5wdXNoKGl0ZW0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHQvLyBhdCBiZWdpbiBhbGwgdXBkYXRlcyBtb2R1bGVzIGFyZSBvdXRkYXRlZFxuLyoqKioqKi8gXHRcdFx0Ly8gdGhlIFwib3V0ZGF0ZWRcIiBzdGF0dXMgY2FuIHByb3BhZ2F0ZSB0byBwYXJlbnRzIGlmIHRoZXkgZG9uJ3QgYWNjZXB0IHRoZSBjaGlsZHJlblxuLyoqKioqKi8gXHRcdFx0dmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307XG4vKioqKioqLyBcdFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW107XG4vKioqKioqLyBcdFx0XHR2YXIgYXBwbGllZFVwZGF0ZSA9IHt9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0dmFyIHdhcm5VbmV4cGVjdGVkUmVxdWlyZSA9IGZ1bmN0aW9uIHdhcm5VbmV4cGVjdGVkUmVxdWlyZShtb2R1bGUpIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uc29sZS53YXJuKFxuLyoqKioqKi8gXHRcdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICsgbW9kdWxlLmlkICsgXCIpIHRvIGRpc3Bvc2VkIG1vZHVsZVwiXG4vKioqKioqLyBcdFx0XHRcdCk7XG4vKioqKioqLyBcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0Zm9yICh2YXIgbW9kdWxlSWQgaW4gY3VycmVudFVwZGF0ZSkge1xuLyoqKioqKi8gXHRcdFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGN1cnJlbnRVcGRhdGUsIG1vZHVsZUlkKSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBuZXdNb2R1bGVGYWN0b3J5ID0gY3VycmVudFVwZGF0ZVttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XHRcdFx0LyoqIEB0eXBlIHtUT0RPfSAqL1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciByZXN1bHQgPSBuZXdNb2R1bGVGYWN0b3J5XG4vKioqKioqLyBcdFx0XHRcdFx0XHQ/IGdldEFmZmVjdGVkTW9kdWxlRWZmZWN0cyhtb2R1bGVJZClcbi8qKioqKiovIFx0XHRcdFx0XHRcdDoge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGlzcG9zZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0fTtcbi8qKioqKiovIFx0XHRcdFx0XHQvKiogQHR5cGUge0Vycm9yfGZhbHNlfSAqL1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBhYm9ydEVycm9yID0gZmFsc2U7XG4vKioqKioqLyBcdFx0XHRcdFx0dmFyIGRvQXBwbHkgPSBmYWxzZTtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgZG9EaXNwb3NlID0gZmFsc2U7XG4vKioqKioqLyBcdFx0XHRcdFx0dmFyIGNoYWluSW5mbyA9IFwiXCI7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKHJlc3VsdC5jaGFpbikge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2hhaW5JbmZvID0gXCJcXG5VcGRhdGUgcHJvcGFnYXRpb246IFwiICsgcmVzdWx0LmNoYWluLmpvaW4oXCIgLT4gXCIpO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRzd2l0Y2ggKHJlc3VsdC50eXBlKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwic2VsZi1kZWNsaW5lZFwiOlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBzZWxmIGRlY2xpbmU6IFwiICtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm1vZHVsZUlkICtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwiZGVjbGluZWRcIjpcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EZWNsaW5lZCkgb3B0aW9ucy5vbkRlY2xpbmVkKHJlc3VsdCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2Ugb2YgZGVjbGluZWQgZGVwZW5kZW5jeTogXCIgK1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQubW9kdWxlSWQgK1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcIiBpbiBcIiArXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5wYXJlbnRJZCArXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGNoYWluSW5mb1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGJyZWFrO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2FzZSBcInVuYWNjZXB0ZWRcIjpcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25VbmFjY2VwdGVkKSBvcHRpb25zLm9uVW5hY2NlcHRlZChyZXN1bHQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlVW5hY2NlcHRlZClcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2UgXCIgKyBtb2R1bGVJZCArIFwiIGlzIG5vdCBhY2NlcHRlZFwiICsgY2hhaW5JbmZvXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwiYWNjZXB0ZWRcIjpcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25BY2NlcHRlZCkgb3B0aW9ucy5vbkFjY2VwdGVkKHJlc3VsdCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGRvQXBwbHkgPSB0cnVlO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRicmVhaztcbi8qKioqKiovIFx0XHRcdFx0XHRcdGNhc2UgXCJkaXNwb3NlZFwiOlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRpc3Bvc2VkKSBvcHRpb25zLm9uRGlzcG9zZWQocmVzdWx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0ZG9EaXNwb3NlID0gdHJ1ZTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRkZWZhdWx0OlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4Y2VwdGlvbiB0eXBlIFwiICsgcmVzdWx0LnR5cGUpO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoYWJvcnRFcnJvcikge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGFib3J0RXJyb3Jcbi8qKioqKiovIFx0XHRcdFx0XHRcdH07XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdGlmIChkb0FwcGx5KSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IG5ld01vZHVsZUZhY3Rvcnk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIHJlc3VsdC5vdXRkYXRlZE1vZHVsZXMpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Zm9yIChtb2R1bGVJZCBpbiByZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXMsIG1vZHVsZUlkKSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdID0gW107XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0YWRkQWxsVG9TZXQoXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0sXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoZG9EaXNwb3NlKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIFtyZXN1bHQubW9kdWxlSWRdKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdID0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0Y3VycmVudFVwZGF0ZSA9IHVuZGVmaW5lZDtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdC8vIFN0b3JlIHNlbGYgYWNjZXB0ZWQgb3V0ZGF0ZWQgbW9kdWxlcyB0byByZXF1aXJlIHRoZW0gbGF0ZXIgYnkgdGhlIG1vZHVsZSBzeXN0ZW1cbi8qKioqKiovIFx0XHRcdHZhciBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMgPSBbXTtcbi8qKioqKiovIFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgb3V0ZGF0ZWRNb2R1bGVzLmxlbmd0aDsgaisrKSB7XG4vKioqKioqLyBcdFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZUlkID0gb3V0ZGF0ZWRNb2R1bGVzW2pdO1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW291dGRhdGVkTW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHRpZiAoXG4vKioqKioqLyBcdFx0XHRcdFx0bW9kdWxlICYmXG4vKioqKioqLyBcdFx0XHRcdFx0KG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZCB8fCBtb2R1bGUuaG90Ll9tYWluKSAmJlxuLyoqKioqKi8gXHRcdFx0XHRcdC8vIHJlbW92ZWQgc2VsZi1hY2NlcHRlZCBtb2R1bGVzIHNob3VsZCBub3QgYmUgcmVxdWlyZWRcbi8qKioqKiovIFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW291dGRhdGVkTW9kdWxlSWRdICE9PSB3YXJuVW5leHBlY3RlZFJlcXVpcmUgJiZcbi8qKioqKiovIFx0XHRcdFx0XHQvLyB3aGVuIGNhbGxlZCBpbnZhbGlkYXRlIHNlbGYtYWNjZXB0aW5nIGlzIG5vdCBwb3NzaWJsZVxuLyoqKioqKi8gXHRcdFx0XHRcdCFtb2R1bGUuaG90Ll9zZWxmSW52YWxpZGF0ZWRcbi8qKioqKiovIFx0XHRcdFx0KSB7XG4vKioqKioqLyBcdFx0XHRcdFx0b3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzLnB1c2goe1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0bW9kdWxlOiBvdXRkYXRlZE1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmVxdWlyZTogbW9kdWxlLmhvdC5fcmVxdWlyZVNlbGYsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRlcnJvckhhbmRsZXI6IG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZFxuLyoqKioqKi8gXHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHR2YXIgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXM7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRyZXR1cm4ge1xuLyoqKioqKi8gXHRcdFx0XHRkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0Y3VycmVudFVwZGF0ZVJlbW92ZWRDaHVua3MuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmtJZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0ZGVsZXRlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbi8qKioqKiovIFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcyA9IHVuZGVmaW5lZDtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgaWR4O1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpO1xuLyoqKioqKi8gXHRcdFx0XHRcdHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR2YXIgbW9kdWxlSWQgPSBxdWV1ZS5wb3AoKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYgKCFtb2R1bGUpIGNvbnRpbnVlO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSB7fTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHRcdC8vIENhbGwgZGlzcG9zZSBoYW5kbGVyc1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0dmFyIGRpc3Bvc2VIYW5kbGVycyA9IG1vZHVsZS5ob3QuX2Rpc3Bvc2VIYW5kbGVycztcbi8qKioqKiovIFx0XHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBkaXNwb3NlSGFuZGxlcnMubGVuZ3RoOyBqKyspIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0ZGlzcG9zZUhhbmRsZXJzW2pdLmNhbGwobnVsbCwgZGF0YSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckRbbW9kdWxlSWRdID0gZGF0YTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHRcdC8vIGRpc2FibGUgbW9kdWxlICh0aGlzIGRpc2FibGVzIHJlcXVpcmVzIGZyb20gdGhpcyBtb2R1bGUpXG4vKioqKioqLyBcdFx0XHRcdFx0XHRtb2R1bGUuaG90LmFjdGl2ZSA9IGZhbHNlO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIG1vZHVsZSBmcm9tIGNhY2hlXG4vKioqKioqLyBcdFx0XHRcdFx0XHRkZWxldGUgX193ZWJwYWNrX3JlcXVpcmVfXy5jW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHRcdC8vIHdoZW4gZGlzcG9zaW5nIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCBkaXNwb3NlIGhhbmRsZXJcbi8qKioqKiovIFx0XHRcdFx0XHRcdGRlbGV0ZSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdFx0XHQvLyByZW1vdmUgXCJwYXJlbnRzXCIgcmVmZXJlbmNlcyBmcm9tIGFsbCBjaGlsZHJlblxuLyoqKioqKi8gXHRcdFx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IG1vZHVsZS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR2YXIgY2hpbGQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlLmNoaWxkcmVuW2pdXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlkeCA9IGNoaWxkLnBhcmVudHMuaW5kZXhPZihtb2R1bGVJZCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlmIChpZHggPj0gMCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdFx0Ly8gcmVtb3ZlIG91dGRhdGVkIGRlcGVuZGVuY3kgZnJvbSBtb2R1bGUgY2hpbGRyZW5cbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgZGVwZW5kZW5jeTtcbi8qKioqKiovIFx0XHRcdFx0XHRmb3IgKHZhciBvdXRkYXRlZE1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG91dGRhdGVkRGVwZW5kZW5jaWVzLCBvdXRkYXRlZE1vZHVsZUlkKSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbb3V0ZGF0ZWRNb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlmIChtb2R1bGUpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1tvdXRkYXRlZE1vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMubGVuZ3RoOyBqKyspIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGlkeCA9IG1vZHVsZS5jaGlsZHJlbi5pbmRleE9mKGRlcGVuZGVuY3kpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBtb2R1bGUuY2hpbGRyZW4uc3BsaWNlKGlkeCwgMSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRhcHBseTogZnVuY3Rpb24gKHJlcG9ydEVycm9yKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0Ly8gaW5zZXJ0IG5ldyBjb2RlXG4vKioqKioqLyBcdFx0XHRcdFx0Zm9yICh2YXIgdXBkYXRlTW9kdWxlSWQgaW4gYXBwbGllZFVwZGF0ZSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhhcHBsaWVkVXBkYXRlLCB1cGRhdGVNb2R1bGVJZCkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tW3VwZGF0ZU1vZHVsZUlkXSA9IGFwcGxpZWRVcGRhdGVbdXBkYXRlTW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHQvLyBydW4gbmV3IHJ1bnRpbWUgbW9kdWxlc1xuLyoqKioqKi8gXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY3VycmVudFVwZGF0ZVJ1bnRpbWUubGVuZ3RoOyBpKyspIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVSdW50aW1lW2ldKF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHQvLyBjYWxsIGFjY2VwdCBoYW5kbGVyc1xuLyoqKioqKi8gXHRcdFx0XHRcdGZvciAodmFyIG91dGRhdGVkTW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm8ob3V0ZGF0ZWREZXBlbmRlbmNpZXMsIG91dGRhdGVkTW9kdWxlSWQpKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbb3V0ZGF0ZWRNb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlmIChtb2R1bGUpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1tvdXRkYXRlZE1vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gW107XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9ySGFuZGxlcnMgPSBbXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHR2YXIgZGVwZW5kZW5jaWVzRm9yQ2FsbGJhY2tzID0gW107XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhY2NlcHRDYWxsYmFjayA9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZS5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcGVuZGVuY3ldO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9ySGFuZGxlciA9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZS5ob3QuX2FjY2VwdGVkRXJyb3JIYW5kbGVyc1tkZXBlbmRlbmN5XTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY2NlcHRDYWxsYmFjaykge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tzLmluZGV4T2YoYWNjZXB0Q2FsbGJhY2spICE9PSAtMSkgY29udGludWU7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGNhbGxiYWNrcy5wdXNoKGFjY2VwdENhbGxiYWNrKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVycy5wdXNoKGVycm9ySGFuZGxlcik7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrcy5wdXNoKGRlcGVuZGVuY3kpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGNhbGxiYWNrcy5sZW5ndGg7IGsrKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tzW2tdLmNhbGwobnVsbCwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZXJyb3JIYW5kbGVyc1trXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9ySGFuZGxlcnNba10oZXJyLCB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBvdXRkYXRlZE1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5SWQ6IGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrc1trXVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyMikge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogb3V0ZGF0ZWRNb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5SWQ6IGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrc1trXSxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyMixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXBvcnRFcnJvcihlcnIyKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVwb3J0RXJyb3IoZXJyKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiYWNjZXB0LWVycm9yZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG91dGRhdGVkTW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3lJZDogZGVwZW5kZW5jaWVzRm9yQ2FsbGJhY2tzW2tdLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRcdC8vIExvYWQgc2VsZiBhY2NlcHRlZCBtb2R1bGVzXG4vKioqKioqLyBcdFx0XHRcdFx0Zm9yICh2YXIgbyA9IDA7IG8gPCBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMubGVuZ3RoOyBvKyspIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciBpdGVtID0gb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzW29dO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gaXRlbS5tb2R1bGU7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR0cnkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpdGVtLnJlcXVpcmUobW9kdWxlSWQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgaXRlbS5lcnJvckhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRpdGVtLmVycm9ySGFuZGxlcihlcnIsIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGU6IF9fd2VicGFja19yZXF1aXJlX18uY1ttb2R1bGVJZF1cbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycjEpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVycjEsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3JpZ2luYWxFcnJvcjogZXJyXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVwb3J0RXJyb3IoZXJyMSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBvdXRkYXRlZE1vZHVsZXM7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH07XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1ySS5qc29ucCA9IGZ1bmN0aW9uIChtb2R1bGVJZCwgYXBwbHlIYW5kbGVycykge1xuLyoqKioqKi8gXHRcdFx0aWYgKCFjdXJyZW50VXBkYXRlKSB7XG4vKioqKioqLyBcdFx0XHRcdGN1cnJlbnRVcGRhdGUgPSB7fTtcbi8qKioqKiovIFx0XHRcdFx0Y3VycmVudFVwZGF0ZVJ1bnRpbWUgPSBbXTtcbi8qKioqKiovIFx0XHRcdFx0Y3VycmVudFVwZGF0ZVJlbW92ZWRDaHVua3MgPSBbXTtcbi8qKioqKiovIFx0XHRcdFx0YXBwbHlIYW5kbGVycy5wdXNoKGFwcGx5SGFuZGxlcik7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRpZiAoIV9fd2VicGFja19yZXF1aXJlX18ubyhjdXJyZW50VXBkYXRlLCBtb2R1bGVJZCkpIHtcbi8qKioqKiovIFx0XHRcdFx0Y3VycmVudFVwZGF0ZVttb2R1bGVJZF0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJDLmpzb25wID0gZnVuY3Rpb24gKFxuLyoqKioqKi8gXHRcdFx0Y2h1bmtJZHMsXG4vKioqKioqLyBcdFx0XHRyZW1vdmVkQ2h1bmtzLFxuLyoqKioqKi8gXHRcdFx0cmVtb3ZlZE1vZHVsZXMsXG4vKioqKioqLyBcdFx0XHRwcm9taXNlcyxcbi8qKioqKiovIFx0XHRcdGFwcGx5SGFuZGxlcnMsXG4vKioqKioqLyBcdFx0XHR1cGRhdGVkTW9kdWxlc0xpc3Rcbi8qKioqKiovIFx0XHQpIHtcbi8qKioqKiovIFx0XHRcdGFwcGx5SGFuZGxlcnMucHVzaChhcHBseUhhbmRsZXIpO1xuLyoqKioqKi8gXHRcdFx0Y3VycmVudFVwZGF0ZUNodW5rcyA9IHt9O1xuLyoqKioqKi8gXHRcdFx0Y3VycmVudFVwZGF0ZVJlbW92ZWRDaHVua3MgPSByZW1vdmVkQ2h1bmtzO1xuLyoqKioqKi8gXHRcdFx0Y3VycmVudFVwZGF0ZSA9IHJlbW92ZWRNb2R1bGVzLnJlZHVjZShmdW5jdGlvbiAob2JqLCBrZXkpIHtcbi8qKioqKiovIFx0XHRcdFx0b2JqW2tleV0gPSBmYWxzZTtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIG9iajtcbi8qKioqKiovIFx0XHRcdH0sIHt9KTtcbi8qKioqKiovIFx0XHRcdGN1cnJlbnRVcGRhdGVSdW50aW1lID0gW107XG4vKioqKioqLyBcdFx0XHRjaHVua0lkcy5mb3JFYWNoKGZ1bmN0aW9uIChjaHVua0lkKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmIChcbi8qKioqKiovIFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJlxuLyoqKioqKi8gXHRcdFx0XHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXSAhPT0gdW5kZWZpbmVkXG4vKioqKioqLyBcdFx0XHRcdCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHByb21pc2VzLnB1c2gobG9hZFVwZGF0ZUNodW5rKGNodW5rSWQsIHVwZGF0ZWRNb2R1bGVzTGlzdCkpO1xuLyoqKioqKi8gXHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF0gPSB0cnVlO1xuLyoqKioqKi8gXHRcdFx0XHR9IGVsc2Uge1xuLyoqKioqKi8gXHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF0gPSBmYWxzZTtcbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5mKSB7XG4vKioqKioqLyBcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uZi5qc29ucEhtciA9IGZ1bmN0aW9uIChjaHVua0lkLCBwcm9taXNlcykge1xuLyoqKioqKi8gXHRcdFx0XHRcdGlmIChcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3MgJiZcbi8qKioqKiovIFx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubyhjdXJyZW50VXBkYXRlQ2h1bmtzLCBjaHVua0lkKSAmJlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0IWN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF1cbi8qKioqKiovIFx0XHRcdFx0XHQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHByb21pc2VzLnB1c2gobG9hZFVwZGF0ZUNodW5rKGNodW5rSWQpKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF0gPSB0cnVlO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0fTtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1yTSA9ICgpID0+IHtcbi8qKioqKiovIFx0XHRcdGlmICh0eXBlb2YgZmV0Y2ggPT09IFwidW5kZWZpbmVkXCIpIHRocm93IG5ldyBFcnJvcihcIk5vIGJyb3dzZXIgc3VwcG9ydDogbmVlZCBmZXRjaCBBUElcIik7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gZmV0Y2goX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy5obXJGKCkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4vKioqKioqLyBcdFx0XHRcdGlmKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSByZXR1cm47IC8vIG5vIHVwZGF0ZSBhdmFpbGFibGVcbi8qKioqKiovIFx0XHRcdFx0aWYoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggdXBkYXRlIG1hbmlmZXN0IFwiICsgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4vKioqKioqLyBcdFx0XHRcdHJldHVybiByZXNwb25zZS5qc29uKCk7XG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uTy5qID0gKGNodW5rSWQpID0+IChpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPT09IDApO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIGluc3RhbGwgYSBKU09OUCBjYWxsYmFjayBmb3IgY2h1bmsgbG9hZGluZ1xuLyoqKioqKi8gXHRcdHZhciB3ZWJwYWNrSnNvbnBDYWxsYmFjayA9IChwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiwgZGF0YSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0dmFyIFtjaHVua0lkcywgbW9yZU1vZHVsZXMsIHJ1bnRpbWVdID0gZGF0YTtcbi8qKioqKiovIFx0XHRcdC8vIGFkZCBcIm1vcmVNb2R1bGVzXCIgdG8gdGhlIG1vZHVsZXMgb2JqZWN0LFxuLyoqKioqKi8gXHRcdFx0Ly8gdGhlbiBmbGFnIGFsbCBcImNodW5rSWRzXCIgYXMgbG9hZGVkIGFuZCBmaXJlIGNhbGxiYWNrXG4vKioqKioqLyBcdFx0XHR2YXIgbW9kdWxlSWQsIGNodW5rSWQsIGkgPSAwO1xuLyoqKioqKi8gXHRcdFx0aWYoY2h1bmtJZHMuc29tZSgoaWQpID0+IChpbnN0YWxsZWRDaHVua3NbaWRdICE9PSAwKSkpIHtcbi8qKioqKiovIFx0XHRcdFx0Zm9yKG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdGlmKHJ1bnRpbWUpIHZhciByZXN1bHQgPSBydW50aW1lKF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0aWYocGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24pIHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uKGRhdGEpO1xuLyoqKioqKi8gXHRcdFx0Zm9yKDtpIDwgY2h1bmtJZHMubGVuZ3RoOyBpKyspIHtcbi8qKioqKiovIFx0XHRcdFx0Y2h1bmtJZCA9IGNodW5rSWRzW2ldO1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJiBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcbi8qKioqKiovIFx0XHRcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF1bMF0oKTtcbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSAwO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uTyhyZXN1bHQpO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHR2YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gc2VsZltcIndlYnBhY2tDaHVua19OX0VcIl0gPSBzZWxmW1wid2VicGFja0NodW5rX05fRVwiXSB8fCBbXTtcbi8qKioqKiovIFx0XHRjaHVua0xvYWRpbmdHbG9iYWwuZm9yRWFjaCh3ZWJwYWNrSnNvbnBDYWxsYmFjay5iaW5kKG51bGwsIDApKTtcbi8qKioqKiovIFx0XHRjaHVua0xvYWRpbmdHbG9iYWwucHVzaCA9IHdlYnBhY2tKc29ucENhbGxiYWNrLmJpbmQobnVsbCwgY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2guYmluZChjaHVua0xvYWRpbmdHbG9iYWwpKTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gbW9kdWxlIGNhY2hlIGFyZSB1c2VkIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vKioqKioqLyBcdFxuLyoqKioqKi8gfSkoKVxuIl19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG4vKioqKioqLyAoKCkgPT4geyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdFwidXNlIHN0cmljdFwiO1xuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9ICh7fSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbi8qKioqKiovIFx0XHRcdGlmIChjYWNoZWRNb2R1bGUuZXJyb3IgIT09IHVuZGVmaW5lZCkgdGhyb3cgY2FjaGVkTW9kdWxlLmVycm9yO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0dmFyIHRocmV3ID0gdHJ1ZTtcbi8qKioqKiovIFx0XHR0cnkge1xuLyoqKioqKi8gXHRcdFx0dmFyIGV4ZWNPcHRpb25zID0geyBpZDogbW9kdWxlSWQsIG1vZHVsZTogbW9kdWxlLCBmYWN0b3J5OiBfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXSwgcmVxdWlyZTogX193ZWJwYWNrX3JlcXVpcmVfXyB9O1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlcikgeyBoYW5kbGVyKGV4ZWNPcHRpb25zKTsgfSk7XG4vKioqKioqLyBcdFx0XHRtb2R1bGUgPSBleGVjT3B0aW9ucy5tb2R1bGU7XG4vKioqKioqLyBcdFx0XHRleGVjT3B0aW9ucy5mYWN0b3J5LmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIGV4ZWNPcHRpb25zLnJlcXVpcmUpO1xuLyoqKioqKi8gXHRcdFx0dGhyZXcgPSBmYWxzZTtcbi8qKioqKiovIFx0XHR9IGZpbmFsbHkge1xuLyoqKioqKi8gXHRcdFx0aWYodGhyZXcpIGRlbGV0ZSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfXztcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGV4ZWN1dGlvbiBpbnRlcmNlcHRvclxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBbXTtcbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0dmFyIGRlZmVycmVkID0gW107XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5PID0gKHJlc3VsdCwgY2h1bmtJZHMsIGZuLCBwcmlvcml0eSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0aWYoY2h1bmtJZHMpIHtcbi8qKioqKiovIFx0XHRcdFx0cHJpb3JpdHkgPSBwcmlvcml0eSB8fCAwO1xuLyoqKioqKi8gXHRcdFx0XHRmb3IodmFyIGkgPSBkZWZlcnJlZC5sZW5ndGg7IGkgPiAwICYmIGRlZmVycmVkW2kgLSAxXVsyXSA+IHByaW9yaXR5OyBpLS0pIGRlZmVycmVkW2ldID0gZGVmZXJyZWRbaSAtIDFdO1xuLyoqKioqKi8gXHRcdFx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuLyoqKioqKi8gXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZWZlcnJlZC5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldID0gZGVmZXJyZWRbaV07XG4vKioqKioqLyBcdFx0XHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuLyoqKioqKi8gXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNodW5rSWRzLmxlbmd0aDsgaisrKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKChwcmlvcml0eSAmIDEgPT09IDAgfHwgbm90RnVsZmlsbGVkID49IHByaW9yaXR5KSAmJiBPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLk8pLmV2ZXJ5KChrZXkpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fLk9ba2V5XShjaHVua0lkc1tqXSkpKSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG4vKioqKioqLyBcdFx0XHRcdFx0fSBlbHNlIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGZ1bGZpbGxlZCA9IGZhbHNlO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRpZihmdWxmaWxsZWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRkZWZlcnJlZC5zcGxpY2UoaS0tLCAxKVxuLyoqKioqKi8gXHRcdFx0XHRcdHZhciByID0gZm4oKTtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gcmVzdWx0O1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuLyoqKioqKi8gXHRcdFx0XHQoKSA9PiAobW9kdWxlKTtcbi8qKioqKiovIFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyAob2JqKSA9PiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpIDogKG9iaikgPT4gKG9iai5fX3Byb3RvX18pO1xuLyoqKioqKi8gXHRcdHZhciBsZWFmUHJvdG90eXBlcztcbi8qKioqKiovIFx0XHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0XHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0XHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0XHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0XHQvLyBtb2RlICYgMTY6IHJldHVybiB2YWx1ZSB3aGVuIGl0J3MgUHJvbWlzZS1saWtlXG4vKioqKioqLyBcdFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSB0aGlzKHZhbHVlKTtcbi8qKioqKiovIFx0XHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0XHRpZih0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmKChtb2RlICYgNCkgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdFx0XHRpZigobW9kZSAmIDE2KSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0XHR2YXIgZGVmID0ge307XG4vKioqKioqLyBcdFx0XHRsZWFmUHJvdG90eXBlcyA9IGxlYWZQcm90b3R5cGVzIHx8IFtudWxsLCBnZXRQcm90byh7fSksIGdldFByb3RvKFtdKSwgZ2V0UHJvdG8oZ2V0UHJvdG8pXTtcbi8qKioqKiovIFx0XHRcdGZvcih2YXIgY3VycmVudCA9IG1vZGUgJiAyICYmIHZhbHVlOyB0eXBlb2YgY3VycmVudCA9PSAnb2JqZWN0JyAmJiAhfmxlYWZQcm90b3R5cGVzLmluZGV4T2YoY3VycmVudCk7IGN1cnJlbnQgPSBnZXRQcm90byhjdXJyZW50KSkge1xuLyoqKioqKi8gXHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IChkZWZba2V5XSA9ICgpID0+ICh2YWx1ZVtrZXldKSkpO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0ZGVmWydkZWZhdWx0J10gPSAoKSA9PiAodmFsdWUpO1xuLyoqKioqKi8gXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBkZWYpO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcbi8qKioqKiovIFx0XHRcdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcbi8qKioqKiovIFx0XHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZW5zdXJlIGNodW5rICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vKioqKioqLyBcdFx0Ly8gVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlIGVudHJ5IGNodW5rLlxuLyoqKioqKi8gXHRcdC8vIFRoZSBjaHVuayBsb2FkaW5nIGZ1bmN0aW9uIGZvciBhZGRpdGlvbmFsIGNodW5rc1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5mKS5yZWR1Y2UoKHByb21pc2VzLCBrZXkpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mW2tleV0oY2h1bmtJZCwgcHJvbWlzZXMpO1xuLyoqKioqKi8gXHRcdFx0XHRyZXR1cm4gcHJvbWlzZXM7XG4vKioqKioqLyBcdFx0XHR9LCBbXSkpO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3Ncbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgdXBkYXRlIGNodW5rIGZpbGVuYW1lICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYWxsIGNodW5rc1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uaHUgPSAoY2h1bmtJZCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gXCJzdGF0aWMvd2VicGFjay9cIiArIGNodW5rSWQgKyBcIi5cIiArIF9fd2VicGFja19yZXF1aXJlX18uaCgpICsgXCIuaG90LXVwZGF0ZS5qc1wiO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZ2V0IG1pbmktY3NzIGNodW5rIGZpbGVuYW1lICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5taW5pQ3NzRiA9IChjaHVua0lkKSA9PiB7XG4vKioqKioqLyBcdFx0XHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcbi8qKioqKiovIFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9nZXQgdXBkYXRlIG1hbmlmZXN0IGZpbGVuYW1lICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJGID0gKCkgPT4gKFwic3RhdGljL3dlYnBhY2svXCIgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLmgoKSArIFwiLndlYnBhY2suaG90LXVwZGF0ZS5qc29uXCIpO1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5oID0gKCkgPT4gKFwiNWNjMTA0ZDcyZjA4NWE2MFwiKVxuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2dsb2JhbCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHRcdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuLyoqKioqKi8gXHRcdFx0dHJ5IHtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4vKioqKioqLyBcdFx0XHR9IGNhdGNoIChlKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9KSgpO1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSlcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9sb2FkIHNjcmlwdCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdHZhciBpblByb2dyZXNzID0ge307XG4vKioqKioqLyBcdFx0dmFyIGRhdGFXZWJwYWNrUHJlZml4ID0gXCJfTl9FOlwiO1xuLyoqKioqKi8gXHRcdC8vIGxvYWRTY3JpcHQgZnVuY3Rpb24gdG8gbG9hZCBhIHNjcmlwdCB2aWEgc2NyaXB0IHRhZ1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubCA9ICh1cmwsIGRvbmUsIGtleSwgY2h1bmtJZCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0aWYoaW5Qcm9ncmVzc1t1cmxdKSB7IGluUHJvZ3Jlc3NbdXJsXS5wdXNoKGRvbmUpOyByZXR1cm47IH1cbi8qKioqKiovIFx0XHRcdHZhciBzY3JpcHQsIG5lZWRBdHRhY2g7XG4vKioqKioqLyBcdFx0XHRpZihrZXkgIT09IHVuZGVmaW5lZCkge1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuLyoqKioqKi8gXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBzID0gc2NyaXB0c1tpXTtcbi8qKioqKiovIFx0XHRcdFx0XHRpZihzLmdldEF0dHJpYnV0ZShcInNyY1wiKSA9PSB1cmwgfHwgcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXdlYnBhY2tcIikgPT0gZGF0YVdlYnBhY2tQcmVmaXggKyBrZXkpIHsgc2NyaXB0ID0gczsgYnJlYWs7IH1cbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0aWYoIXNjcmlwdCkge1xuLyoqKioqKi8gXHRcdFx0XHRuZWVkQXR0YWNoID0gdHJ1ZTtcbi8qKioqKiovIFx0XHRcdFx0c2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdHNjcmlwdC5jaGFyc2V0ID0gJ3V0Zi04Jztcbi8qKioqKiovIFx0XHRcdFx0c2NyaXB0LnRpbWVvdXQgPSAxMjA7XG4vKioqKioqLyBcdFx0XHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm5jKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIF9fd2VicGFja19yZXF1aXJlX18ubmMpO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXdlYnBhY2tcIiwgZGF0YVdlYnBhY2tQcmVmaXggKyBrZXkpO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRzY3JpcHQuc3JjID0gX193ZWJwYWNrX3JlcXVpcmVfXy50dSh1cmwpO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0aW5Qcm9ncmVzc1t1cmxdID0gW2RvbmVdO1xuLyoqKioqKi8gXHRcdFx0dmFyIG9uU2NyaXB0Q29tcGxldGUgPSAocHJldiwgZXZlbnQpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0Ly8gYXZvaWQgbWVtIGxlYWtzIGluIElFLlxuLyoqKioqKi8gXHRcdFx0XHRzY3JpcHQub25lcnJvciA9IHNjcmlwdC5vbmxvYWQgPSBudWxsO1xuLyoqKioqKi8gXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG4vKioqKioqLyBcdFx0XHRcdHZhciBkb25lRm5zID0gaW5Qcm9ncmVzc1t1cmxdO1xuLyoqKioqKi8gXHRcdFx0XHRkZWxldGUgaW5Qcm9ncmVzc1t1cmxdO1xuLyoqKioqKi8gXHRcdFx0XHRzY3JpcHQucGFyZW50Tm9kZSAmJiBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuLyoqKioqKi8gXHRcdFx0XHRkb25lRm5zICYmIGRvbmVGbnMuZm9yRWFjaCgoZm4pID0+IChmbihldmVudCkpKTtcbi8qKioqKiovIFx0XHRcdFx0aWYocHJldikgcmV0dXJuIHByZXYoZXZlbnQpO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0dmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KG9uU2NyaXB0Q29tcGxldGUuYmluZChudWxsLCB1bmRlZmluZWQsIHsgdHlwZTogJ3RpbWVvdXQnLCB0YXJnZXQ6IHNjcmlwdCB9KSwgMTIwMDAwKTtcbi8qKioqKiovIFx0XHRcdHNjcmlwdC5vbmVycm9yID0gb25TY3JpcHRDb21wbGV0ZS5iaW5kKG51bGwsIHNjcmlwdC5vbmVycm9yKTtcbi8qKioqKiovIFx0XHRcdHNjcmlwdC5vbmxvYWQgPSBvblNjcmlwdENvbXBsZXRlLmJpbmQobnVsbCwgc2NyaXB0Lm9ubG9hZCk7XG4vKioqKioqLyBcdFx0XHRuZWVkQXR0YWNoICYmIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuLyoqKioqKi8gXHRcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0bW9kdWxlLnBhdGhzID0gW107XG4vKioqKioqLyBcdFx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gbW9kdWxlO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvdHJ1c3RlZCB0eXBlcyBwb2xpY3kgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHR2YXIgcG9saWN5O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18udHQgPSAoKSA9PiB7XG4vKioqKioqLyBcdFx0XHQvLyBDcmVhdGUgVHJ1c3RlZCBUeXBlIHBvbGljeSBpZiBUcnVzdGVkIFR5cGVzIGFyZSBhdmFpbGFibGUgYW5kIHRoZSBwb2xpY3kgZG9lc24ndCBleGlzdCB5ZXQuXG4vKioqKioqLyBcdFx0XHRpZiAocG9saWN5ID09PSB1bmRlZmluZWQpIHtcbi8qKioqKiovIFx0XHRcdFx0cG9saWN5ID0ge1xuLyoqKioqKi8gXHRcdFx0XHRcdGNyZWF0ZVNjcmlwdDogKHNjcmlwdCkgPT4gKHNjcmlwdCksXG4vKioqKioqLyBcdFx0XHRcdFx0Y3JlYXRlU2NyaXB0VVJMOiAodXJsKSA9PiAodXJsKVxuLyoqKioqKi8gXHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0XHRpZiAodHlwZW9mIHRydXN0ZWRUeXBlcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KSB7XG4vKioqKioqLyBcdFx0XHRcdFx0cG9saWN5ID0gdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeShcIm5leHRqcyNidW5kbGVyXCIsIHBvbGljeSk7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdHJldHVybiBwb2xpY3k7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS90cnVzdGVkIHR5cGVzIHNjcmlwdCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18udHMgPSAoc2NyaXB0KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy50dCgpLmNyZWF0ZVNjcmlwdChzY3JpcHQpKTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS90cnVzdGVkIHR5cGVzIHNjcmlwdCB1cmwgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnR1ID0gKHVybCkgPT4gKF9fd2VicGFja19yZXF1aXJlX18udHQoKS5jcmVhdGVTY3JpcHRVUkwodXJsKSk7XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvaG90IG1vZHVsZSByZXBsYWNlbWVudCAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50TW9kdWxlRGF0YSA9IHt9O1xuLyoqKioqKi8gXHRcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIG1vZHVsZSBhbmQgcmVxdWlyZSBjcmVhdGlvblxuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50Q2hpbGRNb2R1bGU7XG4vKioqKioqLyBcdFx0dmFyIGN1cnJlbnRQYXJlbnRzID0gW107XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0Ly8gc3RhdHVzXG4vKioqKioqLyBcdFx0dmFyIHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycyA9IFtdO1xuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50U3RhdHVzID0gXCJpZGxlXCI7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0Ly8gd2hpbGUgZG93bmxvYWRpbmdcbi8qKioqKiovIFx0XHR2YXIgYmxvY2tpbmdQcm9taXNlcyA9IDA7XG4vKioqKioqLyBcdFx0dmFyIGJsb2NraW5nUHJvbWlzZXNXYWl0aW5nID0gW107XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0Ly8gVGhlIHVwZGF0ZSBpbmZvXG4vKioqKioqLyBcdFx0dmFyIGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzO1xuLyoqKioqKi8gXHRcdHZhciBxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXM7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJEID0gY3VycmVudE1vZHVsZURhdGE7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pLnB1c2goZnVuY3Rpb24gKG9wdGlvbnMpIHtcbi8qKioqKiovIFx0XHRcdHZhciBtb2R1bGUgPSBvcHRpb25zLm1vZHVsZTtcbi8qKioqKiovIFx0XHRcdHZhciByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShvcHRpb25zLnJlcXVpcmUsIG9wdGlvbnMuaWQpO1xuLyoqKioqKi8gXHRcdFx0bW9kdWxlLmhvdCA9IGNyZWF0ZU1vZHVsZUhvdE9iamVjdChvcHRpb25zLmlkLCBtb2R1bGUpO1xuLyoqKioqKi8gXHRcdFx0bW9kdWxlLnBhcmVudHMgPSBjdXJyZW50UGFyZW50cztcbi8qKioqKiovIFx0XHRcdG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuLyoqKioqKi8gXHRcdFx0Y3VycmVudFBhcmVudHMgPSBbXTtcbi8qKioqKiovIFx0XHRcdG9wdGlvbnMucmVxdWlyZSA9IHJlcXVpcmU7XG4vKioqKioqLyBcdFx0fSk7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJDID0ge307XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJJID0ge307XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0ZnVuY3Rpb24gY3JlYXRlUmVxdWlyZShyZXF1aXJlLCBtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdFx0dmFyIG1lID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XHRpZiAoIW1lKSByZXR1cm4gcmVxdWlyZTtcbi8qKioqKiovIFx0XHRcdHZhciBmbiA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4vKioqKioqLyBcdFx0XHRcdGlmIChtZS5ob3QuYWN0aXZlKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0pIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciBwYXJlbnRzID0gaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XS5wYXJlbnRzO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYgKHBhcmVudHMuaW5kZXhPZihtb2R1bGVJZCkgPT09IC0xKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdHBhcmVudHMucHVzaChtb2R1bGVJZCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0fSBlbHNlIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRQYXJlbnRzID0gW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRDaGlsZE1vZHVsZSA9IHJlcXVlc3Q7XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdGlmIChtZS5jaGlsZHJlbi5pbmRleE9mKHJlcXVlc3QpID09PSAtMSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0bWUuY2hpbGRyZW4ucHVzaChyZXF1ZXN0KTtcbi8qKioqKiovIFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdH0gZWxzZSB7XG4vKioqKioqLyBcdFx0XHRcdFx0Y29uc29sZS53YXJuKFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgK1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRyZXF1ZXN0ICtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XCIpIGZyb20gZGlzcG9zZWQgbW9kdWxlIFwiICtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWRcbi8qKioqKiovIFx0XHRcdFx0XHQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdGN1cnJlbnRQYXJlbnRzID0gW107XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIHJlcXVpcmUocmVxdWVzdCk7XG4vKioqKioqLyBcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0dmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4vKioqKioqLyBcdFx0XHRcdHJldHVybiB7XG4vKioqKioqLyBcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRyZXR1cm4gcmVxdWlyZVtuYW1lXTtcbi8qKioqKiovIFx0XHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRcdHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRyZXF1aXJlW25hbWVdID0gdmFsdWU7XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0fTtcbi8qKioqKiovIFx0XHRcdGZvciAodmFyIG5hbWUgaW4gcmVxdWlyZSkge1xuLyoqKioqKi8gXHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcXVpcmUsIG5hbWUpICYmIG5hbWUgIT09IFwiZVwiKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBuYW1lLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IobmFtZSkpO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRmbi5lID0gZnVuY3Rpb24gKGNodW5rSWQsIGZldGNoUHJpb3JpdHkpIHtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIHRyYWNrQmxvY2tpbmdQcm9taXNlKHJlcXVpcmUuZShjaHVua0lkLCBmZXRjaFByaW9yaXR5KSk7XG4vKioqKioqLyBcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGZuO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRmdW5jdGlvbiBjcmVhdGVNb2R1bGVIb3RPYmplY3QobW9kdWxlSWQsIG1lKSB7XG4vKioqKioqLyBcdFx0XHR2YXIgX21haW4gPSBjdXJyZW50Q2hpbGRNb2R1bGUgIT09IG1vZHVsZUlkO1xuLyoqKioqKi8gXHRcdFx0dmFyIGhvdCA9IHtcbi8qKioqKiovIFx0XHRcdFx0Ly8gcHJpdmF0ZSBzdHVmZlxuLyoqKioqKi8gXHRcdFx0XHRfYWNjZXB0ZWREZXBlbmRlbmNpZXM6IHt9LFxuLyoqKioqKi8gXHRcdFx0XHRfYWNjZXB0ZWRFcnJvckhhbmRsZXJzOiB7fSxcbi8qKioqKiovIFx0XHRcdFx0X2RlY2xpbmVkRGVwZW5kZW5jaWVzOiB7fSxcbi8qKioqKiovIFx0XHRcdFx0X3NlbGZBY2NlcHRlZDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdF9zZWxmRGVjbGluZWQ6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0XHRfc2VsZkludmFsaWRhdGVkOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0X2Rpc3Bvc2VIYW5kbGVyczogW10sXG4vKioqKioqLyBcdFx0XHRcdF9tYWluOiBfbWFpbixcbi8qKioqKiovIFx0XHRcdFx0X3JlcXVpcmVTZWxmOiBmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0Y3VycmVudFBhcmVudHMgPSBtZS5wYXJlbnRzLnNsaWNlKCk7XG4vKioqKioqLyBcdFx0XHRcdFx0Y3VycmVudENoaWxkTW9kdWxlID0gX21haW4gPyB1bmRlZmluZWQgOiBtb2R1bGVJZDtcbi8qKioqKiovIFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKTtcbi8qKioqKiovIFx0XHRcdFx0fSxcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0Ly8gTW9kdWxlIEFQSVxuLyoqKioqKi8gXHRcdFx0XHRhY3RpdmU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGFjY2VwdDogZnVuY3Rpb24gKGRlcCwgY2FsbGJhY2ssIGVycm9ySGFuZGxlcikge1xuLyoqKioqKi8gXHRcdFx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmQWNjZXB0ZWQgPSB0cnVlO1xuLyoqKioqKi8gXHRcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwiZnVuY3Rpb25cIikgaG90Ll9zZWxmQWNjZXB0ZWQgPSBkZXA7XG4vKioqKioqLyBcdFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIiAmJiBkZXAgIT09IG51bGwpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRXJyb3JIYW5kbGVyc1tkZXBbaV1dID0gZXJyb3JIYW5kbGVyO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdH0gZWxzZSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWRFcnJvckhhbmRsZXJzW2RlcF0gPSBlcnJvckhhbmRsZXI7XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRkZWNsaW5lOiBmdW5jdGlvbiAoZGVwKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKGRlcCA9PT0gdW5kZWZpbmVkKSBob3QuX3NlbGZEZWNsaW5lZCA9IHRydWU7XG4vKioqKioqLyBcdFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIiAmJiBkZXAgIT09IG51bGwpXG4vKioqKioqLyBcdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKylcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBbaV1dID0gdHJ1ZTtcbi8qKioqKiovIFx0XHRcdFx0XHRlbHNlIGhvdC5fZGVjbGluZWREZXBlbmRlbmNpZXNbZGVwXSA9IHRydWU7XG4vKioqKioqLyBcdFx0XHRcdH0sXG4vKioqKioqLyBcdFx0XHRcdGRpc3Bvc2U6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuLyoqKioqKi8gXHRcdFx0XHRcdGhvdC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goY2FsbGJhY2spO1xuLyoqKioqKi8gXHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRhZGREaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG4vKioqKioqLyBcdFx0XHRcdH0sXG4vKioqKioqLyBcdFx0XHRcdHJlbW92ZURpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgaWR4ID0gaG90Ll9kaXNwb3NlSGFuZGxlcnMuaW5kZXhPZihjYWxsYmFjayk7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBob3QuX2Rpc3Bvc2VIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbi8qKioqKiovIFx0XHRcdFx0fSxcbi8qKioqKiovIFx0XHRcdFx0aW52YWxpZGF0ZTogZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHRoaXMuX3NlbGZJbnZhbGlkYXRlZCA9IHRydWU7XG4vKioqKioqLyBcdFx0XHRcdFx0c3dpdGNoIChjdXJyZW50U3RhdHVzKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwiaWRsZVwiOlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyA9IFtdO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1ySVtrZXldKFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVyc1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRzZXRTdGF0dXMoXCJyZWFkeVwiKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwicmVhZHlcIjpcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5obXJJKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmhtcklba2V5XShcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFVwZGF0ZUFwcGx5SGFuZGxlcnNcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwicHJlcGFyZVwiOlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2FzZSBcImNoZWNrXCI6XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwiZGlzcG9zZVwiOlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2FzZSBcImFwcGx5XCI6XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdChxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMgPSBxdWV1ZWRJbnZhbGlkYXRlZE1vZHVsZXMgfHwgW10pLnB1c2goXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWRcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRkZWZhdWx0OlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHQvLyBpZ25vcmUgcmVxdWVzdHMgaW4gZXJyb3Igc3RhdGVzXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGJyZWFrO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0fSxcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0Ly8gTWFuYWdlbWVudCBBUElcbi8qKioqKiovIFx0XHRcdFx0Y2hlY2s6IGhvdENoZWNrLFxuLyoqKioqKi8gXHRcdFx0XHRhcHBseTogaG90QXBwbHksXG4vKioqKioqLyBcdFx0XHRcdHN0YXR1czogZnVuY3Rpb24gKGwpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoIWwpIHJldHVybiBjdXJyZW50U3RhdHVzO1xuLyoqKioqKi8gXHRcdFx0XHRcdHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuLyoqKioqKi8gXHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRhZGRTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbiAobCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuLyoqKioqKi8gXHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRyZW1vdmVTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbiAobCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBpZHggPSByZWdpc3RlcmVkU3RhdHVzSGFuZGxlcnMuaW5kZXhPZihsKTtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIHJlZ2lzdGVyZWRTdGF0dXNIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbi8qKioqKiovIFx0XHRcdFx0fSxcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0Ly8gaW5oZXJpdCBmcm9tIHByZXZpb3VzIGRpc3Bvc2UgY2FsbFxuLyoqKioqKi8gXHRcdFx0XHRkYXRhOiBjdXJyZW50TW9kdWxlRGF0YVttb2R1bGVJZF1cbi8qKioqKiovIFx0XHRcdH07XG4vKioqKioqLyBcdFx0XHRjdXJyZW50Q2hpbGRNb2R1bGUgPSB1bmRlZmluZWQ7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaG90O1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRmdW5jdGlvbiBzZXRTdGF0dXMobmV3U3RhdHVzKSB7XG4vKioqKioqLyBcdFx0XHRjdXJyZW50U3RhdHVzID0gbmV3U3RhdHVzO1xuLyoqKioqKi8gXHRcdFx0dmFyIHJlc3VsdHMgPSBbXTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzLmxlbmd0aDsgaSsrKVxuLyoqKioqKi8gXHRcdFx0XHRyZXN1bHRzW2ldID0gcmVnaXN0ZXJlZFN0YXR1c0hhbmRsZXJzW2ldLmNhbGwobnVsbCwgbmV3U3RhdHVzKTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRzKS50aGVuKGZ1bmN0aW9uICgpIHt9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0ZnVuY3Rpb24gdW5ibG9jaygpIHtcbi8qKioqKiovIFx0XHRcdGlmICgtLWJsb2NraW5nUHJvbWlzZXMgPT09IDApIHtcbi8qKioqKiovIFx0XHRcdFx0c2V0U3RhdHVzKFwicmVhZHlcIikudGhlbihmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKGJsb2NraW5nUHJvbWlzZXMgPT09IDApIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciBsaXN0ID0gYmxvY2tpbmdQcm9taXNlc1dhaXRpbmc7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRibG9ja2luZ1Byb21pc2VzV2FpdGluZyA9IFtdO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGxpc3RbaV0oKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRmdW5jdGlvbiB0cmFja0Jsb2NraW5nUHJvbWlzZShwcm9taXNlKSB7XG4vKioqKioqLyBcdFx0XHRzd2l0Y2ggKGN1cnJlbnRTdGF0dXMpIHtcbi8qKioqKiovIFx0XHRcdFx0Y2FzZSBcInJlYWR5XCI6XG4vKioqKioqLyBcdFx0XHRcdFx0c2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbi8qKioqKiovIFx0XHRcdFx0LyogZmFsbHRocm91Z2ggKi9cbi8qKioqKiovIFx0XHRcdFx0Y2FzZSBcInByZXBhcmVcIjpcbi8qKioqKiovIFx0XHRcdFx0XHRibG9ja2luZ1Byb21pc2VzKys7XG4vKioqKioqLyBcdFx0XHRcdFx0cHJvbWlzZS50aGVuKHVuYmxvY2ssIHVuYmxvY2spO1xuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBwcm9taXNlO1xuLyoqKioqKi8gXHRcdFx0XHRkZWZhdWx0OlxuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBwcm9taXNlO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRmdW5jdGlvbiB3YWl0Rm9yQmxvY2tpbmdQcm9taXNlcyhmbikge1xuLyoqKioqKi8gXHRcdFx0aWYgKGJsb2NraW5nUHJvbWlzZXMgPT09IDApIHJldHVybiBmbigpO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4vKioqKioqLyBcdFx0XHRcdGJsb2NraW5nUHJvbWlzZXNXYWl0aW5nLnB1c2goZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJlc29sdmUoZm4oKSk7XG4vKioqKioqLyBcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdGZ1bmN0aW9uIGhvdENoZWNrKGFwcGx5T25VcGRhdGUpIHtcbi8qKioqKiovIFx0XHRcdGlmIChjdXJyZW50U3RhdHVzICE9PSBcImlkbGVcIikge1xuLyoqKioqKi8gXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjaGVjaygpIGlzIG9ubHkgYWxsb3dlZCBpbiBpZGxlIHN0YXR1c1wiKTtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdHJldHVybiBzZXRTdGF0dXMoXCJjaGVja1wiKVxuLyoqKioqKi8gXHRcdFx0XHQudGhlbihfX3dlYnBhY2tfcmVxdWlyZV9fLmhtck0pXG4vKioqKioqLyBcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICh1cGRhdGUpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoIXVwZGF0ZSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmV0dXJuIHNldFN0YXR1cyhhcHBseUludmFsaWRhdGVkTW9kdWxlcygpID8gXCJyZWFkeVwiIDogXCJpZGxlXCIpLnRoZW4oXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uICgpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdFx0cmV0dXJuIHNldFN0YXR1cyhcInByZXBhcmVcIikudGhlbihmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR2YXIgdXBkYXRlZE1vZHVsZXMgPSBbXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzID0gW107XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uaG1yQykucmVkdWNlKGZ1bmN0aW9uIChcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRwcm9taXNlcyxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRrZXlcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0KSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJDW2tleV0oXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUuYyxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZS5yLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlLm0sXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRwcm9taXNlcyxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlZE1vZHVsZXNcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9taXNlcztcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0fSwgW10pXG4vKioqKioqLyBcdFx0XHRcdFx0XHQpLnRoZW4oZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRyZXR1cm4gd2FpdEZvckJsb2NraW5nUHJvbWlzZXMoZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdGlmIChhcHBseU9uVXBkYXRlKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW50ZXJuYWxBcHBseShhcHBseU9uVXBkYXRlKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNldFN0YXR1cyhcInJlYWR5XCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHVwZGF0ZWRNb2R1bGVzO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0ZnVuY3Rpb24gaG90QXBwbHkob3B0aW9ucykge1xuLyoqKioqKi8gXHRcdFx0aWYgKGN1cnJlbnRTdGF0dXMgIT09IFwicmVhZHlcIikge1xuLyoqKioqKi8gXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XCJhcHBseSgpIGlzIG9ubHkgYWxsb3dlZCBpbiByZWFkeSBzdGF0dXMgKHN0YXRlOiBcIiArXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGN1cnJlbnRTdGF0dXMgK1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcIilcIlxuLyoqKioqKi8gXHRcdFx0XHRcdCk7XG4vKioqKioqLyBcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGludGVybmFsQXBwbHkob3B0aW9ucyk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdGZ1bmN0aW9uIGludGVybmFsQXBwbHkob3B0aW9ucykge1xuLyoqKioqKi8gXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRhcHBseUludmFsaWRhdGVkTW9kdWxlcygpO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0dmFyIHJlc3VsdHMgPSBjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycy5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIGhhbmRsZXIob3B0aW9ucyk7XG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdGN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzID0gdW5kZWZpbmVkO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0dmFyIGVycm9ycyA9IHJlc3VsdHNcbi8qKioqKiovIFx0XHRcdFx0Lm1hcChmdW5jdGlvbiAocikge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiByLmVycm9yO1xuLyoqKioqKi8gXHRcdFx0XHR9KVxuLyoqKioqKi8gXHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0aWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4vKioqKioqLyBcdFx0XHRcdHJldHVybiBzZXRTdGF0dXMoXCJhYm9ydFwiKS50aGVuKGZ1bmN0aW9uICgpIHtcbi8qKioqKiovIFx0XHRcdFx0XHR0aHJvdyBlcnJvcnNbMF07XG4vKioqKioqLyBcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0Ly8gTm93IGluIFwiZGlzcG9zZVwiIHBoYXNlXG4vKioqKioqLyBcdFx0XHR2YXIgZGlzcG9zZVByb21pc2UgPSBzZXRTdGF0dXMoXCJkaXNwb3NlXCIpO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0cmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXN1bHQpIHtcbi8qKioqKiovIFx0XHRcdFx0aWYgKHJlc3VsdC5kaXNwb3NlKSByZXN1bHQuZGlzcG9zZSgpO1xuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHQvLyBOb3cgaW4gXCJhcHBseVwiIHBoYXNlXG4vKioqKioqLyBcdFx0XHR2YXIgYXBwbHlQcm9taXNlID0gc2V0U3RhdHVzKFwiYXBwbHlcIik7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHR2YXIgZXJyb3I7XG4vKioqKioqLyBcdFx0XHR2YXIgcmVwb3J0RXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyO1xuLyoqKioqKi8gXHRcdFx0fTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbXTtcbi8qKioqKiovIFx0XHRcdHJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAocmVzdWx0KSB7XG4vKioqKioqLyBcdFx0XHRcdGlmIChyZXN1bHQuYXBwbHkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgbW9kdWxlcyA9IHJlc3VsdC5hcHBseShyZXBvcnRFcnJvcik7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKG1vZHVsZXMpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaChtb2R1bGVzW2ldKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtkaXNwb3NlUHJvbWlzZSwgYXBwbHlQcm9taXNlXSkudGhlbihmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdC8vIGhhbmRsZSBlcnJvcnMgaW4gYWNjZXB0IGhhbmRsZXJzIGFuZCBzZWxmIGFjY2VwdGVkIG1vZHVsZSBsb2FkXG4vKioqKioqLyBcdFx0XHRcdGlmIChlcnJvcikge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBzZXRTdGF0dXMoXCJmYWlsXCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG4vKioqKioqLyBcdFx0XHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0aWYgKHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcykge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBpbnRlcm5hbEFwcGx5KG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKGxpc3QpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpZiAobGlzdC5pbmRleE9mKG1vZHVsZUlkKSA8IDApIGxpc3QucHVzaChtb2R1bGVJZCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHJldHVybiBsaXN0O1xuLyoqKioqKi8gXHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdHJldHVybiBzZXRTdGF0dXMoXCJpZGxlXCIpLnRoZW4oZnVuY3Rpb24gKCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBvdXRkYXRlZE1vZHVsZXM7XG4vKioqKioqLyBcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdGZ1bmN0aW9uIGFwcGx5SW52YWxpZGF0ZWRNb2R1bGVzKCkge1xuLyoqKioqKi8gXHRcdFx0aWYgKHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcykge1xuLyoqKioqKi8gXHRcdFx0XHRpZiAoIWN1cnJlbnRVcGRhdGVBcHBseUhhbmRsZXJzKSBjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVycyA9IFtdO1xuLyoqKioqKi8gXHRcdFx0XHRPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJJW2tleV0oXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlQXBwbHlIYW5kbGVyc1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XHRcdHF1ZXVlZEludmFsaWRhdGVkTW9kdWxlcyA9IHVuZGVmaW5lZDtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIHRydWU7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9KSgpO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGggKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9fbmV4dC9cIjtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9yZWFjdCByZWZyZXNoICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18uaSkge1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uaS5wdXNoKChvcHRpb25zKSA9PiB7XG4vKioqKioqLyBcdFx0XHRjb25zdCBvcmlnaW5hbEZhY3RvcnkgPSBvcHRpb25zLmZhY3Rvcnk7XG4vKioqKioqLyBcdFx0XHRvcHRpb25zLmZhY3RvcnkgPSAobW9kdWxlT2JqZWN0LCBtb2R1bGVFeHBvcnRzLCB3ZWJwYWNrUmVxdWlyZSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0XHRjb25zdCBoYXNSZWZyZXNoID0gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgISFzZWxmLiRSZWZyZXNoSW50ZXJjZXB0TW9kdWxlRXhlY3V0aW9uJDtcbi8qKioqKiovIFx0XHRcdFx0Y29uc3QgY2xlYW51cCA9IGhhc1JlZnJlc2ggPyBzZWxmLiRSZWZyZXNoSW50ZXJjZXB0TW9kdWxlRXhlY3V0aW9uJChtb2R1bGVPYmplY3QuaWQpIDogKCkgPT4ge307XG4vKioqKioqLyBcdFx0XHRcdHRyeSB7XG4vKioqKioqLyBcdFx0XHRcdFx0b3JpZ2luYWxGYWN0b3J5LmNhbGwodGhpcywgbW9kdWxlT2JqZWN0LCBtb2R1bGVFeHBvcnRzLCB3ZWJwYWNrUmVxdWlyZSk7XG4vKioqKioqLyBcdFx0XHRcdH0gZmluYWxseSB7XG4vKioqKioqLyBcdFx0XHRcdFx0Y2xlYW51cCgpO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fSlcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvY29tcGF0ICovXG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gbm9vcCBmbnMgdG8gcHJldmVudCBydW50aW1lIGVycm9ycyBkdXJpbmcgaW5pdGlhbGl6YXRpb25cbi8qKioqKiovIFx0aWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKSB7XG4vKioqKioqLyBcdFx0c2VsZi4kUmVmcmVzaFJlZyQgPSBmdW5jdGlvbiAoKSB7fTtcbi8qKioqKiovIFx0XHRzZWxmLiRSZWZyZXNoU2lnJCA9IGZ1bmN0aW9uICgpIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBmdW5jdGlvbiAodHlwZSkge1xuLyoqKioqKi8gXHRcdFx0XHRyZXR1cm4gdHlwZTtcbi8qKioqKiovIFx0XHRcdH07XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2NzcyBsb2FkaW5nICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0dmFyIGNyZWF0ZVN0eWxlc2hlZXQgPSAoY2h1bmtJZCwgZnVsbGhyZWYsIHJlc29sdmUsIHJlamVjdCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0dmFyIGxpbmtUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdGxpbmtUYWcucmVsID0gXCJzdHlsZXNoZWV0XCI7XG4vKioqKioqLyBcdFx0XHRsaW5rVGFnLnR5cGUgPSBcInRleHQvY3NzXCI7XG4vKioqKioqLyBcdFx0XHR2YXIgb25MaW5rQ29tcGxldGUgPSAoZXZlbnQpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0Ly8gYXZvaWQgbWVtIGxlYWtzLlxuLyoqKioqKi8gXHRcdFx0XHRsaW5rVGFnLm9uZXJyb3IgPSBsaW5rVGFnLm9ubG9hZCA9IG51bGw7XG4vKioqKioqLyBcdFx0XHRcdGlmIChldmVudC50eXBlID09PSAnbG9hZCcpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRyZXNvbHZlKCk7XG4vKioqKioqLyBcdFx0XHRcdH0gZWxzZSB7XG4vKioqKioqLyBcdFx0XHRcdFx0dmFyIGVycm9yVHlwZSA9IGV2ZW50ICYmIChldmVudC50eXBlID09PSAnbG9hZCcgPyAnbWlzc2luZycgOiBldmVudC50eXBlKTtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgcmVhbEhyZWYgPSBldmVudCAmJiBldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmhyZWYgfHwgZnVsbGhyZWY7XG4vKioqKioqLyBcdFx0XHRcdFx0dmFyIGVyciA9IG5ldyBFcnJvcihcIkxvYWRpbmcgQ1NTIGNodW5rIFwiICsgY2h1bmtJZCArIFwiIGZhaWxlZC5cXG4oXCIgKyByZWFsSHJlZiArIFwiKVwiKTtcbi8qKioqKiovIFx0XHRcdFx0XHRlcnIuY29kZSA9IFwiQ1NTX0NIVU5LX0xPQURfRkFJTEVEXCI7XG4vKioqKioqLyBcdFx0XHRcdFx0ZXJyLnR5cGUgPSBlcnJvclR5cGU7XG4vKioqKioqLyBcdFx0XHRcdFx0ZXJyLnJlcXVlc3QgPSByZWFsSHJlZjtcbi8qKioqKiovIFx0XHRcdFx0XHRsaW5rVGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGlua1RhZylcbi8qKioqKiovIFx0XHRcdFx0XHRyZWplY3QoZXJyKTtcbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0bGlua1RhZy5vbmVycm9yID0gbGlua1RhZy5vbmxvYWQgPSBvbkxpbmtDb21wbGV0ZTtcbi8qKioqKiovIFx0XHRcdGxpbmtUYWcuaHJlZiA9IGZ1bGxocmVmO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0KGZ1bmN0aW9uKGxpbmtUYWcpIHtcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF9OX0VfU1RZTEVfTE9BRCA9PT0gJ2Z1bmN0aW9uJykge1xuLyoqKioqKi8gXHRcdFx0ICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGhyZWYsIG9ubG9hZCwgb25lcnJvciB9ID0gbGlua1RhZztcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgX05fRV9TVFlMRV9MT0FEKGhyZWYuaW5kZXhPZih3aW5kb3cubG9jYXRpb24ub3JpZ2luKSA9PT0gMCA/IG5ldyBVUkwoaHJlZikucGF0aG5hbWUgOiBocmVmKS50aGVuKCgpPT5vbmxvYWQgPT0gbnVsbCA/IHZvaWQgMCA6IG9ubG9hZC5jYWxsKGxpbmtUYWcsIHtcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbG9hZCdcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAoKT0+b25lcnJvciA9PSBudWxsID8gdm9pZCAwIDogb25lcnJvci5jYWxsKGxpbmtUYWcsIHt9KSk7XG4vKioqKioqLyBcdFx0XHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rVGFnKTtcbi8qKioqKiovIFx0XHRcdCAgICAgICAgICAgICAgICB9XG4vKioqKioqLyBcdFx0XHQgICAgICAgICAgICB9KShsaW5rVGFnKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGxpbmtUYWc7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XHR2YXIgZmluZFN0eWxlc2hlZXQgPSAoaHJlZiwgZnVsbGhyZWYpID0+IHtcbi8qKioqKiovIFx0XHRcdHZhciBleGlzdGluZ0xpbmtUYWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJsaW5rXCIpO1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGV4aXN0aW5nTGlua1RhZ3MubGVuZ3RoOyBpKyspIHtcbi8qKioqKiovIFx0XHRcdFx0dmFyIHRhZyA9IGV4aXN0aW5nTGlua1RhZ3NbaV07XG4vKioqKioqLyBcdFx0XHRcdHZhciBkYXRhSHJlZiA9IHRhZy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhyZWZcIikgfHwgdGFnLmdldEF0dHJpYnV0ZShcImhyZWZcIik7XG4vKioqKioqLyBcdFx0XHRcdGlmKHRhZy5yZWwgPT09IFwic3R5bGVzaGVldFwiICYmIChkYXRhSHJlZiA9PT0gaHJlZiB8fCBkYXRhSHJlZiA9PT0gZnVsbGhyZWYpKSByZXR1cm4gdGFnO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0dmFyIGV4aXN0aW5nU3R5bGVUYWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzdHlsZVwiKTtcbi8qKioqKiovIFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBleGlzdGluZ1N0eWxlVGFncy5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgdGFnID0gZXhpc3RpbmdTdHlsZVRhZ3NbaV07XG4vKioqKioqLyBcdFx0XHRcdHZhciBkYXRhSHJlZiA9IHRhZy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhyZWZcIik7XG4vKioqKioqLyBcdFx0XHRcdGlmKGRhdGFIcmVmID09PSBocmVmIHx8IGRhdGFIcmVmID09PSBmdWxsaHJlZikgcmV0dXJuIHRhZztcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdHZhciBsb2FkU3R5bGVzaGVldCA9IChjaHVua0lkKSA9PiB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgaHJlZiA9IF9fd2VicGFja19yZXF1aXJlX18ubWluaUNzc0YoY2h1bmtJZCk7XG4vKioqKioqLyBcdFx0XHRcdHZhciBmdWxsaHJlZiA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIGhyZWY7XG4vKioqKioqLyBcdFx0XHRcdGlmKGZpbmRTdHlsZXNoZWV0KGhyZWYsIGZ1bGxocmVmKSkgcmV0dXJuIHJlc29sdmUoKTtcbi8qKioqKiovIFx0XHRcdFx0Y3JlYXRlU3R5bGVzaGVldChjaHVua0lkLCBmdWxsaHJlZiwgcmVzb2x2ZSwgcmVqZWN0KTtcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBubyBjaHVuayBsb2FkaW5nXG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0dmFyIG9sZFRhZ3MgPSBbXTtcbi8qKioqKiovIFx0XHR2YXIgbmV3VGFncyA9IFtdO1xuLyoqKioqKi8gXHRcdHZhciBhcHBseUhhbmRsZXIgPSAob3B0aW9ucykgPT4ge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIHsgZGlzcG9zZTogKCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgb2xkVGFncy5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBvbGRUYWcgPSBvbGRUYWdzW2ldO1xuLyoqKioqKi8gXHRcdFx0XHRcdGlmKG9sZFRhZy5wYXJlbnROb2RlKSBvbGRUYWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRUYWcpO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdG9sZFRhZ3MubGVuZ3RoID0gMDtcbi8qKioqKiovIFx0XHRcdH0sIGFwcGx5OiAoKSA9PiB7XG4vKioqKioqLyBcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBuZXdUYWdzLmxlbmd0aDsgaSsrKSBuZXdUYWdzW2ldLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuLyoqKioqKi8gXHRcdFx0XHRuZXdUYWdzLmxlbmd0aCA9IDA7XG4vKioqKioqLyBcdFx0XHR9IH07XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1yQy5taW5pQ3NzID0gKGNodW5rSWRzLCByZW1vdmVkQ2h1bmtzLCByZW1vdmVkTW9kdWxlcywgcHJvbWlzZXMsIGFwcGx5SGFuZGxlcnMsIHVwZGF0ZWRNb2R1bGVzTGlzdCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0YXBwbHlIYW5kbGVycy5wdXNoKGFwcGx5SGFuZGxlcik7XG4vKioqKioqLyBcdFx0XHRjaHVua0lkcy5mb3JFYWNoKChjaHVua0lkKSA9PiB7XG4vKioqKioqLyBcdFx0XHRcdHZhciBocmVmID0gX193ZWJwYWNrX3JlcXVpcmVfXy5taW5pQ3NzRihjaHVua0lkKTtcbi8qKioqKiovIFx0XHRcdFx0dmFyIGZ1bGxocmVmID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgaHJlZjtcbi8qKioqKiovIFx0XHRcdFx0dmFyIG9sZFRhZyA9IGZpbmRTdHlsZXNoZWV0KGhyZWYsIGZ1bGxocmVmKTtcbi8qKioqKiovIFx0XHRcdFx0aWYoIW9sZFRhZykgcmV0dXJuO1xuLyoqKioqKi8gXHRcdFx0XHRwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgdGFnID0gY3JlYXRlU3R5bGVzaGVldChjaHVua0lkLCBmdWxsaHJlZiwgKCkgPT4ge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0dGFnLmFzID0gXCJzdHlsZVwiO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0dGFnLnJlbCA9IFwicHJlbG9hZFwiO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuLyoqKioqKi8gXHRcdFx0XHRcdH0sIHJlamVjdCk7XG4vKioqKioqLyBcdFx0XHRcdFx0b2xkVGFncy5wdXNoKG9sZFRhZyk7XG4vKioqKioqLyBcdFx0XHRcdFx0bmV3VGFncy5wdXNoKHRhZyk7XG4vKioqKioqLyBcdFx0XHRcdH0pKTtcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9qc29ucCBjaHVuayBsb2FkaW5nICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gbm8gYmFzZVVSSVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vKioqKioqLyBcdFx0Ly8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vKioqKioqLyBcdFx0Ly8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG4vKioqKioqLyBcdFx0dmFyIGluc3RhbGxlZENodW5rcyA9IF9fd2VicGFja19yZXF1aXJlX18uaG1yU19qc29ucCA9IF9fd2VicGFja19yZXF1aXJlX18uaG1yU19qc29ucCB8fCB7XG4vKioqKioqLyBcdFx0XHRcIndlYnBhY2tcIjogMFxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mLmogPSAoY2h1bmtJZCwgcHJvbWlzZXMpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0Ly8gSlNPTlAgY2h1bmsgbG9hZGluZyBmb3IgamF2YXNjcmlwdFxuLyoqKioqKi8gXHRcdFx0XHR2YXIgaW5zdGFsbGVkQ2h1bmtEYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXy5vKGluc3RhbGxlZENodW5rcywgY2h1bmtJZCkgPyBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gOiB1bmRlZmluZWQ7XG4vKioqKioqLyBcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rRGF0YSAhPT0gMCkgeyAvLyAwIG1lYW5zIFwiYWxyZWFkeSBpbnN0YWxsZWRcIi5cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHQvLyBhIFByb21pc2UgbWVhbnMgXCJjdXJyZW50bHkgbG9hZGluZ1wiLlxuLyoqKioqKi8gXHRcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rRGF0YSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cHJvbWlzZXMucHVzaChpbnN0YWxsZWRDaHVua0RhdGFbMl0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdH0gZWxzZSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRpZihcIndlYnBhY2tcIiAhPSBjaHVua0lkKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdC8vIHNldHVwIFByb21pc2UgaW4gY2h1bmsgY2FjaGVcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiAoaW5zdGFsbGVkQ2h1bmtEYXRhID0gaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gW3Jlc29sdmUsIHJlamVjdF0pKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0cHJvbWlzZXMucHVzaChpbnN0YWxsZWRDaHVua0RhdGFbMl0gPSBwcm9taXNlKTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0Ly8gc3RhcnQgY2h1bmsgbG9hZGluZ1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR2YXIgdXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy51KGNodW5rSWQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHQvLyBjcmVhdGUgZXJyb3IgYmVmb3JlIHN0YWNrIHVud291bmQgdG8gZ2V0IHVzZWZ1bCBzdGFja3RyYWNlIGxhdGVyXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdHZhciBlcnJvciA9IG5ldyBFcnJvcigpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR2YXIgbG9hZGluZ0VuZGVkID0gKGV2ZW50KSA9PiB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGluc3RhbGxlZENodW5rcywgY2h1bmtJZCkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGluc3RhbGxlZENodW5rRGF0YSA9IGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rRGF0YSAhPT0gMCkgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gdW5kZWZpbmVkO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW5zdGFsbGVkQ2h1bmtEYXRhKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvclR5cGUgPSBldmVudCAmJiAoZXZlbnQudHlwZSA9PT0gJ2xvYWQnID8gJ21pc3NpbmcnIDogZXZlbnQudHlwZSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZWFsU3JjID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5zcmM7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yLm1lc3NhZ2UgPSAnTG9hZGluZyBjaHVuayAnICsgY2h1bmtJZCArICcgZmFpbGVkLlxcbignICsgZXJyb3JUeXBlICsgJzogJyArIHJlYWxTcmMgKyAnKSc7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yLm5hbWUgPSAnQ2h1bmtMb2FkRXJyb3InO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvci50eXBlID0gZXJyb3JUeXBlO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvci5yZXF1ZXN0ID0gcmVhbFNyYztcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5zdGFsbGVkQ2h1bmtEYXRhWzFdKGVycm9yKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdH07XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubCh1cmwsIGxvYWRpbmdFbmRlZCwgXCJjaHVuay1cIiArIGNodW5rSWQsIGNodW5rSWQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0fSBlbHNlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IDA7XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHQvLyBubyBwcmVmZXRjaGluZ1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIG5vIHByZWxvYWRlZFxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50VXBkYXRlZE1vZHVsZXNMaXN0O1xuLyoqKioqKi8gXHRcdHZhciB3YWl0aW5nVXBkYXRlUmVzb2x2ZXMgPSB7fTtcbi8qKioqKiovIFx0XHRmdW5jdGlvbiBsb2FkVXBkYXRlQ2h1bmsoY2h1bmtJZCwgdXBkYXRlZE1vZHVsZXNMaXN0KSB7XG4vKioqKioqLyBcdFx0XHRjdXJyZW50VXBkYXRlZE1vZHVsZXNMaXN0ID0gdXBkYXRlZE1vZHVsZXNMaXN0O1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0d2FpdGluZ1VwZGF0ZVJlc29sdmVzW2NodW5rSWRdID0gcmVzb2x2ZTtcbi8qKioqKiovIFx0XHRcdFx0Ly8gc3RhcnQgdXBkYXRlIGNodW5rIGxvYWRpbmdcbi8qKioqKiovIFx0XHRcdFx0dmFyIHVybCA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIF9fd2VicGFja19yZXF1aXJlX18uaHUoY2h1bmtJZCk7XG4vKioqKioqLyBcdFx0XHRcdC8vIGNyZWF0ZSBlcnJvciBiZWZvcmUgc3RhY2sgdW53b3VuZCB0byBnZXQgdXNlZnVsIHN0YWNrdHJhY2UgbGF0ZXJcbi8qKioqKiovIFx0XHRcdFx0dmFyIGVycm9yID0gbmV3IEVycm9yKCk7XG4vKioqKioqLyBcdFx0XHRcdHZhciBsb2FkaW5nRW5kZWQgPSAoZXZlbnQpID0+IHtcbi8qKioqKiovIFx0XHRcdFx0XHRpZih3YWl0aW5nVXBkYXRlUmVzb2x2ZXNbY2h1bmtJZF0pIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSA9IHVuZGVmaW5lZFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0dmFyIGVycm9yVHlwZSA9IGV2ZW50ICYmIChldmVudC50eXBlID09PSAnbG9hZCcgPyAnbWlzc2luZycgOiBldmVudC50eXBlKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciByZWFsU3JjID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5zcmM7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRlcnJvci5tZXNzYWdlID0gJ0xvYWRpbmcgaG90IHVwZGF0ZSBjaHVuayAnICsgY2h1bmtJZCArICcgZmFpbGVkLlxcbignICsgZXJyb3JUeXBlICsgJzogJyArIHJlYWxTcmMgKyAnKSc7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRlcnJvci5uYW1lID0gJ0NodW5rTG9hZEVycm9yJztcbi8qKioqKiovIFx0XHRcdFx0XHRcdGVycm9yLnR5cGUgPSBlcnJvclR5cGU7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRlcnJvci5yZXF1ZXN0ID0gcmVhbFNyYztcbi8qKioqKiovIFx0XHRcdFx0XHRcdHJlamVjdChlcnJvcik7XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmwodXJsLCBsb2FkaW5nRW5kZWQpO1xuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdHNlbGZbXCJ3ZWJwYWNrSG90VXBkYXRlX05fRVwiXSA9IChjaHVua0lkLCBtb3JlTW9kdWxlcywgcnVudGltZSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVbbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHRcdGlmKGN1cnJlbnRVcGRhdGVkTW9kdWxlc0xpc3QpIGN1cnJlbnRVcGRhdGVkTW9kdWxlc0xpc3QucHVzaChtb2R1bGVJZCk7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdGlmKHJ1bnRpbWUpIGN1cnJlbnRVcGRhdGVSdW50aW1lLnB1c2gocnVudGltZSk7XG4vKioqKioqLyBcdFx0XHRpZih3YWl0aW5nVXBkYXRlUmVzb2x2ZXNbY2h1bmtJZF0pIHtcbi8qKioqKiovIFx0XHRcdFx0d2FpdGluZ1VwZGF0ZVJlc29sdmVzW2NodW5rSWRdKCk7XG4vKioqKioqLyBcdFx0XHRcdHdhaXRpbmdVcGRhdGVSZXNvbHZlc1tjaHVua0lkXSA9IHVuZGVmaW5lZDtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50VXBkYXRlQ2h1bmtzO1xuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50VXBkYXRlO1xuLyoqKioqKi8gXHRcdHZhciBjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcztcbi8qKioqKiovIFx0XHR2YXIgY3VycmVudFVwZGF0ZVJ1bnRpbWU7XG4vKioqKioqLyBcdFx0ZnVuY3Rpb24gYXBwbHlIYW5kbGVyKG9wdGlvbnMpIHtcbi8qKioqKiovIFx0XHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmYpIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmYuanNvbnBIbXI7XG4vKioqKioqLyBcdFx0XHRjdXJyZW50VXBkYXRlQ2h1bmtzID0gdW5kZWZpbmVkO1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0QWZmZWN0ZWRNb2R1bGVFZmZlY3RzKHVwZGF0ZU1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgb3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSB7fTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLm1hcChmdW5jdGlvbiAoaWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRyZXR1cm4ge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2hhaW46IFtpZF0sXG4vKioqKioqLyBcdFx0XHRcdFx0XHRpZDogaWRcbi8qKioqKiovIFx0XHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgcXVldWVJdGVtID0gcXVldWUucG9wKCk7XG4vKioqKioqLyBcdFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWVJdGVtLmlkO1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBjaGFpbiA9IHF1ZXVlSXRlbS5jaGFpbjtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoXG4vKioqKioqLyBcdFx0XHRcdFx0XHQhbW9kdWxlIHx8XG4vKioqKioqLyBcdFx0XHRcdFx0XHQobW9kdWxlLmhvdC5fc2VsZkFjY2VwdGVkICYmICFtb2R1bGUuaG90Ll9zZWxmSW52YWxpZGF0ZWQpXG4vKioqKioqLyBcdFx0XHRcdFx0KVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y29udGludWU7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKG1vZHVsZS5ob3QuX3NlbGZEZWNsaW5lZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWRlY2xpbmVkXCIsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG4vKioqKioqLyBcdFx0XHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRpZiAobW9kdWxlLmhvdC5fbWFpbikge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJ1bmFjY2VwdGVkXCIsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG4vKioqKioqLyBcdFx0XHRcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZS5wYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR2YXIgcGFyZW50SWQgPSBtb2R1bGUucGFyZW50c1tpXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciBwYXJlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbcGFyZW50SWRdO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYgKCFwYXJlbnQpIGNvbnRpbnVlO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYgKHBhcmVudC5ob3QuX2RlY2xpbmVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGVjbGluZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4uY29uY2F0KFtwYXJlbnRJZF0pLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRwYXJlbnRJZDogcGFyZW50SWRcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0fTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRcdGlmIChvdXRkYXRlZE1vZHVsZXMuaW5kZXhPZihwYXJlbnRJZCkgIT09IC0xKSBjb250aW51ZTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGlmIChwYXJlbnQuaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKCFvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0pXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbcGFyZW50SWRdID0gW107XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSwgW21vZHVsZUlkXSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5wdXNoKHBhcmVudElkKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goe1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4uY29uY2F0KFtwYXJlbnRJZF0pLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpZDogcGFyZW50SWRcbi8qKioqKiovIFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRyZXR1cm4ge1xuLyoqKioqKi8gXHRcdFx0XHRcdHR5cGU6IFwiYWNjZXB0ZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRtb2R1bGVJZDogdXBkYXRlTW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzOiBvdXRkYXRlZE1vZHVsZXMsXG4vKioqKioqLyBcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXM6IG91dGRhdGVkRGVwZW5kZW5jaWVzXG4vKioqKioqLyBcdFx0XHRcdH07XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBhZGRBbGxUb1NldChhLCBiKSB7XG4vKioqKioqLyBcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBpdGVtID0gYltpXTtcbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoYS5pbmRleE9mKGl0ZW0pID09PSAtMSkgYS5wdXNoKGl0ZW0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHQvLyBhdCBiZWdpbiBhbGwgdXBkYXRlcyBtb2R1bGVzIGFyZSBvdXRkYXRlZFxuLyoqKioqKi8gXHRcdFx0Ly8gdGhlIFwib3V0ZGF0ZWRcIiBzdGF0dXMgY2FuIHByb3BhZ2F0ZSB0byBwYXJlbnRzIGlmIHRoZXkgZG9uJ3QgYWNjZXB0IHRoZSBjaGlsZHJlblxuLyoqKioqKi8gXHRcdFx0dmFyIG91dGRhdGVkRGVwZW5kZW5jaWVzID0ge307XG4vKioqKioqLyBcdFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW107XG4vKioqKioqLyBcdFx0XHR2YXIgYXBwbGllZFVwZGF0ZSA9IHt9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0dmFyIHdhcm5VbmV4cGVjdGVkUmVxdWlyZSA9IGZ1bmN0aW9uIHdhcm5VbmV4cGVjdGVkUmVxdWlyZShtb2R1bGUpIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uc29sZS53YXJuKFxuLyoqKioqKi8gXHRcdFx0XHRcdFwiW0hNUl0gdW5leHBlY3RlZCByZXF1aXJlKFwiICsgbW9kdWxlLmlkICsgXCIpIHRvIGRpc3Bvc2VkIG1vZHVsZVwiXG4vKioqKioqLyBcdFx0XHRcdCk7XG4vKioqKioqLyBcdFx0XHR9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0Zm9yICh2YXIgbW9kdWxlSWQgaW4gY3VycmVudFVwZGF0ZSkge1xuLyoqKioqKi8gXHRcdFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGN1cnJlbnRVcGRhdGUsIG1vZHVsZUlkKSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBuZXdNb2R1bGVGYWN0b3J5ID0gY3VycmVudFVwZGF0ZVttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XHRcdFx0LyoqIEB0eXBlIHtUT0RPfSAqL1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciByZXN1bHQgPSBuZXdNb2R1bGVGYWN0b3J5XG4vKioqKioqLyBcdFx0XHRcdFx0XHQ/IGdldEFmZmVjdGVkTW9kdWxlRWZmZWN0cyhtb2R1bGVJZClcbi8qKioqKiovIFx0XHRcdFx0XHRcdDoge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGlzcG9zZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0fTtcbi8qKioqKiovIFx0XHRcdFx0XHQvKiogQHR5cGUge0Vycm9yfGZhbHNlfSAqL1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBhYm9ydEVycm9yID0gZmFsc2U7XG4vKioqKioqLyBcdFx0XHRcdFx0dmFyIGRvQXBwbHkgPSBmYWxzZTtcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgZG9EaXNwb3NlID0gZmFsc2U7XG4vKioqKioqLyBcdFx0XHRcdFx0dmFyIGNoYWluSW5mbyA9IFwiXCI7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYgKHJlc3VsdC5jaGFpbikge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2hhaW5JbmZvID0gXCJcXG5VcGRhdGUgcHJvcGFnYXRpb246IFwiICsgcmVzdWx0LmNoYWluLmpvaW4oXCIgLT4gXCIpO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRzd2l0Y2ggKHJlc3VsdC50eXBlKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwic2VsZi1kZWNsaW5lZFwiOlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBzZWxmIGRlY2xpbmU6IFwiICtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm1vZHVsZUlkICtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwiZGVjbGluZWRcIjpcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EZWNsaW5lZCkgb3B0aW9ucy5vbkRlY2xpbmVkKHJlc3VsdCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2Ugb2YgZGVjbGluZWQgZGVwZW5kZW5jeTogXCIgK1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQubW9kdWxlSWQgK1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcIiBpbiBcIiArXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5wYXJlbnRJZCArXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGNoYWluSW5mb1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGJyZWFrO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Y2FzZSBcInVuYWNjZXB0ZWRcIjpcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25VbmFjY2VwdGVkKSBvcHRpb25zLm9uVW5hY2NlcHRlZChyZXN1bHQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlVW5hY2NlcHRlZClcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2UgXCIgKyBtb2R1bGVJZCArIFwiIGlzIG5vdCBhY2NlcHRlZFwiICsgY2hhaW5JbmZvXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRjYXNlIFwiYWNjZXB0ZWRcIjpcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25BY2NlcHRlZCkgb3B0aW9ucy5vbkFjY2VwdGVkKHJlc3VsdCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGRvQXBwbHkgPSB0cnVlO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRicmVhaztcbi8qKioqKiovIFx0XHRcdFx0XHRcdGNhc2UgXCJkaXNwb3NlZFwiOlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRpc3Bvc2VkKSBvcHRpb25zLm9uRGlzcG9zZWQocmVzdWx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0ZG9EaXNwb3NlID0gdHJ1ZTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0YnJlYWs7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRkZWZhdWx0OlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4Y2VwdGlvbiB0eXBlIFwiICsgcmVzdWx0LnR5cGUpO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoYWJvcnRFcnJvcikge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmV0dXJuIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGFib3J0RXJyb3Jcbi8qKioqKiovIFx0XHRcdFx0XHRcdH07XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdGlmIChkb0FwcGx5KSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IG5ld01vZHVsZUZhY3Rvcnk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIHJlc3VsdC5vdXRkYXRlZE1vZHVsZXMpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0Zm9yIChtb2R1bGVJZCBpbiByZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXMsIG1vZHVsZUlkKSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdID0gW107XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0YWRkQWxsVG9TZXQoXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0sXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRpZiAoZG9EaXNwb3NlKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIFtyZXN1bHQubW9kdWxlSWRdKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdID0gd2FyblVuZXhwZWN0ZWRSZXF1aXJlO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0Y3VycmVudFVwZGF0ZSA9IHVuZGVmaW5lZDtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdC8vIFN0b3JlIHNlbGYgYWNjZXB0ZWQgb3V0ZGF0ZWQgbW9kdWxlcyB0byByZXF1aXJlIHRoZW0gbGF0ZXIgYnkgdGhlIG1vZHVsZSBzeXN0ZW1cbi8qKioqKiovIFx0XHRcdHZhciBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMgPSBbXTtcbi8qKioqKiovIFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgb3V0ZGF0ZWRNb2R1bGVzLmxlbmd0aDsgaisrKSB7XG4vKioqKioqLyBcdFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZUlkID0gb3V0ZGF0ZWRNb2R1bGVzW2pdO1xuLyoqKioqKi8gXHRcdFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5jW291dGRhdGVkTW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHRpZiAoXG4vKioqKioqLyBcdFx0XHRcdFx0bW9kdWxlICYmXG4vKioqKioqLyBcdFx0XHRcdFx0KG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZCB8fCBtb2R1bGUuaG90Ll9tYWluKSAmJlxuLyoqKioqKi8gXHRcdFx0XHRcdC8vIHJlbW92ZWQgc2VsZi1hY2NlcHRlZCBtb2R1bGVzIHNob3VsZCBub3QgYmUgcmVxdWlyZWRcbi8qKioqKiovIFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW291dGRhdGVkTW9kdWxlSWRdICE9PSB3YXJuVW5leHBlY3RlZFJlcXVpcmUgJiZcbi8qKioqKiovIFx0XHRcdFx0XHQvLyB3aGVuIGNhbGxlZCBpbnZhbGlkYXRlIHNlbGYtYWNjZXB0aW5nIGlzIG5vdCBwb3NzaWJsZVxuLyoqKioqKi8gXHRcdFx0XHRcdCFtb2R1bGUuaG90Ll9zZWxmSW52YWxpZGF0ZWRcbi8qKioqKiovIFx0XHRcdFx0KSB7XG4vKioqKioqLyBcdFx0XHRcdFx0b3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzLnB1c2goe1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0bW9kdWxlOiBvdXRkYXRlZE1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0cmVxdWlyZTogbW9kdWxlLmhvdC5fcmVxdWlyZVNlbGYsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRlcnJvckhhbmRsZXI6IG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZFxuLyoqKioqKi8gXHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHR2YXIgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXM7XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRyZXR1cm4ge1xuLyoqKioqKi8gXHRcdFx0XHRkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0Y3VycmVudFVwZGF0ZVJlbW92ZWRDaHVua3MuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmtJZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0ZGVsZXRlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbi8qKioqKiovIFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRjdXJyZW50VXBkYXRlUmVtb3ZlZENodW5rcyA9IHVuZGVmaW5lZDtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgaWR4O1xuLyoqKioqKi8gXHRcdFx0XHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpO1xuLyoqKioqKi8gXHRcdFx0XHRcdHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR2YXIgbW9kdWxlSWQgPSBxdWV1ZS5wb3AoKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYgKCFtb2R1bGUpIGNvbnRpbnVlO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0dmFyIGRhdGEgPSB7fTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHRcdC8vIENhbGwgZGlzcG9zZSBoYW5kbGVyc1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0dmFyIGRpc3Bvc2VIYW5kbGVycyA9IG1vZHVsZS5ob3QuX2Rpc3Bvc2VIYW5kbGVycztcbi8qKioqKiovIFx0XHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBkaXNwb3NlSGFuZGxlcnMubGVuZ3RoOyBqKyspIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0ZGlzcG9zZUhhbmRsZXJzW2pdLmNhbGwobnVsbCwgZGF0YSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmhtckRbbW9kdWxlSWRdID0gZGF0YTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHRcdC8vIGRpc2FibGUgbW9kdWxlICh0aGlzIGRpc2FibGVzIHJlcXVpcmVzIGZyb20gdGhpcyBtb2R1bGUpXG4vKioqKioqLyBcdFx0XHRcdFx0XHRtb2R1bGUuaG90LmFjdGl2ZSA9IGZhbHNlO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIG1vZHVsZSBmcm9tIGNhY2hlXG4vKioqKioqLyBcdFx0XHRcdFx0XHRkZWxldGUgX193ZWJwYWNrX3JlcXVpcmVfXy5jW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHRcdC8vIHdoZW4gZGlzcG9zaW5nIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCBkaXNwb3NlIGhhbmRsZXJcbi8qKioqKiovIFx0XHRcdFx0XHRcdGRlbGV0ZSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdFx0XHQvLyByZW1vdmUgXCJwYXJlbnRzXCIgcmVmZXJlbmNlcyBmcm9tIGFsbCBjaGlsZHJlblxuLyoqKioqKi8gXHRcdFx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IG1vZHVsZS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR2YXIgY2hpbGQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbbW9kdWxlLmNoaWxkcmVuW2pdXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlkeCA9IGNoaWxkLnBhcmVudHMuaW5kZXhPZihtb2R1bGVJZCk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlmIChpZHggPj0gMCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XG4vKioqKioqLyBcdFx0XHRcdFx0Ly8gcmVtb3ZlIG91dGRhdGVkIGRlcGVuZGVuY3kgZnJvbSBtb2R1bGUgY2hpbGRyZW5cbi8qKioqKiovIFx0XHRcdFx0XHR2YXIgZGVwZW5kZW5jeTtcbi8qKioqKiovIFx0XHRcdFx0XHRmb3IgKHZhciBvdXRkYXRlZE1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG91dGRhdGVkRGVwZW5kZW5jaWVzLCBvdXRkYXRlZE1vZHVsZUlkKSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbb3V0ZGF0ZWRNb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlmIChtb2R1bGUpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1tvdXRkYXRlZE1vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRmb3IgKGogPSAwOyBqIDwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMubGVuZ3RoOyBqKyspIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGlkeCA9IG1vZHVsZS5jaGlsZHJlbi5pbmRleE9mKGRlcGVuZGVuY3kpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBtb2R1bGUuY2hpbGRyZW4uc3BsaWNlKGlkeCwgMSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9LFxuLyoqKioqKi8gXHRcdFx0XHRhcHBseTogZnVuY3Rpb24gKHJlcG9ydEVycm9yKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0Ly8gaW5zZXJ0IG5ldyBjb2RlXG4vKioqKioqLyBcdFx0XHRcdFx0Zm9yICh2YXIgdXBkYXRlTW9kdWxlSWQgaW4gYXBwbGllZFVwZGF0ZSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0aWYgKF9fd2VicGFja19yZXF1aXJlX18ubyhhcHBsaWVkVXBkYXRlLCB1cGRhdGVNb2R1bGVJZCkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tW3VwZGF0ZU1vZHVsZUlkXSA9IGFwcGxpZWRVcGRhdGVbdXBkYXRlTW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHQvLyBydW4gbmV3IHJ1bnRpbWUgbW9kdWxlc1xuLyoqKioqKi8gXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY3VycmVudFVwZGF0ZVJ1bnRpbWUubGVuZ3RoOyBpKyspIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVSdW50aW1lW2ldKF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHRcdFx0XHQvLyBjYWxsIGFjY2VwdCBoYW5kbGVyc1xuLyoqKioqKi8gXHRcdFx0XHRcdGZvciAodmFyIG91dGRhdGVkTW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm8ob3V0ZGF0ZWREZXBlbmRlbmNpZXMsIG91dGRhdGVkTW9kdWxlSWQpKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbb3V0ZGF0ZWRNb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlmIChtb2R1bGUpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1tvdXRkYXRlZE1vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gW107XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9ySGFuZGxlcnMgPSBbXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHR2YXIgZGVwZW5kZW5jaWVzRm9yQ2FsbGJhY2tzID0gW107XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhY2NlcHRDYWxsYmFjayA9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZS5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcGVuZGVuY3ldO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9ySGFuZGxlciA9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZS5ob3QuX2FjY2VwdGVkRXJyb3JIYW5kbGVyc1tkZXBlbmRlbmN5XTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhY2NlcHRDYWxsYmFjaykge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tzLmluZGV4T2YoYWNjZXB0Q2FsbGJhY2spICE9PSAtMSkgY29udGludWU7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGNhbGxiYWNrcy5wdXNoKGFjY2VwdENhbGxiYWNrKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVycy5wdXNoKGVycm9ySGFuZGxlcik7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrcy5wdXNoKGRlcGVuZGVuY3kpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGNhbGxiYWNrcy5sZW5ndGg7IGsrKykge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tzW2tdLmNhbGwobnVsbCwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZXJyb3JIYW5kbGVyc1trXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9ySGFuZGxlcnNba10oZXJyLCB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBvdXRkYXRlZE1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5SWQ6IGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrc1trXVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyMikge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogb3V0ZGF0ZWRNb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5SWQ6IGRlcGVuZGVuY2llc0ZvckNhbGxiYWNrc1trXSxcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyMixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXBvcnRFcnJvcihlcnIyKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVwb3J0RXJyb3IoZXJyKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiYWNjZXB0LWVycm9yZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG91dGRhdGVkTW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVuY3lJZDogZGVwZW5kZW5jaWVzRm9yQ2FsbGJhY2tzW2tdLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRcdC8vIExvYWQgc2VsZiBhY2NlcHRlZCBtb2R1bGVzXG4vKioqKioqLyBcdFx0XHRcdFx0Zm9yICh2YXIgbyA9IDA7IG8gPCBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMubGVuZ3RoOyBvKyspIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHZhciBpdGVtID0gb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzW29dO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gaXRlbS5tb2R1bGU7XG4vKioqKioqLyBcdFx0XHRcdFx0XHR0cnkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRpdGVtLnJlcXVpcmUobW9kdWxlSWQpO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgaXRlbS5lcnJvckhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRpdGVtLmVycm9ySGFuZGxlcihlcnIsIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGU6IF9fd2VicGFja19yZXF1aXJlX18uY1ttb2R1bGVJZF1cbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycjEpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVycjEsXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3JpZ2luYWxFcnJvcjogZXJyXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVwb3J0RXJyb3IoZXJyMSk7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yZWRcIixcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0XHR9KTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdFx0XHRcdHJlcG9ydEVycm9yKGVycik7XG4vKioqKioqLyBcdFx0XHRcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdFx0XHRcdHJldHVybiBvdXRkYXRlZE1vZHVsZXM7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH07XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1ySS5qc29ucCA9IGZ1bmN0aW9uIChtb2R1bGVJZCwgYXBwbHlIYW5kbGVycykge1xuLyoqKioqKi8gXHRcdFx0aWYgKCFjdXJyZW50VXBkYXRlKSB7XG4vKioqKioqLyBcdFx0XHRcdGN1cnJlbnRVcGRhdGUgPSB7fTtcbi8qKioqKiovIFx0XHRcdFx0Y3VycmVudFVwZGF0ZVJ1bnRpbWUgPSBbXTtcbi8qKioqKiovIFx0XHRcdFx0Y3VycmVudFVwZGF0ZVJlbW92ZWRDaHVua3MgPSBbXTtcbi8qKioqKiovIFx0XHRcdFx0YXBwbHlIYW5kbGVycy5wdXNoKGFwcGx5SGFuZGxlcik7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRpZiAoIV9fd2VicGFja19yZXF1aXJlX18ubyhjdXJyZW50VXBkYXRlLCBtb2R1bGVJZCkpIHtcbi8qKioqKiovIFx0XHRcdFx0Y3VycmVudFVwZGF0ZVttb2R1bGVJZF0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5obXJDLmpzb25wID0gZnVuY3Rpb24gKFxuLyoqKioqKi8gXHRcdFx0Y2h1bmtJZHMsXG4vKioqKioqLyBcdFx0XHRyZW1vdmVkQ2h1bmtzLFxuLyoqKioqKi8gXHRcdFx0cmVtb3ZlZE1vZHVsZXMsXG4vKioqKioqLyBcdFx0XHRwcm9taXNlcyxcbi8qKioqKiovIFx0XHRcdGFwcGx5SGFuZGxlcnMsXG4vKioqKioqLyBcdFx0XHR1cGRhdGVkTW9kdWxlc0xpc3Rcbi8qKioqKiovIFx0XHQpIHtcbi8qKioqKiovIFx0XHRcdGFwcGx5SGFuZGxlcnMucHVzaChhcHBseUhhbmRsZXIpO1xuLyoqKioqKi8gXHRcdFx0Y3VycmVudFVwZGF0ZUNodW5rcyA9IHt9O1xuLyoqKioqKi8gXHRcdFx0Y3VycmVudFVwZGF0ZVJlbW92ZWRDaHVua3MgPSByZW1vdmVkQ2h1bmtzO1xuLyoqKioqKi8gXHRcdFx0Y3VycmVudFVwZGF0ZSA9IHJlbW92ZWRNb2R1bGVzLnJlZHVjZShmdW5jdGlvbiAob2JqLCBrZXkpIHtcbi8qKioqKiovIFx0XHRcdFx0b2JqW2tleV0gPSBmYWxzZTtcbi8qKioqKiovIFx0XHRcdFx0cmV0dXJuIG9iajtcbi8qKioqKiovIFx0XHRcdH0sIHt9KTtcbi8qKioqKiovIFx0XHRcdGN1cnJlbnRVcGRhdGVSdW50aW1lID0gW107XG4vKioqKioqLyBcdFx0XHRjaHVua0lkcy5mb3JFYWNoKGZ1bmN0aW9uIChjaHVua0lkKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmIChcbi8qKioqKiovIFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJlxuLyoqKioqKi8gXHRcdFx0XHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXSAhPT0gdW5kZWZpbmVkXG4vKioqKioqLyBcdFx0XHRcdCkge1xuLyoqKioqKi8gXHRcdFx0XHRcdHByb21pc2VzLnB1c2gobG9hZFVwZGF0ZUNodW5rKGNodW5rSWQsIHVwZGF0ZWRNb2R1bGVzTGlzdCkpO1xuLyoqKioqKi8gXHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF0gPSB0cnVlO1xuLyoqKioqKi8gXHRcdFx0XHR9IGVsc2Uge1xuLyoqKioqKi8gXHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF0gPSBmYWxzZTtcbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0fSk7XG4vKioqKioqLyBcdFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5mKSB7XG4vKioqKioqLyBcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uZi5qc29ucEhtciA9IGZ1bmN0aW9uIChjaHVua0lkLCBwcm9taXNlcykge1xuLyoqKioqKi8gXHRcdFx0XHRcdGlmIChcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3MgJiZcbi8qKioqKiovIFx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubyhjdXJyZW50VXBkYXRlQ2h1bmtzLCBjaHVua0lkKSAmJlxuLyoqKioqKi8gXHRcdFx0XHRcdFx0IWN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF1cbi8qKioqKiovIFx0XHRcdFx0XHQpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdHByb21pc2VzLnB1c2gobG9hZFVwZGF0ZUNodW5rKGNodW5rSWQpKTtcbi8qKioqKiovIFx0XHRcdFx0XHRcdGN1cnJlbnRVcGRhdGVDaHVua3NbY2h1bmtJZF0gPSB0cnVlO1xuLyoqKioqKi8gXHRcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdFx0fTtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uaG1yTSA9ICgpID0+IHtcbi8qKioqKiovIFx0XHRcdGlmICh0eXBlb2YgZmV0Y2ggPT09IFwidW5kZWZpbmVkXCIpIHRocm93IG5ldyBFcnJvcihcIk5vIGJyb3dzZXIgc3VwcG9ydDogbmVlZCBmZXRjaCBBUElcIik7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gZmV0Y2goX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy5obXJGKCkpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4vKioqKioqLyBcdFx0XHRcdGlmKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSByZXR1cm47IC8vIG5vIHVwZGF0ZSBhdmFpbGFibGVcbi8qKioqKiovIFx0XHRcdFx0aWYoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggdXBkYXRlIG1hbmlmZXN0IFwiICsgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4vKioqKioqLyBcdFx0XHRcdHJldHVybiByZXNwb25zZS5qc29uKCk7XG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uTy5qID0gKGNodW5rSWQpID0+IChpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPT09IDApO1xuLyoqKioqKi8gXHRcdFxuLyoqKioqKi8gXHRcdC8vIGluc3RhbGwgYSBKU09OUCBjYWxsYmFjayBmb3IgY2h1bmsgbG9hZGluZ1xuLyoqKioqKi8gXHRcdHZhciB3ZWJwYWNrSnNvbnBDYWxsYmFjayA9IChwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiwgZGF0YSkgPT4ge1xuLyoqKioqKi8gXHRcdFx0dmFyIFtjaHVua0lkcywgbW9yZU1vZHVsZXMsIHJ1bnRpbWVdID0gZGF0YTtcbi8qKioqKiovIFx0XHRcdC8vIGFkZCBcIm1vcmVNb2R1bGVzXCIgdG8gdGhlIG1vZHVsZXMgb2JqZWN0LFxuLyoqKioqKi8gXHRcdFx0Ly8gdGhlbiBmbGFnIGFsbCBcImNodW5rSWRzXCIgYXMgbG9hZGVkIGFuZCBmaXJlIGNhbGxiYWNrXG4vKioqKioqLyBcdFx0XHR2YXIgbW9kdWxlSWQsIGNodW5rSWQsIGkgPSAwO1xuLyoqKioqKi8gXHRcdFx0aWYoY2h1bmtJZHMuc29tZSgoaWQpID0+IChpbnN0YWxsZWRDaHVua3NbaWRdICE9PSAwKSkpIHtcbi8qKioqKiovIFx0XHRcdFx0Zm9yKG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG4vKioqKioqLyBcdFx0XHRcdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRcdGlmKHJ1bnRpbWUpIHZhciByZXN1bHQgPSBydW50aW1lKF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0aWYocGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24pIHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uKGRhdGEpO1xuLyoqKioqKi8gXHRcdFx0Zm9yKDtpIDwgY2h1bmtJZHMubGVuZ3RoOyBpKyspIHtcbi8qKioqKiovIFx0XHRcdFx0Y2h1bmtJZCA9IGNodW5rSWRzW2ldO1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJiBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcbi8qKioqKiovIFx0XHRcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF1bMF0oKTtcbi8qKioqKiovIFx0XHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSAwO1xuLyoqKioqKi8gXHRcdFx0fVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uTyhyZXN1bHQpO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRcbi8qKioqKiovIFx0XHR2YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gc2VsZltcIndlYnBhY2tDaHVua19OX0VcIl0gPSBzZWxmW1wid2VicGFja0NodW5rX05fRVwiXSB8fCBbXTtcbi8qKioqKiovIFx0XHRjaHVua0xvYWRpbmdHbG9iYWwuZm9yRWFjaCh3ZWJwYWNrSnNvbnBDYWxsYmFjay5iaW5kKG51bGwsIDApKTtcbi8qKioqKiovIFx0XHRjaHVua0xvYWRpbmdHbG9iYWwucHVzaCA9IHdlYnBhY2tKc29ucENhbGxiYWNrLmJpbmQobnVsbCwgY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2guYmluZChjaHVua0xvYWRpbmdHbG9iYWwpKTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gbW9kdWxlIGNhY2hlIGFyZSB1c2VkIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vKioqKioqLyBcdFxuLyoqKioqKi8gfSkoKVxuIl19 ; \ No newline at end of file diff --git a/frontend/.next/static/webpack/275f0b5725c54220.webpack.hot-update.json b/frontend/.next/static/webpack/275f0b5725c54220.webpack.hot-update.json new file mode 100644 index 0000000..537d7b7 --- /dev/null +++ b/frontend/.next/static/webpack/275f0b5725c54220.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/learn/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/2dfcd12cb023612a.webpack.hot-update.json b/frontend/.next/static/webpack/2dfcd12cb023612a.webpack.hot-update.json new file mode 100644 index 0000000..5c82546 --- /dev/null +++ b/frontend/.next/static/webpack/2dfcd12cb023612a.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/333dd3da52f405be.webpack.hot-update.json b/frontend/.next/static/webpack/333dd3da52f405be.webpack.hot-update.json new file mode 100644 index 0000000..5c82546 --- /dev/null +++ b/frontend/.next/static/webpack/333dd3da52f405be.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/355918a5929c6162.webpack.hot-update.json b/frontend/.next/static/webpack/355918a5929c6162.webpack.hot-update.json new file mode 100644 index 0000000..5c82546 --- /dev/null +++ b/frontend/.next/static/webpack/355918a5929c6162.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/5b6833c08c682ad1.webpack.hot-update.json b/frontend/.next/static/webpack/5b6833c08c682ad1.webpack.hot-update.json new file mode 100644 index 0000000..4732d40 --- /dev/null +++ b/frontend/.next/static/webpack/5b6833c08c682ad1.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/dashboard/page","app/flashcards/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/74b150a5394a2a49.webpack.hot-update.json b/frontend/.next/static/webpack/74b150a5394a2a49.webpack.hot-update.json new file mode 100644 index 0000000..4732d40 --- /dev/null +++ b/frontend/.next/static/webpack/74b150a5394a2a49.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/dashboard/page","app/flashcards/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/79203d562e0ec8e4.webpack.hot-update.json b/frontend/.next/static/webpack/79203d562e0ec8e4.webpack.hot-update.json new file mode 100644 index 0000000..5c82546 --- /dev/null +++ b/frontend/.next/static/webpack/79203d562e0ec8e4.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/a5ed9c629ec71a9a.webpack.hot-update.json b/frontend/.next/static/webpack/a5ed9c629ec71a9a.webpack.hot-update.json new file mode 100644 index 0000000..5c82546 --- /dev/null +++ b/frontend/.next/static/webpack/a5ed9c629ec71a9a.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/dashboard/page.5b6833c08c682ad1.hot-update.js b/frontend/.next/static/webpack/app/dashboard/page.5b6833c08c682ad1.hot-update.js new file mode 100644 index 0000000..1974161 --- /dev/null +++ b/frontend/.next/static/webpack/app/dashboard/page.5b6833c08c682ad1.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/dashboard/page",{ + +/***/ "(app-pages-browser)/./components/Navigation.tsx": +/*!***********************************!*\ + !*** ./components/Navigation.tsx ***! + \***********************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 22,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 21,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 46,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 45,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 44,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 52,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 55,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 56,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 51,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 42,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 20,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 19,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 18,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQUV6QyxTQUFTRztRQThDQ0MsaUJBQUFBOztJQTdDZixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdILDhEQUFPQTtJQUNoQyxNQUFNSSxXQUFXTCw0REFBV0E7SUFFNUIsTUFBTU0sV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO0tBQy9CO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDWCxrREFBSUE7Z0NBQUNRLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDZCxrREFBSUE7d0NBRUhRLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsaUNBSVYsT0FIQ0wsYUFBYVEsS0FBS04sSUFBSSxHQUNsQixpQkFDQTtrREFHTE0sS0FBS0wsS0FBSzt1Q0FSTkssS0FBS04sSUFBSTs7Ozs7Ozs7Ozs7Ozs7OztrQ0FjdEIsOERBQUNJO3dCQUFJRCxXQUFVOzswQ0FFYiw4REFBQ0k7Z0NBQU9KLFdBQVU7MENBQ2hCLDRFQUFDSztvQ0FBSUwsV0FBVTtvQ0FBVU0sTUFBSztvQ0FBT0MsUUFBTztvQ0FBZUMsU0FBUTs4Q0FDakUsNEVBQUNDO3dDQUFLQyxlQUFjO3dDQUFRQyxnQkFBZTt3Q0FBUUMsYUFBYTt3Q0FBR0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7OzswQ0FLekUsOERBQUNaO2dDQUFJRCxXQUFVOztrREFDYiw4REFBQ0M7d0NBQUlELFdBQVU7a0RBQ1pQLENBQUFBLGlCQUFBQSw0QkFBQUEsaUJBQUFBLEtBQU1xQixRQUFRLGNBQWRyQixzQ0FBQUEsa0JBQUFBLGNBQWdCLENBQUMsRUFBRSxjQUFuQkEsc0NBQUFBLGdCQUFxQnNCLFdBQVcsT0FBTTs7Ozs7O2tEQUV6Qyw4REFBQ0M7d0NBQUtoQixXQUFVO2tEQUF1QlAsQ0FBQUEsaUJBQUFBLDJCQUFBQSxLQUFNd0IsV0FBVyxNQUFJeEIsaUJBQUFBLDJCQUFBQSxLQUFNcUIsUUFBUTs7Ozs7O2tEQUMxRSw4REFBQ1Y7d0NBQ0NjLFNBQVN4Qjt3Q0FDVE0sV0FBVTtrREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmO0dBN0RnQlI7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oKSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfVxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog6YCa55+l5oyJ6YiVICovfVxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgey8qIOeUqOaItuizh+ioiiAqL31cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctOCBoLTggYmctcHJpbWFyeSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LXNlbWlib2xkXCI+XHJcbiAgICAgICAgICAgICAgICB7dXNlcj8udXNlcm5hbWU/LlswXT8udG9VcHBlckNhc2UoKSB8fCAnVSd9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPnt1c2VyPy5kaXNwbGF5TmFtZSB8fCB1c2VyPy51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWwtNCB0ZXh0LXNtIHRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uYXY+XHJcbiAgKVxyXG59Il0sIm5hbWVzIjpbIkxpbmsiLCJ1c2VQYXRobmFtZSIsInVzZUF1dGgiLCJOYXZpZ2F0aW9uIiwidXNlciIsImxvZ291dCIsInBhdGhuYW1lIiwibmF2SXRlbXMiLCJocmVmIiwibGFiZWwiLCJuYXYiLCJjbGFzc05hbWUiLCJkaXYiLCJtYXAiLCJpdGVtIiwiYnV0dG9uIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSIsIm9uQ2xpY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/dashboard/page.74b150a5394a2a49.hot-update.js b/frontend/.next/static/webpack/app/dashboard/page.74b150a5394a2a49.hot-update.js new file mode 100644 index 0000000..67eb0b7 --- /dev/null +++ b/frontend/.next/static/webpack/app/dashboard/page.74b150a5394a2a49.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/dashboard/page",{ + +/***/ "(app-pages-browser)/./components/Navigation.tsx": +/*!***********************************!*\ + !*** ./components/Navigation.tsx ***! + \***********************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n let { showExitLearning = false, onExitLearning } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: showExitLearning ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onExitLearning,\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 59,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 70,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 71,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQU96QyxTQUFTRztRQUFXLEVBQUVDLG1CQUFtQixLQUFLLEVBQUVDLGNBQWMsRUFBbUIsR0FBN0QsaUVBQWdFLENBQUM7UUF3RHZFQyxpQkFBQUE7O0lBdkRuQixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdMLDhEQUFPQTtJQUNoQyxNQUFNTSxXQUFXUCw0REFBV0E7SUFFNUIsTUFBTVEsV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO0tBQy9CO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDYixrREFBSUE7Z0NBQUNVLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDaEIsa0RBQUlBO3dDQUVIVSxNQUFNTSxLQUFLTixJQUFJO3dDQUNmRyxXQUFXLGlDQUlWLE9BSENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0E7a0RBR0xNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTtrQ0FFWlQsaUNBQ0MsOERBQUNhOzRCQUNDQyxTQUFTYjs0QkFDVFEsV0FBVTtzQ0FDWDs7Ozs7aURBSUQ7OzhDQUVFLDhEQUFDSTtvQ0FBT0osV0FBVTs4Q0FDaEIsNEVBQUNNO3dDQUFJTixXQUFVO3dDQUFVTyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzhDQUt6RSw4REFBQ2I7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTtzREFDWlAsQ0FBQUEsaUJBQUFBLDRCQUFBQSxpQkFBQUEsS0FBTXNCLFFBQVEsY0FBZHRCLHNDQUFBQSxrQkFBQUEsY0FBZ0IsQ0FBQyxFQUFFLGNBQW5CQSxzQ0FBQUEsZ0JBQXFCdUIsV0FBVyxPQUFNOzs7Ozs7c0RBRXpDLDhEQUFDQzs0Q0FBS2pCLFdBQVU7c0RBQXVCUCxDQUFBQSxpQkFBQUEsMkJBQUFBLEtBQU15QixXQUFXLE1BQUl6QixpQkFBQUEsMkJBQUFBLEtBQU1zQixRQUFROzs7Ozs7c0RBQzFFLDhEQUFDWDs0Q0FDQ0MsU0FBU1g7NENBQ1RNLFdBQVU7c0RBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV25CO0dBekVnQlY7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuaW50ZXJmYWNlIE5hdmlnYXRpb25Qcm9wcyB7XHJcbiAgc2hvd0V4aXRMZWFybmluZz86IGJvb2xlYW5cclxuICBvbkV4aXRMZWFybmluZz86ICgpID0+IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oeyBzaG93RXhpdExlYXJuaW5nID0gZmFsc2UsIG9uRXhpdExlYXJuaW5nIH06IE5hdmlnYXRpb25Qcm9wcyA9IHt9KSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfVxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog5a2457+S5qih5byP55qE57WQ5p2f5a2457+S5oyJ6YiVICovfVxyXG4gICAgICAgICAgICB7c2hvd0V4aXRMZWFybmluZyA/IChcclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkV4aXRMZWFybmluZ31cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgw5cg57WQ5p2f5a2457+SXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIHsvKiDpgJrnn6XmjInpiJUgKi99XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDE3aDVsLTEuNDA1LTEuNDA1QTIuMDMyIDIuMDMyIDAgMDExOCAxNC4xNThWMTFhNi4wMDIgNi4wMDIgMCAwMC00LTUuNjU5VjVhMiAyIDAgMTAtNCAwdi4zNDFDNy42NyA2LjE2NSA2IDguMzg4IDYgMTF2My4xNTljMCAuNTM4LS4yMTQgMS4wNTUtLjU5NSAxLjQzNkw0IDE3aDVtNiAwdjFhMyAzIDAgMTEtNiAwdi0xbTYgMEg5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICB7Lyog55So5oi26LOH6KiKICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTggaC04IGJnLXByaW1hcnkgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt1c2VyPy51c2VybmFtZT8uWzBdPy50b1VwcGVyQ2FzZSgpIHx8ICdVJ31cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW1cIj57dXNlcj8uZGlzcGxheU5hbWUgfHwgdXNlcj8udXNlcm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1sLTQgdGV4dC1zbSB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25hdj5cclxuICApXHJcbn0iXSwibmFtZXMiOlsiTGluayIsInVzZVBhdGhuYW1lIiwidXNlQXV0aCIsIk5hdmlnYXRpb24iLCJzaG93RXhpdExlYXJuaW5nIiwib25FeGl0TGVhcm5pbmciLCJ1c2VyIiwibG9nb3V0IiwicGF0aG5hbWUiLCJuYXZJdGVtcyIsImhyZWYiLCJsYWJlbCIsIm5hdiIsImNsYXNzTmFtZSIsImRpdiIsIm1hcCIsIml0ZW0iLCJidXR0b24iLCJvbkNsaWNrIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/dashboard/page.f790d4f15ac1d1b2.hot-update.js b/frontend/.next/static/webpack/app/dashboard/page.f790d4f15ac1d1b2.hot-update.js new file mode 100644 index 0000000..8bcc5c2 --- /dev/null +++ b/frontend/.next/static/webpack/app/dashboard/page.f790d4f15ac1d1b2.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/dashboard/page",{ + +/***/ "(app-pages-browser)/./components/Navigation.tsx": +/*!***********************************!*\ + !*** ./components/Navigation.tsx ***! + \***********************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n let { showExitLearning = false, onExitLearning } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 51,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 49,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 57,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 56,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQU96QyxTQUFTRztRQUFXLEVBQUVDLG1CQUFtQixLQUFLLEVBQUVDLGNBQWMsRUFBbUIsR0FBN0QsaUVBQWdFLENBQUM7UUE4QzNFQyxpQkFBQUE7O0lBN0NmLE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxNQUFNLEVBQUUsR0FBR0wsOERBQU9BO0lBQ2hDLE1BQU1NLFdBQVdQLDREQUFXQTtJQUU1QixNQUFNUSxXQUFXO1FBQ2Y7WUFBRUMsTUFBTTtZQUFjQyxPQUFPO1FBQU07UUFDbkM7WUFBRUQsTUFBTTtZQUFlQyxPQUFPO1FBQUs7UUFDbkM7WUFBRUQsTUFBTTtZQUFVQyxPQUFPO1FBQUs7S0FDL0I7SUFFRCxxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVTtrQkFDYiw0RUFBQ0M7WUFBSUQsV0FBVTtzQkFDYiw0RUFBQ0M7Z0JBQUlELFdBQVU7O2tDQUNiLDhEQUFDQzt3QkFBSUQsV0FBVTs7MENBQ2IsOERBQUNiLGtEQUFJQTtnQ0FBQ1UsTUFBSztnQ0FBYUcsV0FBVTswQ0FBa0M7Ozs7OzswQ0FHcEUsOERBQUNDO2dDQUFJRCxXQUFVOzBDQUNaSixTQUFTTSxHQUFHLENBQUMsQ0FBQ0MscUJBQ2IsOERBQUNoQixrREFBSUE7d0NBRUhVLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsaUNBSVYsT0FIQ0wsYUFBYVEsS0FBS04sSUFBSSxHQUNsQixpQkFDQTtrREFHTE0sS0FBS0wsS0FBSzt1Q0FSTkssS0FBS04sSUFBSTs7Ozs7Ozs7Ozs7Ozs7OztrQ0FjdEIsOERBQUNJO3dCQUFJRCxXQUFVOzswQ0FFYiw4REFBQ0k7Z0NBQU9KLFdBQVU7MENBQ2hCLDRFQUFDSztvQ0FBSUwsV0FBVTtvQ0FBVU0sTUFBSztvQ0FBT0MsUUFBTztvQ0FBZUMsU0FBUTs4Q0FDakUsNEVBQUNDO3dDQUFLQyxlQUFjO3dDQUFRQyxnQkFBZTt3Q0FBUUMsYUFBYTt3Q0FBR0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7OzswQ0FLekUsOERBQUNaO2dDQUFJRCxXQUFVOztrREFDYiw4REFBQ0M7d0NBQUlELFdBQVU7a0RBQ1pQLENBQUFBLGlCQUFBQSw0QkFBQUEsaUJBQUFBLEtBQU1xQixRQUFRLGNBQWRyQixzQ0FBQUEsa0JBQUFBLGNBQWdCLENBQUMsRUFBRSxjQUFuQkEsc0NBQUFBLGdCQUFxQnNCLFdBQVcsT0FBTTs7Ozs7O2tEQUV6Qyw4REFBQ0M7d0NBQUtoQixXQUFVO2tEQUF1QlAsQ0FBQUEsaUJBQUFBLDJCQUFBQSxLQUFNd0IsV0FBVyxNQUFJeEIsaUJBQUFBLDJCQUFBQSxLQUFNcUIsUUFBUTs7Ozs7O2tEQUMxRSw4REFBQ1Y7d0NBQ0NjLFNBQVN4Qjt3Q0FDVE0sV0FBVTtrREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmO0dBN0RnQlY7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuaW50ZXJmYWNlIE5hdmlnYXRpb25Qcm9wcyB7XHJcbiAgc2hvd0V4aXRMZWFybmluZz86IGJvb2xlYW5cclxuICBvbkV4aXRMZWFybmluZz86ICgpID0+IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oeyBzaG93RXhpdExlYXJuaW5nID0gZmFsc2UsIG9uRXhpdExlYXJuaW5nIH06IE5hdmlnYXRpb25Qcm9wcyA9IHt9KSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfVxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog6YCa55+l5oyJ6YiVICovfVxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgey8qIOeUqOaItuizh+ioiiAqL31cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctOCBoLTggYmctcHJpbWFyeSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LXNlbWlib2xkXCI+XHJcbiAgICAgICAgICAgICAgICB7dXNlcj8udXNlcm5hbWU/LlswXT8udG9VcHBlckNhc2UoKSB8fCAnVSd9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPnt1c2VyPy5kaXNwbGF5TmFtZSB8fCB1c2VyPy51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWwtNCB0ZXh0LXNtIHRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uYXY+XHJcbiAgKVxyXG59Il0sIm5hbWVzIjpbIkxpbmsiLCJ1c2VQYXRobmFtZSIsInVzZUF1dGgiLCJOYXZpZ2F0aW9uIiwic2hvd0V4aXRMZWFybmluZyIsIm9uRXhpdExlYXJuaW5nIiwidXNlciIsImxvZ291dCIsInBhdGhuYW1lIiwibmF2SXRlbXMiLCJocmVmIiwibGFiZWwiLCJuYXYiLCJjbGFzc05hbWUiLCJkaXYiLCJtYXAiLCJpdGVtIiwiYnV0dG9uIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSIsIm9uQ2xpY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/flashcards/page.5b6833c08c682ad1.hot-update.js b/frontend/.next/static/webpack/app/flashcards/page.5b6833c08c682ad1.hot-update.js new file mode 100644 index 0000000..c9dda84 --- /dev/null +++ b/frontend/.next/static/webpack/app/flashcards/page.5b6833c08c682ad1.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/flashcards/page",{ + +/***/ "(app-pages-browser)/./components/Navigation.tsx": +/*!***********************************!*\ + !*** ./components/Navigation.tsx ***! + \***********************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 22,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 21,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 46,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 45,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 44,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 52,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 55,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 56,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 51,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 42,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 20,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 19,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 18,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQUV6QyxTQUFTRztRQThDQ0MsaUJBQUFBOztJQTdDZixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdILDhEQUFPQTtJQUNoQyxNQUFNSSxXQUFXTCw0REFBV0E7SUFFNUIsTUFBTU0sV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO0tBQy9CO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDWCxrREFBSUE7Z0NBQUNRLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDZCxrREFBSUE7d0NBRUhRLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsaUNBSVYsT0FIQ0wsYUFBYVEsS0FBS04sSUFBSSxHQUNsQixpQkFDQTtrREFHTE0sS0FBS0wsS0FBSzt1Q0FSTkssS0FBS04sSUFBSTs7Ozs7Ozs7Ozs7Ozs7OztrQ0FjdEIsOERBQUNJO3dCQUFJRCxXQUFVOzswQ0FFYiw4REFBQ0k7Z0NBQU9KLFdBQVU7MENBQ2hCLDRFQUFDSztvQ0FBSUwsV0FBVTtvQ0FBVU0sTUFBSztvQ0FBT0MsUUFBTztvQ0FBZUMsU0FBUTs4Q0FDakUsNEVBQUNDO3dDQUFLQyxlQUFjO3dDQUFRQyxnQkFBZTt3Q0FBUUMsYUFBYTt3Q0FBR0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7OzswQ0FLekUsOERBQUNaO2dDQUFJRCxXQUFVOztrREFDYiw4REFBQ0M7d0NBQUlELFdBQVU7a0RBQ1pQLENBQUFBLGlCQUFBQSw0QkFBQUEsaUJBQUFBLEtBQU1xQixRQUFRLGNBQWRyQixzQ0FBQUEsa0JBQUFBLGNBQWdCLENBQUMsRUFBRSxjQUFuQkEsc0NBQUFBLGdCQUFxQnNCLFdBQVcsT0FBTTs7Ozs7O2tEQUV6Qyw4REFBQ0M7d0NBQUtoQixXQUFVO2tEQUF1QlAsQ0FBQUEsaUJBQUFBLDJCQUFBQSxLQUFNd0IsV0FBVyxNQUFJeEIsaUJBQUFBLDJCQUFBQSxLQUFNcUIsUUFBUTs7Ozs7O2tEQUMxRSw4REFBQ1Y7d0NBQ0NjLFNBQVN4Qjt3Q0FDVE0sV0FBVTtrREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmO0dBN0RnQlI7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oKSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfVxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog6YCa55+l5oyJ6YiVICovfVxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgey8qIOeUqOaItuizh+ioiiAqL31cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctOCBoLTggYmctcHJpbWFyeSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LXNlbWlib2xkXCI+XHJcbiAgICAgICAgICAgICAgICB7dXNlcj8udXNlcm5hbWU/LlswXT8udG9VcHBlckNhc2UoKSB8fCAnVSd9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPnt1c2VyPy5kaXNwbGF5TmFtZSB8fCB1c2VyPy51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWwtNCB0ZXh0LXNtIHRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uYXY+XHJcbiAgKVxyXG59Il0sIm5hbWVzIjpbIkxpbmsiLCJ1c2VQYXRobmFtZSIsInVzZUF1dGgiLCJOYXZpZ2F0aW9uIiwidXNlciIsImxvZ291dCIsInBhdGhuYW1lIiwibmF2SXRlbXMiLCJocmVmIiwibGFiZWwiLCJuYXYiLCJjbGFzc05hbWUiLCJkaXYiLCJtYXAiLCJpdGVtIiwiYnV0dG9uIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSIsIm9uQ2xpY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/flashcards/page.74b150a5394a2a49.hot-update.js b/frontend/.next/static/webpack/app/flashcards/page.74b150a5394a2a49.hot-update.js new file mode 100644 index 0000000..9cc64f7 --- /dev/null +++ b/frontend/.next/static/webpack/app/flashcards/page.74b150a5394a2a49.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/flashcards/page",{ + +/***/ "(app-pages-browser)/./components/Navigation.tsx": +/*!***********************************!*\ + !*** ./components/Navigation.tsx ***! + \***********************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n let { showExitLearning = false, onExitLearning } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: showExitLearning ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onExitLearning,\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 59,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 70,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 71,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQU96QyxTQUFTRztRQUFXLEVBQUVDLG1CQUFtQixLQUFLLEVBQUVDLGNBQWMsRUFBbUIsR0FBN0QsaUVBQWdFLENBQUM7UUF3RHZFQyxpQkFBQUE7O0lBdkRuQixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdMLDhEQUFPQTtJQUNoQyxNQUFNTSxXQUFXUCw0REFBV0E7SUFFNUIsTUFBTVEsV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO0tBQy9CO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDYixrREFBSUE7Z0NBQUNVLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDaEIsa0RBQUlBO3dDQUVIVSxNQUFNTSxLQUFLTixJQUFJO3dDQUNmRyxXQUFXLGlDQUlWLE9BSENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0E7a0RBR0xNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTtrQ0FFWlQsaUNBQ0MsOERBQUNhOzRCQUNDQyxTQUFTYjs0QkFDVFEsV0FBVTtzQ0FDWDs7Ozs7aURBSUQ7OzhDQUVFLDhEQUFDSTtvQ0FBT0osV0FBVTs4Q0FDaEIsNEVBQUNNO3dDQUFJTixXQUFVO3dDQUFVTyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzhDQUt6RSw4REFBQ2I7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTtzREFDWlAsQ0FBQUEsaUJBQUFBLDRCQUFBQSxpQkFBQUEsS0FBTXNCLFFBQVEsY0FBZHRCLHNDQUFBQSxrQkFBQUEsY0FBZ0IsQ0FBQyxFQUFFLGNBQW5CQSxzQ0FBQUEsZ0JBQXFCdUIsV0FBVyxPQUFNOzs7Ozs7c0RBRXpDLDhEQUFDQzs0Q0FBS2pCLFdBQVU7c0RBQXVCUCxDQUFBQSxpQkFBQUEsMkJBQUFBLEtBQU15QixXQUFXLE1BQUl6QixpQkFBQUEsMkJBQUFBLEtBQU1zQixRQUFROzs7Ozs7c0RBQzFFLDhEQUFDWDs0Q0FDQ0MsU0FBU1g7NENBQ1RNLFdBQVU7c0RBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV25CO0dBekVnQlY7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuaW50ZXJmYWNlIE5hdmlnYXRpb25Qcm9wcyB7XHJcbiAgc2hvd0V4aXRMZWFybmluZz86IGJvb2xlYW5cclxuICBvbkV4aXRMZWFybmluZz86ICgpID0+IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oeyBzaG93RXhpdExlYXJuaW5nID0gZmFsc2UsIG9uRXhpdExlYXJuaW5nIH06IE5hdmlnYXRpb25Qcm9wcyA9IHt9KSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfVxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog5a2457+S5qih5byP55qE57WQ5p2f5a2457+S5oyJ6YiVICovfVxyXG4gICAgICAgICAgICB7c2hvd0V4aXRMZWFybmluZyA/IChcclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkV4aXRMZWFybmluZ31cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgw5cg57WQ5p2f5a2457+SXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIHsvKiDpgJrnn6XmjInpiJUgKi99XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDE3aDVsLTEuNDA1LTEuNDA1QTIuMDMyIDIuMDMyIDAgMDExOCAxNC4xNThWMTFhNi4wMDIgNi4wMDIgMCAwMC00LTUuNjU5VjVhMiAyIDAgMTAtNCAwdi4zNDFDNy42NyA2LjE2NSA2IDguMzg4IDYgMTF2My4xNTljMCAuNTM4LS4yMTQgMS4wNTUtLjU5NSAxLjQzNkw0IDE3aDVtNiAwdjFhMyAzIDAgMTEtNiAwdi0xbTYgMEg5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICB7Lyog55So5oi26LOH6KiKICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTggaC04IGJnLXByaW1hcnkgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt1c2VyPy51c2VybmFtZT8uWzBdPy50b1VwcGVyQ2FzZSgpIHx8ICdVJ31cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW1cIj57dXNlcj8uZGlzcGxheU5hbWUgfHwgdXNlcj8udXNlcm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1sLTQgdGV4dC1zbSB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25hdj5cclxuICApXHJcbn0iXSwibmFtZXMiOlsiTGluayIsInVzZVBhdGhuYW1lIiwidXNlQXV0aCIsIk5hdmlnYXRpb24iLCJzaG93RXhpdExlYXJuaW5nIiwib25FeGl0TGVhcm5pbmciLCJ1c2VyIiwibG9nb3V0IiwicGF0aG5hbWUiLCJuYXZJdGVtcyIsImhyZWYiLCJsYWJlbCIsIm5hdiIsImNsYXNzTmFtZSIsImRpdiIsIm1hcCIsIml0ZW0iLCJidXR0b24iLCJvbkNsaWNrIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/flashcards/page.f790d4f15ac1d1b2.hot-update.js b/frontend/.next/static/webpack/app/flashcards/page.f790d4f15ac1d1b2.hot-update.js new file mode 100644 index 0000000..31f504c --- /dev/null +++ b/frontend/.next/static/webpack/app/flashcards/page.f790d4f15ac1d1b2.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/flashcards/page",{ + +/***/ "(app-pages-browser)/./components/Navigation.tsx": +/*!***********************************!*\ + !*** ./components/Navigation.tsx ***! + \***********************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n let { showExitLearning = false, onExitLearning } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 51,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 49,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 57,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 56,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQU96QyxTQUFTRztRQUFXLEVBQUVDLG1CQUFtQixLQUFLLEVBQUVDLGNBQWMsRUFBbUIsR0FBN0QsaUVBQWdFLENBQUM7UUE4QzNFQyxpQkFBQUE7O0lBN0NmLE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxNQUFNLEVBQUUsR0FBR0wsOERBQU9BO0lBQ2hDLE1BQU1NLFdBQVdQLDREQUFXQTtJQUU1QixNQUFNUSxXQUFXO1FBQ2Y7WUFBRUMsTUFBTTtZQUFjQyxPQUFPO1FBQU07UUFDbkM7WUFBRUQsTUFBTTtZQUFlQyxPQUFPO1FBQUs7UUFDbkM7WUFBRUQsTUFBTTtZQUFVQyxPQUFPO1FBQUs7S0FDL0I7SUFFRCxxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVTtrQkFDYiw0RUFBQ0M7WUFBSUQsV0FBVTtzQkFDYiw0RUFBQ0M7Z0JBQUlELFdBQVU7O2tDQUNiLDhEQUFDQzt3QkFBSUQsV0FBVTs7MENBQ2IsOERBQUNiLGtEQUFJQTtnQ0FBQ1UsTUFBSztnQ0FBYUcsV0FBVTswQ0FBa0M7Ozs7OzswQ0FHcEUsOERBQUNDO2dDQUFJRCxXQUFVOzBDQUNaSixTQUFTTSxHQUFHLENBQUMsQ0FBQ0MscUJBQ2IsOERBQUNoQixrREFBSUE7d0NBRUhVLE1BQU1NLEtBQUtOLElBQUk7d0NBQ2ZHLFdBQVcsaUNBSVYsT0FIQ0wsYUFBYVEsS0FBS04sSUFBSSxHQUNsQixpQkFDQTtrREFHTE0sS0FBS0wsS0FBSzt1Q0FSTkssS0FBS04sSUFBSTs7Ozs7Ozs7Ozs7Ozs7OztrQ0FjdEIsOERBQUNJO3dCQUFJRCxXQUFVOzswQ0FFYiw4REFBQ0k7Z0NBQU9KLFdBQVU7MENBQ2hCLDRFQUFDSztvQ0FBSUwsV0FBVTtvQ0FBVU0sTUFBSztvQ0FBT0MsUUFBTztvQ0FBZUMsU0FBUTs4Q0FDakUsNEVBQUNDO3dDQUFLQyxlQUFjO3dDQUFRQyxnQkFBZTt3Q0FBUUMsYUFBYTt3Q0FBR0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7OzswQ0FLekUsOERBQUNaO2dDQUFJRCxXQUFVOztrREFDYiw4REFBQ0M7d0NBQUlELFdBQVU7a0RBQ1pQLENBQUFBLGlCQUFBQSw0QkFBQUEsaUJBQUFBLEtBQU1xQixRQUFRLGNBQWRyQixzQ0FBQUEsa0JBQUFBLGNBQWdCLENBQUMsRUFBRSxjQUFuQkEsc0NBQUFBLGdCQUFxQnNCLFdBQVcsT0FBTTs7Ozs7O2tEQUV6Qyw4REFBQ0M7d0NBQUtoQixXQUFVO2tEQUF1QlAsQ0FBQUEsaUJBQUFBLDJCQUFBQSxLQUFNd0IsV0FBVyxNQUFJeEIsaUJBQUFBLDJCQUFBQSxLQUFNcUIsUUFBUTs7Ozs7O2tEQUMxRSw4REFBQ1Y7d0NBQ0NjLFNBQVN4Qjt3Q0FDVE0sV0FBVTtrREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmO0dBN0RnQlY7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuaW50ZXJmYWNlIE5hdmlnYXRpb25Qcm9wcyB7XHJcbiAgc2hvd0V4aXRMZWFybmluZz86IGJvb2xlYW5cclxuICBvbkV4aXRMZWFybmluZz86ICgpID0+IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oeyBzaG93RXhpdExlYXJuaW5nID0gZmFsc2UsIG9uRXhpdExlYXJuaW5nIH06IE5hdmlnYXRpb25Qcm9wcyA9IHt9KSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfVxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog6YCa55+l5oyJ6YiVICovfVxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgey8qIOeUqOaItuizh+ioiiAqL31cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctOCBoLTggYmctcHJpbWFyeSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LXNlbWlib2xkXCI+XHJcbiAgICAgICAgICAgICAgICB7dXNlcj8udXNlcm5hbWU/LlswXT8udG9VcHBlckNhc2UoKSB8fCAnVSd9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPnt1c2VyPy5kaXNwbGF5TmFtZSB8fCB1c2VyPy51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWwtNCB0ZXh0LXNtIHRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uYXY+XHJcbiAgKVxyXG59Il0sIm5hbWVzIjpbIkxpbmsiLCJ1c2VQYXRobmFtZSIsInVzZUF1dGgiLCJOYXZpZ2F0aW9uIiwic2hvd0V4aXRMZWFybmluZyIsIm9uRXhpdExlYXJuaW5nIiwidXNlciIsImxvZ291dCIsInBhdGhuYW1lIiwibmF2SXRlbXMiLCJocmVmIiwibGFiZWwiLCJuYXYiLCJjbGFzc05hbWUiLCJkaXYiLCJtYXAiLCJpdGVtIiwiYnV0dG9uIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSIsIm9uQ2xpY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.275f0b5725c54220.hot-update.js b/frontend/.next/static/webpack/app/layout.275f0b5725c54220.hot-update.js new file mode 100644 index 0000000..aff65e5 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.275f0b5725c54220.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"60dcbf7812e7\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjYwZGNiZjc4MTJlN1wiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.2dfcd12cb023612a.hot-update.js b/frontend/.next/static/webpack/app/layout.2dfcd12cb023612a.hot-update.js new file mode 100644 index 0000000..2d7eb6a --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.2dfcd12cb023612a.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"2d914a904777\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjJkOTE0YTkwNDc3N1wiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.333dd3da52f405be.hot-update.js b/frontend/.next/static/webpack/app/layout.333dd3da52f405be.hot-update.js new file mode 100644 index 0000000..ec97d97 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.333dd3da52f405be.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"cba90e51b4ff\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcImNiYTkwZTUxYjRmZlwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.355918a5929c6162.hot-update.js b/frontend/.next/static/webpack/app/layout.355918a5929c6162.hot-update.js new file mode 100644 index 0000000..ee7e4c7 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.355918a5929c6162.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"da5b434663ab\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcImRhNWI0MzQ2NjNhYlwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.5b6833c08c682ad1.hot-update.js b/frontend/.next/static/webpack/app/layout.5b6833c08c682ad1.hot-update.js new file mode 100644 index 0000000..f0d5dd5 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.5b6833c08c682ad1.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"e9cad54ac6a2\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcImU5Y2FkNTRhYzZhMlwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.74b150a5394a2a49.hot-update.js b/frontend/.next/static/webpack/app/layout.74b150a5394a2a49.hot-update.js new file mode 100644 index 0000000..a7acf5d --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.74b150a5394a2a49.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"fdad5729c934\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcImZkYWQ1NzI5YzkzNFwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.79203d562e0ec8e4.hot-update.js b/frontend/.next/static/webpack/app/layout.79203d562e0ec8e4.hot-update.js new file mode 100644 index 0000000..1e1d489 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.79203d562e0ec8e4.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"5a5e3f4311d6\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjVhNWUzZjQzMTFkNlwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.a5ed9c629ec71a9a.hot-update.js b/frontend/.next/static/webpack/app/layout.a5ed9c629ec71a9a.hot-update.js new file mode 100644 index 0000000..db129a0 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.a5ed9c629ec71a9a.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"3f7245cc2a6d\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjNmNzI0NWNjMmE2ZFwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.b3d5a8eb2070c334.hot-update.js b/frontend/.next/static/webpack/app/layout.b3d5a8eb2070c334.hot-update.js new file mode 100644 index 0000000..433b89d --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.b3d5a8eb2070c334.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"2092a81654ac\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjIwOTJhODE2NTRhY1wiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.bb82a0f39a60143a.hot-update.js b/frontend/.next/static/webpack/app/layout.bb82a0f39a60143a.hot-update.js new file mode 100644 index 0000000..3f8faaa --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.bb82a0f39a60143a.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"8f62c0894a00\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjhmNjJjMDg5NGEwMFwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.cf4bfef944e80cba.hot-update.js b/frontend/.next/static/webpack/app/layout.cf4bfef944e80cba.hot-update.js new file mode 100644 index 0000000..33ac7ae --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.cf4bfef944e80cba.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"ecc1c810175b\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcImVjYzFjODEwMTc1YlwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.de9e6b61fc2e7b13.hot-update.js b/frontend/.next/static/webpack/app/layout.de9e6b61fc2e7b13.hot-update.js new file mode 100644 index 0000000..9dbafc0 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.de9e6b61fc2e7b13.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"6b1ee4f13710\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjZiMWVlNGYxMzcxMFwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.e48e25b7e498e2f6.hot-update.js b/frontend/.next/static/webpack/app/layout.e48e25b7e498e2f6.hot-update.js new file mode 100644 index 0000000..6c0861b --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.e48e25b7e498e2f6.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"170137e5b199\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjE3MDEzN2U1YjE5OVwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.f790d4f15ac1d1b2.hot-update.js b/frontend/.next/static/webpack/app/layout.f790d4f15ac1d1b2.hot-update.js new file mode 100644 index 0000000..863c7d2 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.f790d4f15ac1d1b2.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./app/globals.css": +/*!*************************!*\ + !*** ./app/globals.css ***! + \*************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"4196543d56bf\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9qZXR0Y2hlbmcxMDE4L2NvZGUvZHJhbWFsaW5nLXZvY2FiLWxlYXJuaW5nL2Zyb250ZW5kL2FwcC9nbG9iYWxzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBcIjQxOTY1NDNkNTZiZlwiXG5pZiAobW9kdWxlLmhvdCkgeyBtb2R1bGUuaG90LmFjY2VwdCgpIH1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/learn/page.275f0b5725c54220.hot-update.js b/frontend/.next/static/webpack/app/learn/page.275f0b5725c54220.hot-update.js new file mode 100644 index 0000000..a77e743 --- /dev/null +++ b/frontend/.next/static/webpack/app/learn/page.275f0b5725c54220.hot-update.js @@ -0,0 +1,52 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/learn/page",{ + +/***/ "(app-pages-browser)/./app/learn/page.tsx": +/*!****************************!*\ + !*** ./app/learn/page.tsx ***! + \****************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LearnPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _components_Navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/Navigation */ \"(app-pages-browser)/./components/Navigation.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction LearnPage() {\n _s();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n const [currentCardIndex, setCurrentCardIndex] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [isFlipped, setIsFlipped] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('flip');\n const [score, setScore] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n correct: 0,\n total: 0\n });\n const [selectedAnswer, setSelectedAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showResult, setShowResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [fillAnswer, setFillAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [showHint, setShowHint] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [isRecording, setIsRecording] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [audioPlaying, setAudioPlaying] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [modalImage, setModalImage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showReportModal, setShowReportModal] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [reportReason, setReportReason] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [reportingCard, setReportingCard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Mock data with real example images\n const cards = [\n {\n id: 1,\n word: 'brought',\n partOfSpeech: 'verb',\n pronunciation: '/brɔːt/',\n translation: '提出、帶來',\n definition: 'Past tense of bring; to mention or introduce a topic in conversation',\n example: 'He brought this thing up during our meeting and no one agreed.',\n exampleTranslation: '他在我們的會議中提出了這件事,但沒有人同意。',\n exampleImage: '/images/examples/bring_up.png',\n synonyms: [\n 'mentioned',\n 'raised',\n 'introduced'\n ],\n difficulty: 'B1'\n },\n {\n id: 2,\n word: 'instincts',\n partOfSpeech: 'noun',\n pronunciation: '/ˈɪnstɪŋkts/',\n translation: '本能、直覺',\n definition: 'Natural abilities that help living things survive without learning',\n example: 'Animals use their instincts to find food and stay safe.',\n exampleTranslation: '動物利用本能來尋找食物並保持安全。',\n exampleImage: '/images/examples/instinct.png',\n synonyms: [\n 'intuition',\n 'impulse',\n 'tendency'\n ],\n difficulty: 'B2'\n },\n {\n id: 3,\n word: 'warrants',\n partOfSpeech: 'noun',\n pronunciation: '/ˈwɔːrənts/',\n translation: '搜查令、授權令',\n definition: 'Official documents that give police permission to do something',\n example: 'The police obtained warrants to search the building.',\n exampleTranslation: '警方取得了搜查令來搜查這棟建築物。',\n exampleImage: '/images/examples/warrant.png',\n synonyms: [\n 'authorization',\n 'permit',\n 'license'\n ],\n difficulty: 'C1'\n }\n ];\n const currentCard = cards[currentCardIndex];\n // Quiz mode options - dynamically generate from current cards\n const quizOptions = [\n cards[currentCardIndex].translation,\n ...cards.filter((_, idx)=>idx !== currentCardIndex).map((card)=>card.translation).slice(0, 2),\n '建議、提議' // additional wrong option\n ].sort(()=>Math.random() - 0.5) // shuffle options\n ;\n const handleFlip = ()=>{\n setIsFlipped(!isFlipped);\n };\n const handleNext = ()=>{\n if (currentCardIndex < cards.length - 1) {\n setCurrentCardIndex(currentCardIndex + 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handlePrevious = ()=>{\n if (currentCardIndex > 0) {\n setCurrentCardIndex(currentCardIndex - 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handleDifficultyRate = (rating)=>{\n // Mock rating logic\n console.log(\"Rated \".concat(rating, \" for \").concat(currentCard.word));\n handleNext();\n };\n const handleQuizAnswer = (answer)=>{\n setSelectedAnswer(answer);\n setShowResult(true);\n if (answer === currentCard.translation) {\n setScore({\n ...score,\n correct: score.correct + 1,\n total: score.total + 1\n });\n } else {\n setScore({\n ...score,\n total: score.total + 1\n });\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_Navigation__WEBPACK_IMPORTED_MODULE_3__.Navigation, {\n showExitLearning: true,\n onExitLearning: ()=>router.push('/dashboard')\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 125,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-4xl mx-auto px-4 py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: \"進度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 134,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n currentCardIndex + 1,\n \" / \",\n cards.length\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 135,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 133,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full bg-gray-200 rounded-full h-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-primary h-2 rounded-full transition-all\",\n style: {\n width: \"\".concat((currentCardIndex + 1) / cards.length * 100, \"%\")\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 140,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 139,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 132,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-sm p-1 inline-flex flex-wrap\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('flip'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'flip' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"翻卡模式\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 150,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('quiz'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'quiz' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"選擇題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 160,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('fill'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'fill' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"填空題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 170,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('listening'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'listening' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"聽力測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 180,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('speaking'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'speaking' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"口說測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 190,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 149,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 148,\n columnNumber: 9\n }, this),\n mode === 'flip' ? /* Flip Card Mode */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 217,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 216,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 208,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full h-96 cursor-pointer\",\n onClick: handleFlip,\n style: {\n perspective: '1000px'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full transition-transform duration-600 \".concat(isFlipped ? 'rotate-y-180' : ''),\n style: {\n transformStyle: 'preserve-3d',\n transform: isFlipped ? 'rotateY(180deg)' : 'rotateY(0deg)'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 flex flex-col items-center justify-center\",\n style: {\n backfaceVisibility: 'hidden'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-4xl font-bold text-gray-900 mb-4\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 242,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-600 mb-2\",\n children: currentCard.partOfSpeech\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 245,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 248,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8 text-sm text-gray-400\",\n children: \"點擊翻轉查看答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 251,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 238,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 overflow-y-auto\",\n style: {\n backfaceVisibility: 'hidden',\n transform: 'rotateY(180deg)'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-1\",\n children: \"翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 266,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-bold text-gray-900\",\n children: currentCard.translation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 267,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 265,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"定義\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 270,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 271,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 269,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 274,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 275,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 text-sm mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 276,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 273,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"同義詞\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 279,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-2\",\n children: currentCard.synonyms.map((syn, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"px-3 py-1 bg-gray-100 rounded-full text-sm\",\n children: syn\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 282,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 280,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 278,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 264,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 257,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 228,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 223,\n columnNumber: 13\n }, this),\n isFlipped && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-600\",\n children: \"這個單字對你來說難度如何?\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 297,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 296,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(1),\n className: \"px-4 py-2 bg-red-100 text-red-700 rounded-lg hover:bg-red-200 transition-colors\",\n children: \"\\uD83D\\uDE14 完全不記得\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 300,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(3),\n className: \"px-4 py-2 bg-yellow-100 text-yellow-700 rounded-lg hover:bg-yellow-200 transition-colors\",\n children: \"\\uD83D\\uDE10 有點困難\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 306,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(5),\n className: \"px-4 py-2 bg-green-100 text-green-700 rounded-lg hover:bg-green-200 transition-colors\",\n children: \"\\uD83D\\uDE0A 很簡單\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 312,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 295,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 205,\n columnNumber: 11\n }, this) : mode === 'quiz' ? /* Quiz Mode - 選擇題:英文定義選中文翻譯 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 336,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 335,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 327,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 326,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"根據定義選擇正確的中文翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 344,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 345,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 mt-2\",\n children: [\n \"(\",\n currentCard.partOfSpeech,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 348,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 343,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: quizOptions.map((option, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(option),\n disabled: showResult,\n className: \"w-full p-4 text-left rounded-lg border-2 transition-all \".concat(showResult && option === currentCard.translation ? 'border-green-500 bg-green-50' : showResult && option === selectedAnswer && option !== currentCard.translation ? 'border-red-500 bg-red-50' : selectedAnswer === option ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: option\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 370,\n columnNumber: 21\n }, this),\n showResult && option === currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-green-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 373,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 372,\n columnNumber: 23\n }, this),\n showResult && option === selectedAnswer && option !== currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-red-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 378,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 377,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 369,\n columnNumber: 19\n }, this)\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 355,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 353,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 342,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 324,\n columnNumber: 11\n }, this) : mode === 'fill' ? /* Fill in the Blank Mode - 填空題 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 402,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 401,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 393,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 392,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"根據例句圖片和句子填入正確的詞彙\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 410,\n columnNumber: 17\n }, this),\n currentCard.exampleImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: currentCard.exampleImage,\n alt: \"Example context\",\n className: \"w-full rounded-lg shadow-md cursor-pointer hover:shadow-lg transition-shadow\",\n style: {\n maxHeight: '400px',\n objectFit: 'contain'\n },\n onClick: ()=>setModalImage(currentCard.exampleImage)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 415,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-gray-500 mt-2 text-center\",\n children: \"點擊圖片可放大查看\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 422,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 414,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-800 mb-4\",\n children: currentCard.example.split(currentCard.word).map((part, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n part,\n i < currentCard.example.split(currentCard.word).length - 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block w-32 border-b-2 border-gray-400 mx-1\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 432,\n columnNumber: 23\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 429,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 427,\n columnNumber: 15\n }, this),\n !showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowHint(true),\n className: \"text-sm text-primary hover:text-primary-hover flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 445,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 444,\n columnNumber: 19\n }, this),\n \"點擊查看提示\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 440,\n columnNumber: 17\n }, this),\n showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 bg-blue-50 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-blue-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"定義提示:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 455,\n columnNumber: 21\n }, this),\n \" \",\n currentCard.definition\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 454,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 453,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 409,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: fillAnswer,\n onChange: (e)=>setFillAnswer(e.target.value),\n placeholder: \"輸入答案...\",\n className: \"w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:border-primary focus:outline-none text-lg\",\n onKeyPress: (e)=>{\n if (e.key === 'Enter' && fillAnswer) {\n setShowResult(true);\n }\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 463,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 462,\n columnNumber: 13\n }, this),\n !showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>fillAnswer && setShowResult(true),\n disabled: !fillAnswer,\n className: \"w-full py-3 bg-primary text-white rounded-lg font-medium hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: \"提交答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 479,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 rounded-lg \".concat(fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'bg-green-50 border-2 border-green-500' : 'bg-red-50 border-2 border-red-500'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold \".concat(fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'text-green-700' : 'text-red-700'),\n children: fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? '✓ 正確!' : '✗ 錯誤'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 496,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 495,\n columnNumber: 17\n }, this),\n fillAnswer.toLowerCase() !== currentCard.word.toLowerCase() && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-700\",\n children: [\n \"正確答案:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-bold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 506,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 505,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-semibold mb-1\",\n children: \"完整例句:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 510,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 511,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 512,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 509,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 490,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 408,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 390,\n columnNumber: 11\n }, this) : mode === 'listening' ? /* Listening Test Mode - 聽力測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 532,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 531,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 523,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 522,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"聽音頻,選擇正確的單字\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 540,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setAudioPlaying(true);\n // Simulate audio playing\n setTimeout(()=>setAudioPlaying(false), 2000);\n },\n className: \"mx-auto mb-6 p-8 bg-gray-100 rounded-full hover:bg-gray-200 transition-colors\",\n children: audioPlaying ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-primary animate-pulse\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 553,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 552,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-gray-600\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 557,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 558,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 556,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 543,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500\",\n children: \"點擊播放按鈕聽發音\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 563,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 539,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-3\",\n children: [\n currentCard.word,\n 'determine',\n 'achieve',\n 'consider'\n ].map((word)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(word),\n disabled: showResult,\n className: \"p-4 text-lg font-medium rounded-lg border-2 transition-all \".concat(showResult && word === currentCard.word ? 'border-green-500 bg-green-50' : showResult && word === selectedAnswer && word !== currentCard.word ? 'border-red-500 bg-red-50' : selectedAnswer === word ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'),\n children: word\n }, word, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 569,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 567,\n columnNumber: 13\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-gray-50 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-2\",\n children: \"單字詳情\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 591,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 594,\n columnNumber: 21\n }, this),\n \" - \",\n currentCard.translation\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 593,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 596,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 italic\",\n children: [\n '\"',\n currentCard.example,\n '\"'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 597,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 592,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 590,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 538,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 520,\n columnNumber: 11\n }, this) : mode === 'speaking' ? /* Speaking Test Mode - 口說測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 617,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 616,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 608,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 607,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"念出以下例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 625,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 bg-gray-50 rounded-lg mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed mb-3\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 629,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 632,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 628,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"重點單字發音:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 639,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold text-lg\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 641,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 642,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-primary hover:text-primary-hover\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 645,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 644,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 643,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 640,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 638,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setIsRecording(!isRecording);\n if (!isRecording) {\n // Start recording\n setTimeout(()=>{\n setIsRecording(false);\n setShowResult(true);\n }, 3000);\n }\n },\n className: \"p-6 rounded-full transition-all \".concat(isRecording ? 'bg-red-500 hover:bg-red-600 animate-pulse' : 'bg-primary hover:bg-primary-hover'),\n children: isRecording ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 672,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 673,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 671,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 677,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 676,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 653,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: isRecording ? '錄音中... 點擊停止' : '點擊開始錄音'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 681,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 652,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-green-50 border-2 border-green-500 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-green-700 font-semibold mb-2\",\n children: \"✓ 完成口說練習!\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 689,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: \"提示:持續練習可以提高發音準確度和流暢度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 692,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 688,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 624,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 623,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 605,\n columnNumber: 11\n }, this) : null,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handlePrevious,\n disabled: currentCardIndex === 0,\n className: \"flex items-center space-x-2 px-6 py-3 bg-white rounded-lg shadow-sm hover:shadow-md transition-shadow disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 19l-7-7 7-7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 710,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 709,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"上一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 712,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 704,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleNext,\n disabled: currentCardIndex === cards.length - 1,\n className: \"flex items-center space-x-2 px-6 py-3 bg-primary text-white rounded-lg shadow-sm hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"下一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 720,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 5l7 7-7 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 722,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 721,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 715,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 703,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 130,\n columnNumber: 7\n }, this),\n modalImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-75 p-4\",\n onClick: ()=>setModalImage(null),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative max-w-4xl max-h-[90vh] bg-white rounded-lg overflow-hidden\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setModalImage(null),\n className: \"absolute top-2 right-2 z-10 p-2 bg-white bg-opacity-90 rounded-full hover:bg-opacity-100 transition-all shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-gray-700\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 744,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 743,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 739,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: modalImage,\n alt: \"Example context enlarged\",\n className: \"w-full h-full object-contain\",\n style: {\n maxHeight: 'calc(90vh - 2rem)'\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 750,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 749,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 734,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 730,\n columnNumber: 9\n }, this),\n showReportModal && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4\",\n onClick: ()=>setShowReportModal(false),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-xl max-w-md w-full p-6\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: \"回報錯誤\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 772,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowReportModal(false),\n className: \"text-gray-400 hover:text-gray-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 778,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 777,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 773,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 771,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"詞卡:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: reportingCard === null || reportingCard === void 0 ? void 0 : reportingCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 785,\n columnNumber: 20\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 784,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"測驗模式:\",\n mode === 'flip' ? '翻卡模式' : mode === 'quiz' ? '選擇題' : mode === 'fill' ? '填空題' : mode === 'listening' ? '聽力測試' : '口說測試'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 787,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 783,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"錯誤原因(選填)\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 793,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n value: reportReason,\n onChange: (e)=>setReportReason(e.target.value),\n placeholder: \"請描述錯誤內容...\",\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-primary focus:border-primary\",\n rows: 3\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 796,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 792,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // Submit error report\n console.log('Error reported:', {\n card: reportingCard,\n mode,\n reason: reportReason\n });\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n // Show success message (could add a toast notification here)\n alert('感謝您的回報,我們會盡快處理!');\n },\n className: \"flex-1 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-hover transition-colors\",\n children: \"送出回報\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 806,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n },\n className: \"flex-1 px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition-colors\",\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 824,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 805,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 767,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 763,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 123,\n columnNumber: 5\n }, this);\n}\n_s(LearnPage, \"A33pHe7n/okUhfaMoz3QjZYl284=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter\n ];\n});\n_c = LearnPage;\nvar _c;\n$RefreshReg$(_c, \"LearnPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q2IsOERBQUNnRDtvQ0FBTWhELFdBQVU7OENBQStDOzs7Ozs7OENBR2hFLDhEQUFDaUQ7b0NBQ0NaLE9BQU8zRTtvQ0FDUDRFLFVBQVUsQ0FBQ0MsSUFBTTVFLGdCQUFnQjRFLEVBQUVDLE1BQU0sQ0FBQ0gsS0FBSztvQ0FDL0NJLGFBQVk7b0NBQ1p6QyxXQUFVO29DQUNWa0QsTUFBTTs7Ozs7Ozs7Ozs7O3NDQUlWLDhEQUFDbkQ7NEJBQUlDLFdBQVU7OzhDQUNiLDhEQUFDTztvQ0FDQ0MsU0FBUzt3Q0FDUCxzQkFBc0I7d0NBQ3RCYixRQUFRQyxHQUFHLENBQUMsbUJBQW1COzRDQUM3QlosTUFBTXBCOzRDQUNOeEI7NENBQ0ErRyxRQUFRekY7d0NBQ1Y7d0NBQ0FELG1CQUFtQjt3Q0FDbkJFLGdCQUFnQjt3Q0FDaEJFLGlCQUFpQjt3Q0FDakIsNkRBQTZEO3dDQUM3RHVGLE1BQU07b0NBQ1I7b0NBQ0FwRCxXQUFVOzhDQUNYOzs7Ozs7OENBR0QsOERBQUNPO29DQUNDQyxTQUFTO3dDQUNQL0MsbUJBQW1CO3dDQUNuQkUsZ0JBQWdCO3dDQUNoQkUsaUJBQWlCO29DQUNuQjtvQ0FDQW1DLFdBQVU7OENBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU2Y7R0FoMEJ3QmxFOztRQUNQRixzREFBU0E7OztLQURGRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvYXBwL2xlYXJuL3BhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xuaW1wb3J0IHsgTmF2aWdhdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9OYXZpZ2F0aW9uJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMZWFyblBhZ2UoKSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gIGNvbnN0IFtjdXJyZW50Q2FyZEluZGV4LCBzZXRDdXJyZW50Q2FyZEluZGV4XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc0ZsaXBwZWQsIHNldElzRmxpcHBlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGUsIHNldE1vZGVdID0gdXNlU3RhdGU8J2ZsaXAnIHwgJ3F1aXonIHwgJ2ZpbGwnIHwgJ2xpc3RlbmluZycgfCAnc3BlYWtpbmcnPignZmxpcCcpXG4gIGNvbnN0IFtzY29yZSwgc2V0U2NvcmVdID0gdXNlU3RhdGUoeyBjb3JyZWN0OiAwLCB0b3RhbDogMCB9KVxuICBjb25zdCBbc2VsZWN0ZWRBbnN3ZXIsIHNldFNlbGVjdGVkQW5zd2VyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93UmVzdWx0LCBzZXRTaG93UmVzdWx0XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZmlsbEFuc3dlciwgc2V0RmlsbEFuc3dlcl0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3Nob3dIaW50LCBzZXRTaG93SGludF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzUmVjb3JkaW5nLCBzZXRJc1JlY29yZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2F1ZGlvUGxheWluZywgc2V0QXVkaW9QbGF5aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxJbWFnZSwgc2V0TW9kYWxJbWFnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1JlcG9ydE1vZGFsLCBzZXRTaG93UmVwb3J0TW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtyZXBvcnRSZWFzb24sIHNldFJlcG9ydFJlYXNvbl0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3JlcG9ydGluZ0NhcmQsIHNldFJlcG9ydGluZ0NhcmRdID0gdXNlU3RhdGU8YW55PihudWxsKVxuXG4gIC8vIE1vY2sgZGF0YSB3aXRoIHJlYWwgZXhhbXBsZSBpbWFnZXNcbiAgY29uc3QgY2FyZHMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICB3b3JkOiAnYnJvdWdodCcsXG4gICAgICBwYXJ0T2ZTcGVlY2g6ICd2ZXJiJyxcbiAgICAgIHByb251bmNpYXRpb246ICcvYnLJlMuQdC8nLFxuICAgICAgdHJhbnNsYXRpb246ICfmj5Dlh7rjgIHluLbkvoYnLFxuICAgICAgZGVmaW5pdGlvbjogJ1Bhc3QgdGVuc2Ugb2YgYnJpbmc7IHRvIG1lbnRpb24gb3IgaW50cm9kdWNlIGEgdG9waWMgaW4gY29udmVyc2F0aW9uJyxcbiAgICAgIGV4YW1wbGU6ICdIZSBicm91Z2h0IHRoaXMgdGhpbmcgdXAgZHVyaW5nIG91ciBtZWV0aW5nIGFuZCBubyBvbmUgYWdyZWVkLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICfku5blnKjmiJHlgJHnmoTmnIPorbDkuK3mj5Dlh7rkuobpgJnku7bkuovvvIzkvYbmspLmnInkurrlkIzmhI/jgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy9icmluZ191cC5wbmcnLFxuICAgICAgc3lub255bXM6IFsnbWVudGlvbmVkJywgJ3JhaXNlZCcsICdpbnRyb2R1Y2VkJ10sXG4gICAgICBkaWZmaWN1bHR5OiAnQjEnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHdvcmQ6ICdpbnN0aW5jdHMnLFxuICAgICAgcGFydE9mU3BlZWNoOiAnbm91bicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL8uIyapuc3TJqsWLa3RzLycsXG4gICAgICB0cmFuc2xhdGlvbjogJ+acrOiDveOAgeebtOimuicsXG4gICAgICBkZWZpbml0aW9uOiAnTmF0dXJhbCBhYmlsaXRpZXMgdGhhdCBoZWxwIGxpdmluZyB0aGluZ3Mgc3Vydml2ZSB3aXRob3V0IGxlYXJuaW5nJyxcbiAgICAgIGV4YW1wbGU6ICdBbmltYWxzIHVzZSB0aGVpciBpbnN0aW5jdHMgdG8gZmluZCBmb29kIGFuZCBzdGF5IHNhZmUuJyxcbiAgICAgIGV4YW1wbGVUcmFuc2xhdGlvbjogJ+WLleeJqeWIqeeUqOacrOiDveS+huWwi+aJvumjn+eJqeS4puS/neaMgeWuieWFqOOAgicsXG4gICAgICBleGFtcGxlSW1hZ2U6ICcvaW1hZ2VzL2V4YW1wbGVzL2luc3RpbmN0LnBuZycsXG4gICAgICBzeW5vbnltczogWydpbnR1aXRpb24nLCAnaW1wdWxzZScsICd0ZW5kZW5jeSddLFxuICAgICAgZGlmZmljdWx0eTogJ0IyJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDMsXG4gICAgICB3b3JkOiAnd2FycmFudHMnLFxuICAgICAgcGFydE9mU3BlZWNoOiAnbm91bicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL8uId8mUy5ByyZludHMvJyxcbiAgICAgIHRyYW5zbGF0aW9uOiAn5pCc5p+l5Luk44CB5o6I5qyK5LukJyxcbiAgICAgIGRlZmluaXRpb246ICdPZmZpY2lhbCBkb2N1bWVudHMgdGhhdCBnaXZlIHBvbGljZSBwZXJtaXNzaW9uIHRvIGRvIHNvbWV0aGluZycsXG4gICAgICBleGFtcGxlOiAnVGhlIHBvbGljZSBvYnRhaW5lZCB3YXJyYW50cyB0byBzZWFyY2ggdGhlIGJ1aWxkaW5nLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICforabmlrnlj5blvpfkuobmkJzmn6Xku6TkvobmkJzmn6XpgJnmo5/lu7rnr4nnianjgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy93YXJyYW50LnBuZycsXG4gICAgICBzeW5vbnltczogWydhdXRob3JpemF0aW9uJywgJ3Blcm1pdCcsICdsaWNlbnNlJ10sXG4gICAgICBkaWZmaWN1bHR5OiAnQzEnXG4gICAgfVxuICBdXG5cbiAgY29uc3QgY3VycmVudENhcmQgPSBjYXJkc1tjdXJyZW50Q2FyZEluZGV4XVxuXG4gIC8vIFF1aXogbW9kZSBvcHRpb25zIC0gZHluYW1pY2FsbHkgZ2VuZXJhdGUgZnJvbSBjdXJyZW50IGNhcmRzXG4gIGNvbnN0IHF1aXpPcHRpb25zID0gW1xuICAgIGNhcmRzW2N1cnJlbnRDYXJkSW5kZXhdLnRyYW5zbGF0aW9uLFxuICAgIC4uLmNhcmRzXG4gICAgICAuZmlsdGVyKChfLCBpZHgpID0+IGlkeCAhPT0gY3VycmVudENhcmRJbmRleClcbiAgICAgIC5tYXAoY2FyZCA9PiBjYXJkLnRyYW5zbGF0aW9uKVxuICAgICAgLnNsaWNlKDAsIDIpLFxuICAgICflu7rorbDjgIHmj5DorbAnIC8vIGFkZGl0aW9uYWwgd3Jvbmcgb3B0aW9uXG4gIF0uc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KSAvLyBzaHVmZmxlIG9wdGlvbnNcblxuICBjb25zdCBoYW5kbGVGbGlwID0gKCkgPT4ge1xuICAgIHNldElzRmxpcHBlZCghaXNGbGlwcGVkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlTmV4dCA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudENhcmRJbmRleCA8IGNhcmRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHNldEN1cnJlbnRDYXJkSW5kZXgoY3VycmVudENhcmRJbmRleCArIDEpXG4gICAgICBzZXRJc0ZsaXBwZWQoZmFsc2UpXG4gICAgICBzZXRTZWxlY3RlZEFuc3dlcihudWxsKVxuICAgICAgc2V0U2hvd1Jlc3VsdChmYWxzZSlcbiAgICAgIHNldEZpbGxBbnN3ZXIoJycpXG4gICAgICBzZXRTaG93SGludChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVQcmV2aW91cyA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudENhcmRJbmRleCA+IDApIHtcbiAgICAgIHNldEN1cnJlbnRDYXJkSW5kZXgoY3VycmVudENhcmRJbmRleCAtIDEpXG4gICAgICBzZXRJc0ZsaXBwZWQoZmFsc2UpXG4gICAgICBzZXRTZWxlY3RlZEFuc3dlcihudWxsKVxuICAgICAgc2V0U2hvd1Jlc3VsdChmYWxzZSlcbiAgICAgIHNldEZpbGxBbnN3ZXIoJycpXG4gICAgICBzZXRTaG93SGludChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEaWZmaWN1bHR5UmF0ZSA9IChyYXRpbmc6IG51bWJlcikgPT4ge1xuICAgIC8vIE1vY2sgcmF0aW5nIGxvZ2ljXG4gICAgY29uc29sZS5sb2coYFJhdGVkICR7cmF0aW5nfSBmb3IgJHtjdXJyZW50Q2FyZC53b3JkfWApXG4gICAgaGFuZGxlTmV4dCgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVRdWl6QW5zd2VyID0gKGFuc3dlcjogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRBbnN3ZXIoYW5zd2VyKVxuICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICBpZiAoYW5zd2VyID09PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbikge1xuICAgICAgc2V0U2NvcmUoeyAuLi5zY29yZSwgY29ycmVjdDogc2NvcmUuY29ycmVjdCArIDEsIHRvdGFsOiBzY29yZS50b3RhbCArIDEgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2NvcmUoeyAuLi5zY29yZSwgdG90YWw6IHNjb3JlLnRvdGFsICsgMSB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1ibHVlLTUwIHRvLWluZGlnby0xMDBcIj5cbiAgICAgIHsvKiBOYXZpZ2F0aW9uICovfVxuICAgICAgPE5hdmlnYXRpb25cbiAgICAgICAgc2hvd0V4aXRMZWFybmluZz17dHJ1ZX1cbiAgICAgICAgb25FeGl0TGVhcm5pbmc9eygpID0+IHJvdXRlci5wdXNoKCcvZGFzaGJvYXJkJyl9XG4gICAgICAvPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTR4bCBteC1hdXRvIHB4LTQgcHktOFwiPlxuICAgICAgICB7LyogUHJvZ3Jlc3MgQmFyICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLThcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj7pgLLluqY8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAge2N1cnJlbnRDYXJkSW5kZXggKyAxfSAvIHtjYXJkcy5sZW5ndGh9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIGgtMlwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IGgtMiByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1hbGxcIlxuICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogYCR7KChjdXJyZW50Q2FyZEluZGV4ICsgMSkgLyBjYXJkcy5sZW5ndGgpICogMTAwfSVgIH19XG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBNb2RlIFRvZ2dsZSAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIG1iLTZcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LXNtIHAtMSBpbmxpbmUtZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnZmxpcCcpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdmbGlwJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg57+75Y2h5qih5byPXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgncXVpeicpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdxdWl6J1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg6YG45pOH6aGMXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnZmlsbCcpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdmaWxsJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg5aGr56m66aGMXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnbGlzdGVuaW5nJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ2xpc3RlbmluZydcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOiBveWKm+a4rOipplxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ3NwZWFraW5nJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ3NwZWFraW5nJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg5Y+j6Kqq5ris6KmmXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAge21vZGUgPT09ICdmbGlwJyA/IChcbiAgICAgICAgICAvKiBGbGlwIENhcmQgTW9kZSAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBGbGlwIE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLTk2IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRmxpcH1cbiAgICAgICAgICAgICAgc3R5bGU9e3sgcGVyc3BlY3RpdmU6ICcxMDAwcHgnIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BhYnNvbHV0ZSB3LWZ1bGwgaC1mdWxsIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTYwMCAke1xuICAgICAgICAgICAgICAgICAgaXNGbGlwcGVkID8gJ3JvdGF0ZS15LTE4MCcgOiAnJ1xuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHlsZTogJ3ByZXNlcnZlLTNkJyxcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogaXNGbGlwcGVkID8gJ3JvdGF0ZVkoMTgwZGVnKScgOiAncm90YXRlWSgwZGVnKSdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgey8qIEZyb250IG9mIGNhcmQgKi99XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCBiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tmYWNlVmlzaWJpbGl0eTogJ2hpZGRlbicgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtNHhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTRcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLndvcmR9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LWdyYXktNjAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnBhcnRPZlNwZWVjaH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxnIHRleHQtZ3JheS01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnByb251bmNpYXRpb259XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtOCB0ZXh0LXNtIHRleHQtZ3JheS00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg6bue5pOK57+76L2J5p+l55yL562U5qGIXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIHsvKiBCYWNrIG9mIGNhcmQgKi99XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCBiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04IG92ZXJmbG93LXktYXV0b1wiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBcbiAgICAgICAgICAgICAgICAgICAgYmFja2ZhY2VWaXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlWSgxODBkZWcpJ1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPue/u+itrzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDBcIj57Y3VycmVudENhcmQudHJhbnNsYXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPuWumue+qTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMFwiPntjdXJyZW50Q2FyZC5kZWZpbml0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTFcIj7kvovlj6U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDBcIj57Y3VycmVudENhcmQuZXhhbXBsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgdGV4dC1zbSBtdC0xXCI+e2N1cnJlbnRDYXJkLmV4YW1wbGVUcmFuc2xhdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCBtYi0xXCI+5ZCM576p6KmePC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnN5bm9ueW1zLm1hcCgoc3luLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtpZHh9IGNsYXNzTmFtZT1cInB4LTMgcHktMSBiZy1ncmF5LTEwMCByb3VuZGVkLWZ1bGwgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzeW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogRGlmZmljdWx0eSBSYXRpbmcgKi99XG4gICAgICAgICAgICB7aXNGbGlwcGVkICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC04XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+6YCZ5YCL5Zau5a2X5bCN5L2g5L6G6Kqq6Zuj5bqm5aaC5L2V77yfPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRGlmZmljdWx0eVJhdGUoMSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy1yZWQtMTAwIHRleHQtcmVkLTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLXJlZC0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDwn5iUIOWujOWFqOS4jeiomOW+l1xuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURpZmZpY3VsdHlSYXRlKDMpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC00IHB5LTIgYmcteWVsbG93LTEwMCB0ZXh0LXllbGxvdy03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy15ZWxsb3ctMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg8J+YkCDmnInpu57lm7Dpm6NcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEaWZmaWN1bHR5UmF0ZSg1KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNCBweS0yIGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyZWVuLTIwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIPCfmIog5b6I57Ch5ZauXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ3F1aXonID8gKFxuICAgICAgICAgIC8qIFF1aXogTW9kZSAtIOmBuOaTh+mhjO+8muiLseaWh+Wumue+qemBuOS4reaWh+e/u+itryAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBRdWl6IE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLThcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPuagueaTmuWumue+qemBuOaTh+ato+eiuueahOS4reaWh+e/u+itrzwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14bCB0ZXh0LWdyYXktODAwIGxlYWRpbmctcmVsYXhlZFwiPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmRlZmluaXRpb259XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDAgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgKHtjdXJyZW50Q2FyZC5wYXJ0T2ZTcGVlY2h9KVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICAgICAge3F1aXpPcHRpb25zLm1hcCgob3B0aW9uLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e2lkeH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFzaG93UmVzdWx0ICYmIGhhbmRsZVF1aXpBbnN3ZXIob3B0aW9uKX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzaG93UmVzdWx0fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHAtNCB0ZXh0LWxlZnQgcm91bmRlZC1sZyBib3JkZXItMiB0cmFuc2l0aW9uLWFsbCAke1xuICAgICAgICAgICAgICAgICAgICBzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gY3VycmVudENhcmQudHJhbnNsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItZ3JlZW4tNTAwIGJnLWdyZWVuLTUwJ1xuICAgICAgICAgICAgICAgICAgICAgIDogc2hvd1Jlc3VsdCAmJiBvcHRpb24gPT09IHNlbGVjdGVkQW5zd2VyICYmIG9wdGlvbiAhPT0gY3VycmVudENhcmQudHJhbnNsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZEFuc3dlciA9PT0gb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgYmctcHJpbWFyeS1saWdodCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItZ3JheS0yMDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwJ1xuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57b3B0aW9ufTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3Nob3dSZXN1bHQgJiYgb3B0aW9uID09PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtZ3JlZW4tNTAwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNSAxM2w0IDRMMTkgN1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gc2VsZWN0ZWRBbnN3ZXIgJiYgb3B0aW9uICE9PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtcmVkLTUwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ2ZpbGwnID8gKFxuICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIEJsYW5rIE1vZGUgLSDloavnqbrpoYwgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgRmlsbCBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTRcIj7moLnmk5rkvovlj6XlnJbniYflkozlj6XlrZDloavlhaXmraPnorrnmoToqZ7lvZk8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogRXhhbXBsZSBJbWFnZSAqL31cbiAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGVJbWFnZSAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIHNyYz17Y3VycmVudENhcmQuZXhhbXBsZUltYWdlfVxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJFeGFtcGxlIGNvbnRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1sZyBzaGFkb3ctbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6c2hhZG93LWxnIHRyYW5zaXRpb24tc2hhZG93XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWF4SGVpZ2h0OiAnNDAwcHgnLCBvYmplY3RGaXQ6ICdjb250YWluJyB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RhbEltYWdlKGN1cnJlbnRDYXJkLmV4YW1wbGVJbWFnZSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMiB0ZXh0LWNlbnRlclwiPum7nuaTiuWclueJh+WPr+aUvuWkp+afpeecizwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiBFeGFtcGxlIFNlbnRlbmNlIHdpdGggQmxhbmsgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LWdyYXktODAwIG1iLTRcIj5cbiAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZXhhbXBsZS5zcGxpdChjdXJyZW50Q2FyZC53b3JkKS5tYXAoKHBhcnQsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17aX0+XG4gICAgICAgICAgICAgICAgICAgIHtwYXJ0fVxuICAgICAgICAgICAgICAgICAgICB7aSA8IGN1cnJlbnRDYXJkLmV4YW1wbGUuc3BsaXQoY3VycmVudENhcmQud29yZCkubGVuZ3RoIC0gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWJsb2NrIHctMzIgYm9yZGVyLWItMiBib3JkZXItZ3JheS00MDAgbXgtMVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIEhpbnQgQnV0dG9uICovfVxuICAgICAgICAgICAgICB7IXNob3dIaW50ICYmIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93SGludCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1wcmltYXJ5IGhvdmVyOnRleHQtcHJpbWFyeS1ob3ZlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMyAxNmgtMXYtNGgtMW0xLTRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIOm7nuaTiuafpeeci+aPkOekulxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiBEZWZpbml0aW9uIEhpbnQgKi99XG4gICAgICAgICAgICAgIHtzaG93SGludCAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHAtMyBiZy1ibHVlLTUwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWJsdWUtODAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+5a6a576p5o+Q56S677yaPC9zdHJvbmc+IHtjdXJyZW50Q2FyZC5kZWZpbml0aW9ufVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEFuc3dlciBJbnB1dCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2ZpbGxBbnN3ZXJ9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRGaWxsQW5zd2VyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIui8uOWFpeetlOahiC4uLlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTQgcHktMyBib3JkZXItMiBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBmb2N1czpib3JkZXItcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgdGV4dC1sZ1wiXG4gICAgICAgICAgICAgICAgb25LZXlQcmVzcz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiBmaWxsQW5zd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBTdWJtaXQgQnV0dG9uICovfVxuICAgICAgICAgICAgeyFzaG93UmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGxBbnN3ZXIgJiYgc2V0U2hvd1Jlc3VsdCh0cnVlKX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWZpbGxBbnN3ZXJ9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB5LTMgYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgZm9udC1tZWRpdW0gaG92ZXI6YmctcHJpbWFyeS1ob3ZlciB0cmFuc2l0aW9uLWNvbG9ycyBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDmj5DkuqTnrZTmoYhcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7LyogUmVzdWx0IERpc3BsYXkgKi99XG4gICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgcC00IHJvdW5kZWQtbGcgJHtcbiAgICAgICAgICAgICAgICBmaWxsQW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRDYXJkLndvcmQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgPyAnYmctZ3JlZW4tNTAgYm9yZGVyLTIgYm9yZGVyLWdyZWVuLTUwMCdcbiAgICAgICAgICAgICAgICAgIDogJ2JnLXJlZC01MCBib3JkZXItMiBib3JkZXItcmVkLTUwMCdcbiAgICAgICAgICAgICAgfWB9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGZvbnQtc2VtaWJvbGQgJHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LWdyZWVuLTcwMCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LXJlZC03MDAnXG4gICAgICAgICAgICAgICAgICB9YH0+XG4gICAgICAgICAgICAgICAgICAgIHtmaWxsQW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRDYXJkLndvcmQudG9Mb3dlckNhc2UoKSA/ICfinJMg5q2j56K677yBJyA6ICfinJcg6Yyv6KqkJ31cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7ZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpICE9PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKCkgJiYgKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg5q2j56K6562U5qGI77yaPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+e2N1cnJlbnRDYXJkLndvcmR9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgdGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgbWItMVwiPuWujOaVtOS+i+WPpe+8mjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdj57Y3VycmVudENhcmQuZXhhbXBsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMCBtdC0xXCI+e2N1cnJlbnRDYXJkLmV4YW1wbGVUcmFuc2xhdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBtb2RlID09PSAnbGlzdGVuaW5nJyA/IChcbiAgICAgICAgICAvKiBMaXN0ZW5pbmcgVGVzdCBNb2RlIC0g6IG95Yqb5ris6KmmICovXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgey8qIEVycm9yIFJlcG9ydCBCdXR0b24gZm9yIExpc3RlbmluZyBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTRcIj7ogb3pn7PpoLvvvIzpgbjmk4fmraPnorrnmoTllq7lrZc8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogQXVkaW8gUGxheSBCdXR0b24gKi99XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRBdWRpb1BsYXlpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlIGF1ZGlvIHBsYXlpbmdcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0QXVkaW9QbGF5aW5nKGZhbHNlKSwgMjAwMClcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14LWF1dG8gbWItNiBwLTggYmctZ3JheS0xMDAgcm91bmRlZC1mdWxsIGhvdmVyOmJnLWdyYXktMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthdWRpb1BsYXlpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctMTYgaC0xNiB0ZXh0LXByaW1hcnkgYW5pbWF0ZS1wdWxzZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTUuNTM2IDguNDY0YTUgNSAwIDAxMCA3LjA3Mm0yLjgyOC05LjlhOSA5IDAgMDEwIDEyLjcyOE01LjU4NiAxNUg0YTEgMSAwIDAxLTEtMXYtNGExIDEgMCAwMTEtMWgxLjU4Nmw0LjcwNy00LjcwN0MxMC45MjMgMy42NjMgMTIgNC4xMDkgMTIgNXYxNGMwIC44OTEtMS4wNzcgMS4zMzctMS43MDcuNzA3TDUuNTg2IDE1elwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTE2IGgtMTYgdGV4dC1ncmF5LTYwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTQuNzUyIDExLjE2OGwtMy4xOTctMi4xMzJBMSAxIDAgMDAxMCA5Ljg3djQuMjYzYTEgMSAwIDAwMS41NTUuODMybDMuMTk3LTIuMTMyYTEgMSAwIDAwMC0xLjY2NHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+6bue5pOK5pKt5pS+5oyJ6YiV6IG955m86Z+zPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIFdvcmQgT3B0aW9ucyAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtM1wiPlxuICAgICAgICAgICAgICB7W2N1cnJlbnRDYXJkLndvcmQsICdkZXRlcm1pbmUnLCAnYWNoaWV2ZScsICdjb25zaWRlciddLm1hcCgod29yZCkgPT4gKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17d29yZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFzaG93UmVzdWx0ICYmIGhhbmRsZVF1aXpBbnN3ZXIod29yZCl9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2hvd1Jlc3VsdH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHAtNCB0ZXh0LWxnIGZvbnQtbWVkaXVtIHJvdW5kZWQtbGcgYm9yZGVyLTIgdHJhbnNpdGlvbi1hbGwgJHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd1Jlc3VsdCAmJiB3b3JkID09PSBjdXJyZW50Q2FyZC53b3JkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLWdyZWVuLTUwMCBiZy1ncmVlbi01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNob3dSZXN1bHQgJiYgd29yZCA9PT0gc2VsZWN0ZWRBbnN3ZXIgJiYgd29yZCAhPT0gY3VycmVudENhcmQud29yZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkQW5zd2VyID09PSB3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgYmctcHJpbWFyeS1saWdodCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItZ3JheS0yMDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwJ1xuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3dvcmR9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBSZXN1bHQgRGlzcGxheSAqL31cbiAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IHAtNCBiZy1ncmF5LTUwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTJcIj7llq7lrZfoqbPmg4U8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZFwiPntjdXJyZW50Q2FyZC53b3JkfTwvc3Bhbj4gLSB7Y3VycmVudENhcmQudHJhbnNsYXRpb259XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+e2N1cnJlbnRDYXJkLmRlZmluaXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTUwMCBpdGFsaWNcIj5cIntjdXJyZW50Q2FyZC5leGFtcGxlfVwiPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ3NwZWFraW5nJyA/IChcbiAgICAgICAgICAvKiBTcGVha2luZyBUZXN0IE1vZGUgLSDlj6PoqqrmuKzoqaYgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgU3BlYWtpbmcgTW9kZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBtYi0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKGN1cnJlbnRDYXJkKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5Zue5aCx6Yyv6KqkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAg5Zue5aCx6Yyv6KqkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi00XCI+5b+15Ye65Lul5LiL5L6L5Y+lPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFRhcmdldCBTZW50ZW5jZSAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTYgYmctZ3JheS01MCByb3VuZGVkLWxnIG1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteGwgdGV4dC1ncmF5LTgwMCBsZWFkaW5nLXJlbGF4ZWQgbWItM1wiPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGV9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZXhhbXBsZVRyYW5zbGF0aW9ufVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogUHJvbnVuY2lhdGlvbiBHdWlkZSAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPumHjem7nuWWruWtl+eZvOmfs++8mjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgdGV4dC1sZ1wiPntjdXJyZW50Q2FyZC53b3JkfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDBcIj57Y3VycmVudENhcmQucHJvbnVuY2lhdGlvbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInRleHQtcHJpbWFyeSBob3Zlcjp0ZXh0LXByaW1hcnktaG92ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1LjUzNiA4LjQ2NGE1IDUgMCAwMTAgNy4wNzJtMi44MjgtOS45YTkgOSAwIDAxMCAxMi43MjhNNS41ODYgMTVINGExIDEgMCAwMS0xLTF2LTRhMSAxIDAgMDExLTFoMS41ODZsNC43MDctNC43MDdDMTAuOTIzIDMuNjYzIDEyIDQuMTA5IDEyIDV2MTRjMCAuODkxLTEuMDc3IDEuMzM3LTEuNzA3LjcwN0w1LjU4NiAxNXpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogUmVjb3JkaW5nIEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNSZWNvcmRpbmcoIWlzUmVjb3JkaW5nKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVjb3JkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgcmVjb3JkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJc1JlY29yZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICB9LCAzMDAwKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcC02IHJvdW5kZWQtZnVsbCB0cmFuc2l0aW9uLWFsbCAke1xuICAgICAgICAgICAgICAgICAgICBpc1JlY29yZGluZ1xuICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLXJlZC01MDAgaG92ZXI6YmctcmVkLTYwMCBhbmltYXRlLXB1bHNlJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLXByaW1hcnkgaG92ZXI6YmctcHJpbWFyeS1ob3ZlcidcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtpc1JlY29yZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTEyIGgtMTIgdGV4dC13aGl0ZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk05IDEwYTEgMSAwIDAxMS0xaDRhMSAxIDAgMDExIDF2NGExIDEgMCAwMS0xIDFoLTRhMSAxIDAgMDEtMS0xdi00elwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTEyIGgtMTIgdGV4dC13aGl0ZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xOSAxMWE3IDcgMCAwMS03IDdtMCAwYTcgNyAwIDAxLTctN203IDd2NG0wIDBIOG00IDBoNG0tNC04YTMgMyAwIDAxLTMtM1Y1YTMgMyAwIDExNiAwdjZhMyAzIDAgMDEtMyAzelwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgdGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICB7aXNSZWNvcmRpbmcgPyAn6YyE6Z+z5LitLi4uIOm7nuaTiuWBnOatoicgOiAn6bue5pOK6ZaL5aeL6YyE6Z+zJ31cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlc3VsdCBEaXNwbGF5ICovfVxuICAgICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IHAtNCBiZy1ncmVlbi01MCBib3JkZXItMiBib3JkZXItZ3JlZW4tNTAwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmVlbi03MDAgZm9udC1zZW1pYm9sZCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIOKckyDlrozmiJDlj6Poqqrnt7Tnv5LvvIFcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg5o+Q56S677ya5oyB57qM57e057+S5Y+v5Lul5o+Q6auY55m86Z+z5rqW56K65bqm5ZKM5rWB5pqi5bqmXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7LyogTmF2aWdhdGlvbiBCdXR0b25zICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIG10LThcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVQcmV2aW91c31cbiAgICAgICAgICAgIGRpc2FibGVkPXtjdXJyZW50Q2FyZEluZGV4ID09PSAwfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHB4LTYgcHktMyBiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy1zbSBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTUgMTlsLTctNyA3LTdcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8c3Bhbj7kuIrkuIDlgIs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVOZXh0fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2N1cnJlbnRDYXJkSW5kZXggPT09IGNhcmRzLmxlbmd0aCAtIDF9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgcHgtNiBweS0zIGJnLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy1zbSBob3ZlcjpiZy1wcmltYXJ5LWhvdmVyIHRyYW5zaXRpb24tY29sb3JzIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj7kuIvkuIDlgIs8L3NwYW4+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTkgNWw3IDctNyA3XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogSW1hZ2UgTW9kYWwgKi99XG4gICAgICB7bW9kYWxJbWFnZSAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmxhY2sgYmctb3BhY2l0eS03NSBwLTRcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsSW1hZ2UobnVsbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBtYXgtdy00eGwgbWF4LWgtWzkwdmhdIGJnLXdoaXRlIHJvdW5kZWQtbGcgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBDbG9zZSBCdXR0b24gKi99XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsSW1hZ2UobnVsbCl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0yIHJpZ2h0LTIgei0xMCBwLTIgYmctd2hpdGUgYmctb3BhY2l0eS05MCByb3VuZGVkLWZ1bGwgaG92ZXI6Ymctb3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1hbGwgc2hhZG93LWxnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02IHRleHQtZ3JheS03MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIHsvKiBJbWFnZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC00XCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9e21vZGFsSW1hZ2V9XG4gICAgICAgICAgICAgICAgYWx0PVwiRXhhbXBsZSBjb250ZXh0IGVubGFyZ2VkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhIZWlnaHQ6ICdjYWxjKDkwdmggLSAycmVtKScgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBFcnJvciBSZXBvcnQgTW9kYWwgKi99XG4gICAgICB7c2hvd1JlcG9ydE1vZGFsICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjayBiZy1vcGFjaXR5LTUwIHAtNFwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LXhsIG1heC13LW1kIHctZnVsbCBwLTZcIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkXCI+5Zue5aCx6Yyv6KqkPC9oMz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXBvcnRNb2RhbChmYWxzZSl9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWdyYXktNjAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgIOipnuWNoe+8mjxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3JlcG9ydGluZ0NhcmQ/LndvcmR9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgIOa4rOmpl+aooeW8j++8mnttb2RlID09PSAnZmxpcCcgPyAn57+75Y2h5qih5byPJyA6IG1vZGUgPT09ICdxdWl6JyA/ICfpgbjmk4fpoYwnIDogbW9kZSA9PT0gJ2ZpbGwnID8gJ+Whq+epuumhjCcgOiBtb2RlID09PSAnbGlzdGVuaW5nJyA/ICfogb3lipvmuKzoqaYnIDogJ+WPo+iqqua4rOippid9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICDpjK/oqqTljp/lm6DvvIjpgbjloavvvIlcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgdmFsdWU9e3JlcG9ydFJlYXNvbn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFJlcG9ydFJlYXNvbihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLoq4vmj4/ov7DpjK/oqqTlhaflrrkuLi5cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC0zIHB5LTIgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGZvY3VzOnJpbmctcHJpbWFyeSBmb2N1czpib3JkZXItcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgcm93cz17M31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1Ym1pdCBlcnJvciByZXBvcnRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciByZXBvcnRlZDonLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmQ6IHJlcG9ydGluZ0NhcmQsXG4gICAgICAgICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVwb3J0UmVhc29uXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0UmVhc29uKCcnKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChudWxsKVxuICAgICAgICAgICAgICAgICAgLy8gU2hvdyBzdWNjZXNzIG1lc3NhZ2UgKGNvdWxkIGFkZCBhIHRvYXN0IG5vdGlmaWNhdGlvbiBoZXJlKVxuICAgICAgICAgICAgICAgICAgYWxlcnQoJ+aEn+isneaCqOeahOWbnuWgse+8jOaIkeWAkeacg+eboeW/q+iZleeQhu+8gScpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcHgtNCBweS0yIGJnLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLWxnIGhvdmVyOmJnLXByaW1hcnktaG92ZXIgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg6YCB5Ye65Zue5aCxXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0UmVhc29uKCcnKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChudWxsKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHB4LTQgcHktMiBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg5Y+W5raIXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufSJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZVJvdXRlciIsIk5hdmlnYXRpb24iLCJMZWFyblBhZ2UiLCJyb3V0ZXIiLCJjdXJyZW50Q2FyZEluZGV4Iiwic2V0Q3VycmVudENhcmRJbmRleCIsImlzRmxpcHBlZCIsInNldElzRmxpcHBlZCIsIm1vZGUiLCJzZXRNb2RlIiwic2NvcmUiLCJzZXRTY29yZSIsImNvcnJlY3QiLCJ0b3RhbCIsInNlbGVjdGVkQW5zd2VyIiwic2V0U2VsZWN0ZWRBbnN3ZXIiLCJzaG93UmVzdWx0Iiwic2V0U2hvd1Jlc3VsdCIsImZpbGxBbnN3ZXIiLCJzZXRGaWxsQW5zd2VyIiwic2hvd0hpbnQiLCJzZXRTaG93SGludCIsImlzUmVjb3JkaW5nIiwic2V0SXNSZWNvcmRpbmciLCJhdWRpb1BsYXlpbmciLCJzZXRBdWRpb1BsYXlpbmciLCJtb2RhbEltYWdlIiwic2V0TW9kYWxJbWFnZSIsInNob3dSZXBvcnRNb2RhbCIsInNldFNob3dSZXBvcnRNb2RhbCIsInJlcG9ydFJlYXNvbiIsInNldFJlcG9ydFJlYXNvbiIsInJlcG9ydGluZ0NhcmQiLCJzZXRSZXBvcnRpbmdDYXJkIiwiY2FyZHMiLCJpZCIsIndvcmQiLCJwYXJ0T2ZTcGVlY2giLCJwcm9udW5jaWF0aW9uIiwidHJhbnNsYXRpb24iLCJkZWZpbml0aW9uIiwiZXhhbXBsZSIsImV4YW1wbGVUcmFuc2xhdGlvbiIsImV4YW1wbGVJbWFnZSIsInN5bm9ueW1zIiwiZGlmZmljdWx0eSIsImN1cnJlbnRDYXJkIiwicXVpek9wdGlvbnMiLCJmaWx0ZXIiLCJfIiwiaWR4IiwibWFwIiwiY2FyZCIsInNsaWNlIiwic29ydCIsIk1hdGgiLCJyYW5kb20iLCJoYW5kbGVGbGlwIiwiaGFuZGxlTmV4dCIsImxlbmd0aCIsImhhbmRsZVByZXZpb3VzIiwiaGFuZGxlRGlmZmljdWx0eVJhdGUiLCJyYXRpbmciLCJjb25zb2xlIiwibG9nIiwiaGFuZGxlUXVpekFuc3dlciIsImFuc3dlciIsImRpdiIsImNsYXNzTmFtZSIsInNob3dFeGl0TGVhcm5pbmciLCJvbkV4aXRMZWFybmluZyIsInB1c2giLCJzcGFuIiwic3R5bGUiLCJ3aWR0aCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJ0aXRsZSIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInBlcnNwZWN0aXZlIiwidHJhbnNmb3JtU3R5bGUiLCJ0cmFuc2Zvcm0iLCJiYWNrZmFjZVZpc2liaWxpdHkiLCJzeW4iLCJvcHRpb24iLCJkaXNhYmxlZCIsImltZyIsInNyYyIsImFsdCIsIm1heEhlaWdodCIsIm9iamVjdEZpdCIsInNwbGl0IiwicGFydCIsImkiLCJzdHJvbmciLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwib25LZXlQcmVzcyIsImtleSIsInRvTG93ZXJDYXNlIiwic2V0VGltZW91dCIsInN0b3BQcm9wYWdhdGlvbiIsImgzIiwibGFiZWwiLCJ0ZXh0YXJlYSIsInJvd3MiLCJyZWFzb24iLCJhbGVydCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/learn/page.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./components/Navigation.tsx": +/*!***********************************!*\ + !*** ./components/Navigation.tsx ***! + \***********************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Navigation: () => (/* binding */ Navigation)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/contexts/AuthContext */ \"(app-pages-browser)/./contexts/AuthContext.tsx\");\n/* __next_internal_client_entry_do_not_use__ Navigation auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction Navigation() {\n let { showExitLearning = false, onExitLearning } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n var _user_username_, _user_username;\n _s();\n const { user, logout } = (0,_contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth)();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname)();\n const navItems = [\n {\n href: '/dashboard',\n label: '儀表板'\n },\n {\n href: '/flashcards',\n label: '詞卡'\n },\n {\n href: '/learn',\n label: '學習'\n }\n ];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 27,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: navItems.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), {\n href: item.href,\n className: \"font-medium transition-colors \".concat(pathname === item.href ? 'text-primary' : 'text-gray-600 hover:text-gray-900'),\n children: item.label\n }, item.href, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 32,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 30,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 26,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: showExitLearning ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onExitLearning,\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 50,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"p-2 text-gray-600 hover:text-gray-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 61,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 60,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 59,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-primary rounded-full flex items-center justify-center text-white font-semibold\",\n children: (user === null || user === void 0 ? void 0 : (_user_username = user.username) === null || _user_username === void 0 ? void 0 : (_user_username_ = _user_username[0]) === null || _user_username_ === void 0 ? void 0 : _user_username_.toUpperCase()) || 'U'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: (user === null || user === void 0 ? void 0 : user.displayName) || (user === null || user === void 0 ? void 0 : user.username)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 70,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: logout,\n className: \"ml-4 text-sm text-gray-600 hover:text-gray-900\",\n children: \"登出\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 71,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 25,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/components/Navigation.tsx\",\n lineNumber: 23,\n columnNumber: 5\n }, this);\n}\n_s(Navigation, \"tHLzmZfHifuHte7SpZSOu+/8DHo=\", false, function() {\n return [\n _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_3__.useAuth,\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.usePathname\n ];\n});\n_c = Navigation;\nvar _c;\n$RefreshReg$(_c, \"Navigation\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFNEI7QUFDaUI7QUFDRztBQU96QyxTQUFTRztRQUFXLEVBQUVDLG1CQUFtQixLQUFLLEVBQUVDLGNBQWMsRUFBbUIsR0FBN0QsaUVBQWdFLENBQUM7UUF3RHZFQyxpQkFBQUE7O0lBdkRuQixNQUFNLEVBQUVBLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdMLDhEQUFPQTtJQUNoQyxNQUFNTSxXQUFXUCw0REFBV0E7SUFFNUIsTUFBTVEsV0FBVztRQUNmO1lBQUVDLE1BQU07WUFBY0MsT0FBTztRQUFNO1FBQ25DO1lBQUVELE1BQU07WUFBZUMsT0FBTztRQUFLO1FBQ25DO1lBQUVELE1BQU07WUFBVUMsT0FBTztRQUFLO0tBQy9CO0lBRUQscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVU7a0JBQ2IsNEVBQUNDO1lBQUlELFdBQVU7c0JBQ2IsNEVBQUNDO2dCQUFJRCxXQUFVOztrQ0FDYiw4REFBQ0M7d0JBQUlELFdBQVU7OzBDQUNiLDhEQUFDYixrREFBSUE7Z0NBQUNVLE1BQUs7Z0NBQWFHLFdBQVU7MENBQWtDOzs7Ozs7MENBR3BFLDhEQUFDQztnQ0FBSUQsV0FBVTswQ0FDWkosU0FBU00sR0FBRyxDQUFDLENBQUNDLHFCQUNiLDhEQUFDaEIsa0RBQUlBO3dDQUVIVSxNQUFNTSxLQUFLTixJQUFJO3dDQUNmRyxXQUFXLGlDQUlWLE9BSENMLGFBQWFRLEtBQUtOLElBQUksR0FDbEIsaUJBQ0E7a0RBR0xNLEtBQUtMLEtBQUs7dUNBUk5LLEtBQUtOLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBY3RCLDhEQUFDSTt3QkFBSUQsV0FBVTtrQ0FFWlQsaUNBQ0MsOERBQUNhOzRCQUNDQyxTQUFTYjs0QkFDVFEsV0FBVTtzQ0FDWDs7Ozs7aURBSUQ7OzhDQUVFLDhEQUFDSTtvQ0FBT0osV0FBVTs4Q0FDaEIsNEVBQUNNO3dDQUFJTixXQUFVO3dDQUFVTyxNQUFLO3dDQUFPQyxRQUFPO3dDQUFlQyxTQUFRO2tEQUNqRSw0RUFBQ0M7NENBQUtDLGVBQWM7NENBQVFDLGdCQUFlOzRDQUFRQyxhQUFhOzRDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzhDQUt6RSw4REFBQ2I7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTtzREFDWlAsQ0FBQUEsaUJBQUFBLDRCQUFBQSxpQkFBQUEsS0FBTXNCLFFBQVEsY0FBZHRCLHNDQUFBQSxrQkFBQUEsY0FBZ0IsQ0FBQyxFQUFFLGNBQW5CQSxzQ0FBQUEsZ0JBQXFCdUIsV0FBVyxPQUFNOzs7Ozs7c0RBRXpDLDhEQUFDQzs0Q0FBS2pCLFdBQVU7c0RBQXVCUCxDQUFBQSxpQkFBQUEsMkJBQUFBLEtBQU15QixXQUFXLE1BQUl6QixpQkFBQUEsMkJBQUFBLEtBQU1zQixRQUFROzs7Ozs7c0RBQzFFLDhEQUFDWDs0Q0FDQ0MsU0FBU1g7NENBQ1RNLFdBQVU7c0RBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV25CO0dBekVnQlY7O1FBQ1dELDBEQUFPQTtRQUNmRCx3REFBV0E7OztLQUZkRSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvY29tcG9uZW50cy9OYXZpZ2F0aW9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcclxuXHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcclxuaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXHJcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICdAL2NvbnRleHRzL0F1dGhDb250ZXh0J1xyXG5cclxuaW50ZXJmYWNlIE5hdmlnYXRpb25Qcm9wcyB7XHJcbiAgc2hvd0V4aXRMZWFybmluZz86IGJvb2xlYW5cclxuICBvbkV4aXRMZWFybmluZz86ICgpID0+IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE5hdmlnYXRpb24oeyBzaG93RXhpdExlYXJuaW5nID0gZmFsc2UsIG9uRXhpdExlYXJuaW5nIH06IE5hdmlnYXRpb25Qcm9wcyA9IHt9KSB7XHJcbiAgY29uc3QgeyB1c2VyLCBsb2dvdXQgfSA9IHVzZUF1dGgoKVxyXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKVxyXG5cclxuICBjb25zdCBuYXZJdGVtcyA9IFtcclxuICAgIHsgaHJlZjogJy9kYXNoYm9hcmQnLCBsYWJlbDogJ+WEgOihqOadvycgfSxcclxuICAgIHsgaHJlZjogJy9mbGFzaGNhcmRzJywgbGFiZWw6ICfoqZ7ljaEnIH0sXHJcbiAgICB7IGhyZWY6ICcvbGVhcm4nLCBsYWJlbDogJ+WtuOe/kicgfVxyXG4gIF1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxuYXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LXNtIGJvcmRlci1iXCI+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC04XCI+XHJcbiAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgIERyYW1hTGluZ1xyXG4gICAgICAgICAgICA8L0xpbms+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAge25hdkl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPExpbmtcclxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmhyZWZ9XHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9e2l0ZW0uaHJlZn1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9PT0gaXRlbS5ocmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LXByaW1hcnknXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICAgICAgICAgIDwvTGluaz5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICB7Lyog5a2457+S5qih5byP55qE57WQ5p2f5a2457+S5oyJ6YiVICovfVxyXG4gICAgICAgICAgICB7c2hvd0V4aXRMZWFybmluZyA/IChcclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkV4aXRMZWFybmluZ31cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgw5cg57WQ5p2f5a2457+SXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgIHsvKiDpgJrnn6XmjInpiJUgKi99XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInAtMiB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDE3aDVsLTEuNDA1LTEuNDA1QTIuMDMyIDIuMDMyIDAgMDExOCAxNC4xNThWMTFhNi4wMDIgNi4wMDIgMCAwMC00LTUuNjU5VjVhMiAyIDAgMTAtNCAwdi4zNDFDNy42NyA2LjE2NSA2IDguMzg4IDYgMTF2My4xNTljMCAuNTM4LS4yMTQgMS4wNTUtLjU5NSAxLjQzNkw0IDE3aDVtNiAwdjFhMyAzIDAgMTEtNiAwdi0xbTYgMEg5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICB7Lyog55So5oi26LOH6KiKICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTggaC04IGJnLXByaW1hcnkgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt1c2VyPy51c2VybmFtZT8uWzBdPy50b1VwcGVyQ2FzZSgpIHx8ICdVJ31cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW1cIj57dXNlcj8uZGlzcGxheU5hbWUgfHwgdXNlcj8udXNlcm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17bG9nb3V0fVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1sLTQgdGV4dC1zbSB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg55m75Ye6XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25hdj5cclxuICApXHJcbn0iXSwibmFtZXMiOlsiTGluayIsInVzZVBhdGhuYW1lIiwidXNlQXV0aCIsIk5hdmlnYXRpb24iLCJzaG93RXhpdExlYXJuaW5nIiwib25FeGl0TGVhcm5pbmciLCJ1c2VyIiwibG9nb3V0IiwicGF0aG5hbWUiLCJuYXZJdGVtcyIsImhyZWYiLCJsYWJlbCIsIm5hdiIsImNsYXNzTmFtZSIsImRpdiIsIm1hcCIsIml0ZW0iLCJidXR0b24iLCJvbkNsaWNrIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwidXNlcm5hbWUiLCJ0b1VwcGVyQ2FzZSIsInNwYW4iLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/Navigation.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./contexts/AuthContext.tsx": +/*!**********************************!*\ + !*** ./contexts/AuthContext.tsx ***! + \**********************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ 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 */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/services/auth */ \"(app-pages-browser)/./lib/services/auth.ts\");\n/* __next_internal_client_entry_do_not_use__ useAuth,AuthProvider auto */ \nvar _s = $RefreshSig$(), _s1 = $RefreshSig$();\n\n\nconst AuthContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(undefined);\nconst useAuth = ()=>{\n _s();\n const context = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n};\n_s(useAuth, \"b9L3QQ+jgeyIrH0NfHrJ8nn7VMU=\");\nconst AuthProvider = (param)=>{\n let { children } = param;\n _s1();\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n user: null,\n token: null,\n isAuthenticated: false,\n isLoading: true\n });\n // 初始化時檢查認證狀態\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"AuthProvider.useEffect\": ()=>{\n const initAuth = {\n \"AuthProvider.useEffect.initAuth\": async ()=>{\n const token = _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.getToken();\n const user = _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.getUser();\n if (token && user) {\n // 驗證 token 是否仍然有效\n const isValid = await _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.checkAuthStatus();\n if (isValid) {\n setState({\n user,\n token,\n isAuthenticated: true,\n isLoading: false\n });\n } else {\n // Token 無效,清除本地存儲\n _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.logout();\n setState({\n user: null,\n token: null,\n isAuthenticated: false,\n isLoading: false\n });\n }\n } else {\n setState({\n user: null,\n token: null,\n isAuthenticated: false,\n isLoading: false\n });\n }\n }\n }[\"AuthProvider.useEffect.initAuth\"];\n initAuth();\n }\n }[\"AuthProvider.useEffect\"], []);\n const login = async (email, password)=>{\n try {\n const response = await _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.login({\n email,\n password\n });\n if (response.success && response.data) {\n setState({\n user: response.data.user,\n token: response.data.token,\n isAuthenticated: true,\n isLoading: false\n });\n return {\n success: true\n };\n } else {\n return {\n success: false,\n error: response.error || '登入失敗'\n };\n }\n } catch (error) {\n return {\n success: false,\n error: '網路錯誤,請稍後再試'\n };\n }\n };\n const register = async (username, email, password)=>{\n try {\n const response = await _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.register({\n username,\n email,\n password\n });\n if (response.success && response.data) {\n setState({\n user: response.data.user,\n token: response.data.token,\n isAuthenticated: true,\n isLoading: false\n });\n return {\n success: true\n };\n } else {\n return {\n success: false,\n error: response.error || '註冊失敗'\n };\n }\n } catch (error) {\n return {\n success: false,\n error: '網路錯誤,請稍後再試'\n };\n }\n };\n const logout = ()=>{\n _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.logout();\n setState({\n user: null,\n token: null,\n isAuthenticated: false,\n isLoading: false\n });\n };\n const checkAuth = async ()=>{\n if (!state.token) return false;\n const isValid = await _lib_services_auth__WEBPACK_IMPORTED_MODULE_2__.authService.checkAuthStatus();\n if (!isValid) {\n logout();\n return false;\n }\n return true;\n };\n const contextValue = {\n ...state,\n login,\n register,\n logout,\n checkAuth\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(AuthContext.Provider, {\n value: contextValue,\n children: children\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/contexts/AuthContext.tsx\",\n lineNumber: 151,\n columnNumber: 5\n }, undefined);\n};\n_s1(AuthProvider, \"STD6XmSLej9PRMYjA5U8weIzddw=\");\n_c = AuthProvider;\nvar _c;\n$RefreshReg$(_c, \"AuthProvider\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbnRleHRzL0F1dGhDb250ZXh0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUV3RjtBQUNqQztBQWdCdkQsTUFBTU0sNEJBQWNMLG9EQUFhQSxDQUE4Qk07QUFFeEQsTUFBTUMsVUFBVTs7SUFDckIsTUFBTUMsVUFBVVAsaURBQVVBLENBQUNJO0lBQzNCLElBQUlHLFlBQVlGLFdBQVc7UUFDekIsTUFBTSxJQUFJRyxNQUFNO0lBQ2xCO0lBQ0EsT0FBT0Q7QUFDVCxFQUFDO0dBTllEO0FBWU4sTUFBTUcsZUFBNEM7UUFBQyxFQUFFQyxRQUFRLEVBQUU7O0lBQ3BFLE1BQU0sQ0FBQ0MsT0FBT0MsU0FBUyxHQUFHViwrQ0FBUUEsQ0FBWTtRQUM1Q1csTUFBTTtRQUNOQyxPQUFPO1FBQ1BDLGlCQUFpQjtRQUNqQkMsV0FBVztJQUNiO0lBRUEsYUFBYTtJQUNiZixnREFBU0E7a0NBQUM7WUFDUixNQUFNZ0I7bURBQVc7b0JBQ2YsTUFBTUgsUUFBUVgsMkRBQVdBLENBQUNlLFFBQVE7b0JBQ2xDLE1BQU1MLE9BQU9WLDJEQUFXQSxDQUFDZ0IsT0FBTztvQkFFaEMsSUFBSUwsU0FBU0QsTUFBTTt3QkFDakIsa0JBQWtCO3dCQUNsQixNQUFNTyxVQUFVLE1BQU1qQiwyREFBV0EsQ0FBQ2tCLGVBQWU7d0JBQ2pELElBQUlELFNBQVM7NEJBQ1hSLFNBQVM7Z0NBQ1BDO2dDQUNBQztnQ0FDQUMsaUJBQWlCO2dDQUNqQkMsV0FBVzs0QkFDYjt3QkFDRixPQUFPOzRCQUNMLGtCQUFrQjs0QkFDbEJiLDJEQUFXQSxDQUFDbUIsTUFBTTs0QkFDbEJWLFNBQVM7Z0NBQ1BDLE1BQU07Z0NBQ05DLE9BQU87Z0NBQ1BDLGlCQUFpQjtnQ0FDakJDLFdBQVc7NEJBQ2I7d0JBQ0Y7b0JBQ0YsT0FBTzt3QkFDTEosU0FBUzs0QkFDUEMsTUFBTTs0QkFDTkMsT0FBTzs0QkFDUEMsaUJBQWlCOzRCQUNqQkMsV0FBVzt3QkFDYjtvQkFDRjtnQkFDRjs7WUFFQUM7UUFDRjtpQ0FBRyxFQUFFO0lBRUwsTUFBTU0sUUFBUSxPQUFPQyxPQUFlQztRQUNsQyxJQUFJO1lBQ0YsTUFBTUMsV0FBVyxNQUFNdkIsMkRBQVdBLENBQUNvQixLQUFLLENBQUM7Z0JBQUVDO2dCQUFPQztZQUFTO1lBRTNELElBQUlDLFNBQVNDLE9BQU8sSUFBSUQsU0FBU0UsSUFBSSxFQUFFO2dCQUNyQ2hCLFNBQVM7b0JBQ1BDLE1BQU1hLFNBQVNFLElBQUksQ0FBQ2YsSUFBSTtvQkFDeEJDLE9BQU9ZLFNBQVNFLElBQUksQ0FBQ2QsS0FBSztvQkFDMUJDLGlCQUFpQjtvQkFDakJDLFdBQVc7Z0JBQ2I7Z0JBQ0EsT0FBTztvQkFBRVcsU0FBUztnQkFBSztZQUN6QixPQUFPO2dCQUNMLE9BQU87b0JBQUVBLFNBQVM7b0JBQU9FLE9BQU9ILFNBQVNHLEtBQUssSUFBSTtnQkFBTztZQUMzRDtRQUNGLEVBQUUsT0FBT0EsT0FBTztZQUNkLE9BQU87Z0JBQUVGLFNBQVM7Z0JBQU9FLE9BQU87WUFBYTtRQUMvQztJQUNGO0lBRUEsTUFBTUMsV0FBVyxPQUFPQyxVQUFrQlAsT0FBZUM7UUFDdkQsSUFBSTtZQUNGLE1BQU1DLFdBQVcsTUFBTXZCLDJEQUFXQSxDQUFDMkIsUUFBUSxDQUFDO2dCQUFFQztnQkFBVVA7Z0JBQU9DO1lBQVM7WUFFeEUsSUFBSUMsU0FBU0MsT0FBTyxJQUFJRCxTQUFTRSxJQUFJLEVBQUU7Z0JBQ3JDaEIsU0FBUztvQkFDUEMsTUFBTWEsU0FBU0UsSUFBSSxDQUFDZixJQUFJO29CQUN4QkMsT0FBT1ksU0FBU0UsSUFBSSxDQUFDZCxLQUFLO29CQUMxQkMsaUJBQWlCO29CQUNqQkMsV0FBVztnQkFDYjtnQkFDQSxPQUFPO29CQUFFVyxTQUFTO2dCQUFLO1lBQ3pCLE9BQU87Z0JBQ0wsT0FBTztvQkFBRUEsU0FBUztvQkFBT0UsT0FBT0gsU0FBU0csS0FBSyxJQUFJO2dCQUFPO1lBQzNEO1FBQ0YsRUFBRSxPQUFPQSxPQUFPO1lBQ2QsT0FBTztnQkFBRUYsU0FBUztnQkFBT0UsT0FBTztZQUFhO1FBQy9DO0lBQ0Y7SUFFQSxNQUFNUCxTQUFTO1FBQ2JuQiwyREFBV0EsQ0FBQ21CLE1BQU07UUFDbEJWLFNBQVM7WUFDUEMsTUFBTTtZQUNOQyxPQUFPO1lBQ1BDLGlCQUFpQjtZQUNqQkMsV0FBVztRQUNiO0lBQ0Y7SUFFQSxNQUFNZ0IsWUFBWTtRQUNoQixJQUFJLENBQUNyQixNQUFNRyxLQUFLLEVBQUUsT0FBTztRQUV6QixNQUFNTSxVQUFVLE1BQU1qQiwyREFBV0EsQ0FBQ2tCLGVBQWU7UUFDakQsSUFBSSxDQUFDRCxTQUFTO1lBQ1pFO1lBQ0EsT0FBTztRQUNUO1FBQ0EsT0FBTztJQUNUO0lBRUEsTUFBTVcsZUFBZ0M7UUFDcEMsR0FBR3RCLEtBQUs7UUFDUlk7UUFDQU87UUFDQVI7UUFDQVU7SUFDRjtJQUVBLHFCQUNFLDhEQUFDNUIsWUFBWThCLFFBQVE7UUFBQ0MsT0FBT0Y7a0JBQzFCdkI7Ozs7OztBQUdQLEVBQUM7SUF6SFlEO0tBQUFBIiwic291cmNlcyI6WyIvVXNlcnMvamV0dGNoZW5nMTAxOC9jb2RlL2RyYW1hbGluZy12b2NhYi1sZWFybmluZy9mcm9udGVuZC9jb250ZXh0cy9BdXRoQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXHJcblxyXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXHJcbmltcG9ydCB7IGF1dGhTZXJ2aWNlLCBVc2VyIH0gZnJvbSAnQC9saWIvc2VydmljZXMvYXV0aCdcclxuXHJcbmludGVyZmFjZSBBdXRoU3RhdGUge1xyXG4gIHVzZXI6IFVzZXIgfCBudWxsXHJcbiAgdG9rZW46IHN0cmluZyB8IG51bGxcclxuICBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW5cclxuICBpc0xvYWRpbmc6IGJvb2xlYW5cclxufVxyXG5cclxuaW50ZXJmYWNlIEF1dGhDb250ZXh0VHlwZSBleHRlbmRzIEF1dGhTdGF0ZSB7XHJcbiAgbG9naW46IChlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSA9PiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfT5cclxuICByZWdpc3RlcjogKHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpID0+IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9PlxyXG4gIGxvZ291dDogKCkgPT4gdm9pZFxyXG4gIGNoZWNrQXV0aDogKCkgPT4gUHJvbWlzZTxib29sZWFuPlxyXG59XHJcblxyXG5jb25zdCBBdXRoQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QXV0aENvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXHJcblxyXG5leHBvcnQgY29uc3QgdXNlQXV0aCA9ICgpID0+IHtcclxuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChBdXRoQ29udGV4dClcclxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUF1dGggbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBBdXRoUHJvdmlkZXInKVxyXG4gIH1cclxuICByZXR1cm4gY29udGV4dFxyXG59XHJcblxyXG5pbnRlcmZhY2UgQXV0aFByb3ZpZGVyUHJvcHMge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IEF1dGhQcm92aWRlcjogUmVhY3QuRkM8QXV0aFByb3ZpZGVyUHJvcHM+ID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xyXG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGU8QXV0aFN0YXRlPih7XHJcbiAgICB1c2VyOiBudWxsLFxyXG4gICAgdG9rZW46IG51bGwsXHJcbiAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxyXG4gICAgaXNMb2FkaW5nOiB0cnVlLFxyXG4gIH0pXHJcblxyXG4gIC8vIOWIneWni+WMluaZguaqouafpeiqjeitieeLgOaFi1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zdCBpbml0QXV0aCA9IGFzeW5jICgpID0+IHtcclxuICAgICAgY29uc3QgdG9rZW4gPSBhdXRoU2VydmljZS5nZXRUb2tlbigpXHJcbiAgICAgIGNvbnN0IHVzZXIgPSBhdXRoU2VydmljZS5nZXRVc2VyKClcclxuXHJcbiAgICAgIGlmICh0b2tlbiAmJiB1c2VyKSB7XHJcbiAgICAgICAgLy8g6amX6K2JIHRva2VuIOaYr+WQpuS7jeeEtuacieaViFxyXG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCBhdXRoU2VydmljZS5jaGVja0F1dGhTdGF0dXMoKVxyXG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICBzZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHVzZXIsXHJcbiAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBUb2tlbiDnhKHmlYjvvIzmuIXpmaTmnKzlnLDlrZjlhLJcclxuICAgICAgICAgIGF1dGhTZXJ2aWNlLmxvZ291dCgpXHJcbiAgICAgICAgICBzZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0U3RhdGUoe1xyXG4gICAgICAgICAgdXNlcjogbnVsbCxcclxuICAgICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcclxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRBdXRoKClcclxuICB9LCBbXSlcclxuXHJcbiAgY29uc3QgbG9naW4gPSBhc3luYyAoZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhdXRoU2VydmljZS5sb2dpbih7IGVtYWlsLCBwYXNzd29yZCB9KVxyXG5cclxuICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xyXG4gICAgICAgIHNldFN0YXRlKHtcclxuICAgICAgICAgIHVzZXI6IHJlc3BvbnNlLmRhdGEudXNlcixcclxuICAgICAgICAgIHRva2VuOiByZXNwb25zZS5kYXRhLnRva2VuLFxyXG4gICAgICAgICAgaXNBdXRoZW50aWNhdGVkOiB0cnVlLFxyXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogcmVzcG9uc2UuZXJyb3IgfHwgJ+eZu+WFpeWkseaVlycgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICfntrLot6/pjK/oqqTvvIzoq4vnqI3lvozlho3oqaYnIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHJlZ2lzdGVyID0gYXN5bmMgKHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXV0aFNlcnZpY2UucmVnaXN0ZXIoeyB1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkIH0pXHJcblxyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XHJcbiAgICAgICAgc2V0U3RhdGUoe1xyXG4gICAgICAgICAgdXNlcjogcmVzcG9uc2UuZGF0YS51c2VyLFxyXG4gICAgICAgICAgdG9rZW46IHJlc3BvbnNlLmRhdGEudG9rZW4sXHJcbiAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXHJcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiByZXNwb25zZS5lcnJvciB8fCAn6Ki75YaK5aSx5pWXJyB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ+e2sui3r+mMr+iqpO+8jOiri+eojeW+jOWGjeippicgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgbG9nb3V0ID0gKCkgPT4ge1xyXG4gICAgYXV0aFNlcnZpY2UubG9nb3V0KClcclxuICAgIHNldFN0YXRlKHtcclxuICAgICAgdXNlcjogbnVsbCxcclxuICAgICAgdG9rZW46IG51bGwsXHJcbiAgICAgIGlzQXV0aGVudGljYXRlZDogZmFsc2UsXHJcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY2hlY2tBdXRoID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgaWYgKCFzdGF0ZS50b2tlbikgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGF1dGhTZXJ2aWNlLmNoZWNrQXV0aFN0YXR1cygpXHJcbiAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgbG9nb3V0KClcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgY29uc3QgY29udGV4dFZhbHVlOiBBdXRoQ29udGV4dFR5cGUgPSB7XHJcbiAgICAuLi5zdGF0ZSxcclxuICAgIGxvZ2luLFxyXG4gICAgcmVnaXN0ZXIsXHJcbiAgICBsb2dvdXQsXHJcbiAgICBjaGVja0F1dGgsXHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPEF1dGhDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxyXG4gICAgICB7Y2hpbGRyZW59XHJcbiAgICA8L0F1dGhDb250ZXh0LlByb3ZpZGVyPlxyXG4gIClcclxufSJdLCJuYW1lcyI6WyJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJhdXRoU2VydmljZSIsIkF1dGhDb250ZXh0IiwidW5kZWZpbmVkIiwidXNlQXV0aCIsImNvbnRleHQiLCJFcnJvciIsIkF1dGhQcm92aWRlciIsImNoaWxkcmVuIiwic3RhdGUiLCJzZXRTdGF0ZSIsInVzZXIiLCJ0b2tlbiIsImlzQXV0aGVudGljYXRlZCIsImlzTG9hZGluZyIsImluaXRBdXRoIiwiZ2V0VG9rZW4iLCJnZXRVc2VyIiwiaXNWYWxpZCIsImNoZWNrQXV0aFN0YXR1cyIsImxvZ291dCIsImxvZ2luIiwiZW1haWwiLCJwYXNzd29yZCIsInJlc3BvbnNlIiwic3VjY2VzcyIsImRhdGEiLCJlcnJvciIsInJlZ2lzdGVyIiwidXNlcm5hbWUiLCJjaGVja0F1dGgiLCJjb250ZXh0VmFsdWUiLCJQcm92aWRlciIsInZhbHVlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./contexts/AuthContext.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./lib/services/auth.ts": +/*!******************************!*\ + !*** ./lib/services/auth.ts ***! + \******************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ authService: () => (/* binding */ authService)\n/* harmony export */ });\n// Auth service for handling authentication API calls\nconst API_BASE_URL = 'http://localhost:5000';\nclass AuthService {\n async makeRequest(endpoint) {\n let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n const url = \"\".concat(API_BASE_URL, \"/api/auth\").concat(endpoint);\n console.log('Making request to:', url);\n console.log('Request body:', options.body);\n const response = await fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n },\n ...options\n });\n if (!response.ok) {\n const errorData = await response.json().catch(()=>({\n error: 'Network error'\n }));\n console.log('API Error Response:', errorData);\n // 處理驗證錯誤 (400 Bad Request)\n if (response.status === 400 && errorData.errors) {\n const validationErrors = Object.entries(errorData.errors).map((param)=>{\n let [field, messages] = param;\n return \"\".concat(field, \": \").concat(Array.isArray(messages) ? messages.join(', ') : messages);\n }).join('\\n');\n throw new Error(validationErrors);\n }\n throw new Error(errorData.error || errorData.title || \"HTTP \".concat(response.status));\n }\n return response.json();\n }\n async login(data) {\n try {\n var _response_data;\n const response = await this.makeRequest('/login', {\n method: 'POST',\n body: JSON.stringify(data)\n });\n if (response.success && ((_response_data = response.data) === null || _response_data === void 0 ? void 0 : _response_data.token)) {\n // Store token in localStorage\n localStorage.setItem('auth_token', response.data.token);\n localStorage.setItem('user_data', JSON.stringify(response.data.user));\n }\n return response;\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Login failed'\n };\n }\n }\n async register(data) {\n try {\n var _response_data;\n console.log('AuthService.register called with:', {\n username: data.username,\n email: data.email,\n password: data.password ? '[hidden]' : 'empty'\n });\n const response = await this.makeRequest('/register', {\n method: 'POST',\n body: JSON.stringify(data)\n });\n if (response.success && ((_response_data = response.data) === null || _response_data === void 0 ? void 0 : _response_data.token)) {\n // Store token in localStorage\n localStorage.setItem('auth_token', response.data.token);\n localStorage.setItem('user_data', JSON.stringify(response.data.user));\n }\n return response;\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Registration failed'\n };\n }\n }\n async logout() {\n localStorage.removeItem('auth_token');\n localStorage.removeItem('user_data');\n }\n getToken() {\n if (false) {}\n return localStorage.getItem('auth_token');\n }\n getUser() {\n if (false) {}\n const userData = localStorage.getItem('user_data');\n return userData ? JSON.parse(userData) : null;\n }\n isAuthenticated() {\n return this.getToken() !== null;\n }\n async checkAuthStatus() {\n const token = this.getToken();\n if (!token) return false;\n try {\n await this.makeRequest('/status', {\n headers: {\n 'Authorization': \"Bearer \".concat(token)\n }\n });\n return true;\n } catch (e) {\n // Token is invalid, clear it\n this.logout();\n return false;\n }\n }\n}\nconst authService = new AuthService();\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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b2NhYi1sZWFybmluZy9mcm9udGVuZC9saWIvc2VydmljZXMvYXV0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBdXRoIHNlcnZpY2UgZm9yIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uIEFQSSBjYWxsc1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlcXVlc3Qge1xyXG4gIGVtYWlsOiBzdHJpbmc7XHJcbiAgcGFzc3dvcmQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlclJlcXVlc3Qge1xyXG4gIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgZW1haWw6IHN0cmluZztcclxuICBwYXNzd29yZDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVzZXIge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdXNlcm5hbWU6IHN0cmluZztcclxuICBlbWFpbDogc3RyaW5nO1xyXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCBudWxsO1xyXG4gIGF2YXRhclVybDogc3RyaW5nIHwgbnVsbDtcclxuICBzdWJzY3JpcHRpb25UeXBlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFJlc3BvbnNlIHtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIGRhdGE/OiB7XHJcbiAgICB0b2tlbjogc3RyaW5nO1xyXG4gICAgdXNlcjogVXNlcjtcclxuICB9O1xyXG4gIGVycm9yPzogc3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCBBUElfQkFTRV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo1MDAwJztcclxuXHJcbmNsYXNzIEF1dGhTZXJ2aWNlIHtcclxuICBwcml2YXRlIGFzeW5jIG1ha2VSZXF1ZXN0PFQ+KFxyXG4gICAgZW5kcG9pbnQ6IHN0cmluZyxcclxuICAgIG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge31cclxuICApOiBQcm9taXNlPFQ+IHtcclxuICAgIGNvbnN0IHVybCA9IGAke0FQSV9CQVNFX1VSTH0vYXBpL2F1dGgke2VuZHBvaW50fWA7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ01ha2luZyByZXF1ZXN0IHRvOicsIHVybClcclxuICAgIGNvbnNvbGUubG9nKCdSZXF1ZXN0IGJvZHk6Jywgb3B0aW9ucy5ib2R5KVxyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcclxuICAgICAgfSxcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7IGVycm9yOiAnTmV0d29yayBlcnJvcicgfSkpO1xyXG4gICAgICBjb25zb2xlLmxvZygnQVBJIEVycm9yIFJlc3BvbnNlOicsIGVycm9yRGF0YSlcclxuXHJcbiAgICAgIC8vIOiZleeQhumpl+itiemMr+iqpCAoNDAwIEJhZCBSZXF1ZXN0KVxyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgZXJyb3JEYXRhLmVycm9ycykge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSBPYmplY3QuZW50cmllcyhlcnJvckRhdGEuZXJyb3JzKVxyXG4gICAgICAgICAgLm1hcCgoW2ZpZWxkLCBtZXNzYWdlc106IFtzdHJpbmcsIGFueV0pID0+IGAke2ZpZWxkfTogJHtBcnJheS5pc0FycmF5KG1lc3NhZ2VzKSA/IG1lc3NhZ2VzLmpvaW4oJywgJykgOiBtZXNzYWdlc31gKVxyXG4gICAgICAgICAgLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcih2YWxpZGF0aW9uRXJyb3JzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yRGF0YS5lcnJvciB8fCBlcnJvckRhdGEudGl0bGUgfHwgYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvZ2luKGRhdGE6IExvZ2luUmVxdWVzdCk6IFByb21pc2U8QXV0aFJlc3BvbnNlPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3Q8QXV0aFJlc3BvbnNlPignL2xvZ2luJywge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGE/LnRva2VuKSB7XHJcbiAgICAgICAgLy8gU3RvcmUgdG9rZW4gaW4gbG9jYWxTdG9yYWdlXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2F1dGhfdG9rZW4nLCByZXNwb25zZS5kYXRhLnRva2VuKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlcl9kYXRhJywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YS51c2VyKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0xvZ2luIGZhaWxlZCcsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZWdpc3RlcihkYXRhOiBSZWdpc3RlclJlcXVlc3QpOiBQcm9taXNlPEF1dGhSZXNwb25zZT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc29sZS5sb2coJ0F1dGhTZXJ2aWNlLnJlZ2lzdGVyIGNhbGxlZCB3aXRoOicsIHtcclxuICAgICAgICB1c2VybmFtZTogZGF0YS51c2VybmFtZSxcclxuICAgICAgICBlbWFpbDogZGF0YS5lbWFpbCxcclxuICAgICAgICBwYXNzd29yZDogZGF0YS5wYXNzd29yZCA/ICdbaGlkZGVuXScgOiAnZW1wdHknXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3Q8QXV0aFJlc3BvbnNlPignL3JlZ2lzdGVyJywge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGE/LnRva2VuKSB7XHJcbiAgICAgICAgLy8gU3RvcmUgdG9rZW4gaW4gbG9jYWxTdG9yYWdlXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2F1dGhfdG9rZW4nLCByZXNwb25zZS5kYXRhLnRva2VuKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlcl9kYXRhJywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YS51c2VyKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1JlZ2lzdHJhdGlvbiBmYWlsZWQnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9nb3V0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1dGhfdG9rZW4nKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd1c2VyX2RhdGEnKTtcclxuICB9XHJcblxyXG4gIGdldFRva2VuKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXV0aF90b2tlbicpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlcigpOiBVc2VyIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdXNlckRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcl9kYXRhJyk7XHJcbiAgICByZXR1cm4gdXNlckRhdGEgPyBKU09OLnBhcnNlKHVzZXJEYXRhKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbigpICE9PSBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2hlY2tBdXRoU3RhdHVzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XHJcbiAgICBpZiAoIXRva2VuKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5tYWtlUmVxdWVzdCgnL3N0YXR1cycsIHtcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyBUb2tlbiBpcyBpbnZhbGlkLCBjbGVhciBpdFxyXG4gICAgICB0aGlzLmxvZ291dCgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYXV0aFNlcnZpY2UgPSBuZXcgQXV0aFNlcnZpY2UoKTsiXSwibmFtZXMiOlsiQVBJX0JBU0VfVVJMIiwiQXV0aFNlcnZpY2UiLCJtYWtlUmVxdWVzdCIsImVuZHBvaW50Iiwib3B0aW9ucyIsInVybCIsImNvbnNvbGUiLCJsb2ciLCJib2R5IiwicmVzcG9uc2UiLCJmZXRjaCIsImhlYWRlcnMiLCJvayIsImVycm9yRGF0YSIsImpzb24iLCJjYXRjaCIsImVycm9yIiwic3RhdHVzIiwiZXJyb3JzIiwidmFsaWRhdGlvbkVycm9ycyIsIk9iamVjdCIsImVudHJpZXMiLCJtYXAiLCJmaWVsZCIsIm1lc3NhZ2VzIiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsIkVycm9yIiwidGl0bGUiLCJsb2dpbiIsImRhdGEiLCJtZXRob2QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3VjY2VzcyIsInRva2VuIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInVzZXIiLCJtZXNzYWdlIiwicmVnaXN0ZXIiLCJ1c2VybmFtZSIsImVtYWlsIiwicGFzc3dvcmQiLCJsb2dvdXQiLCJyZW1vdmVJdGVtIiwiZ2V0VG9rZW4iLCJnZXRJdGVtIiwiZ2V0VXNlciIsInVzZXJEYXRhIiwicGFyc2UiLCJpc0F1dGhlbnRpY2F0ZWQiLCJjaGVja0F1dGhTdGF0dXMiLCJhdXRoU2VydmljZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/services/auth.ts\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/learn/page.bb82a0f39a60143a.hot-update.js b/frontend/.next/static/webpack/app/learn/page.bb82a0f39a60143a.hot-update.js new file mode 100644 index 0000000..ed45f9e --- /dev/null +++ b/frontend/.next/static/webpack/app/learn/page.bb82a0f39a60143a.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/learn/page",{ + +/***/ "(app-pages-browser)/./app/learn/page.tsx": +/*!****************************!*\ + !*** ./app/learn/page.tsx ***! + \****************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LearnPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\nfunction LearnPage() {\n _s();\n const [currentCardIndex, setCurrentCardIndex] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [isFlipped, setIsFlipped] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('flip');\n const [score, setScore] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n correct: 0,\n total: 0\n });\n const [selectedAnswer, setSelectedAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showResult, setShowResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [fillAnswer, setFillAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [showHint, setShowHint] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [isRecording, setIsRecording] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [audioPlaying, setAudioPlaying] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [modalImage, setModalImage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showReportModal, setShowReportModal] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [reportReason, setReportReason] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [reportingCard, setReportingCard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Mock data with real example images\n const cards = [\n {\n id: 1,\n word: 'brought',\n partOfSpeech: 'verb',\n pronunciation: '/brɔːt/',\n translation: '提出、帶來',\n definition: 'Past tense of bring; to mention or introduce a topic in conversation',\n example: 'He brought this thing up during our meeting and no one agreed.',\n exampleTranslation: '他在我們的會議中提出了這件事,但沒有人同意。',\n exampleImage: '/images/examples/bring_up.png',\n synonyms: [\n 'mentioned',\n 'raised',\n 'introduced'\n ],\n difficulty: 'B1'\n },\n {\n id: 2,\n word: 'instincts',\n partOfSpeech: 'noun',\n pronunciation: '/ˈɪnstɪŋkts/',\n translation: '本能、直覺',\n definition: 'Natural abilities that help living things survive without learning',\n example: 'Animals use their instincts to find food and stay safe.',\n exampleTranslation: '動物利用本能來尋找食物並保持安全。',\n exampleImage: '/images/examples/instinct.png',\n synonyms: [\n 'intuition',\n 'impulse',\n 'tendency'\n ],\n difficulty: 'B2'\n },\n {\n id: 3,\n word: 'warrants',\n partOfSpeech: 'noun',\n pronunciation: '/ˈwɔːrənts/',\n translation: '搜查令、授權令',\n definition: 'Official documents that give police permission to do something',\n example: 'The police obtained warrants to search the building.',\n exampleTranslation: '警方取得了搜查令來搜查這棟建築物。',\n exampleImage: '/images/examples/warrant.png',\n synonyms: [\n 'authorization',\n 'permit',\n 'license'\n ],\n difficulty: 'C1'\n }\n ];\n const currentCard = cards[currentCardIndex];\n // Quiz mode options - dynamically generate from current cards\n const quizOptions = [\n cards[currentCardIndex].translation,\n ...cards.filter((_, idx)=>idx !== currentCardIndex).map((card)=>card.translation).slice(0, 2),\n '建議、提議' // additional wrong option\n ].sort(()=>Math.random() - 0.5) // shuffle options\n ;\n const handleFlip = ()=>{\n setIsFlipped(!isFlipped);\n };\n const handleNext = ()=>{\n if (currentCardIndex < cards.length - 1) {\n setCurrentCardIndex(currentCardIndex + 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handlePrevious = ()=>{\n if (currentCardIndex > 0) {\n setCurrentCardIndex(currentCardIndex - 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handleDifficultyRate = (rating)=>{\n // Mock rating logic\n console.log(\"Rated \".concat(rating, \" for \").concat(currentCard.word));\n handleNext();\n };\n const handleQuizAnswer = (answer)=>{\n setSelectedAnswer(answer);\n setShowResult(true);\n if (answer === currentCard.translation) {\n setScore({\n ...score,\n correct: score.correct + 1,\n total: score.total + 1\n });\n } else {\n setScore({\n ...score,\n total: score.total + 1\n });\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 128,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/dashboard\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"儀表板\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 130,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/flashcards\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 131,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/learn\",\n className: \"text-gray-900 font-medium\",\n children: \"學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 132,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/generate\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"AI 生成\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 133,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 129,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 127,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>window.location.href = '/dashboard',\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 136,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 126,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 125,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 124,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-4xl mx-auto px-4 py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: \"進度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 150,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n currentCardIndex + 1,\n \" / \",\n cards.length\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 151,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 149,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full bg-gray-200 rounded-full h-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-primary h-2 rounded-full transition-all\",\n style: {\n width: \"\".concat((currentCardIndex + 1) / cards.length * 100, \"%\")\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 156,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 155,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 148,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-sm p-1 inline-flex flex-wrap\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('flip'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'flip' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"翻卡模式\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 166,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('quiz'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'quiz' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"選擇題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 176,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('fill'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'fill' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"填空題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 186,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('listening'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'listening' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"聽力測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 196,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('speaking'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'speaking' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"口說測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 206,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 165,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 164,\n columnNumber: 9\n }, this),\n mode === 'flip' ? /* Flip Card Mode */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 233,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 232,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 224,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 223,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full h-96 cursor-pointer\",\n onClick: handleFlip,\n style: {\n perspective: '1000px'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full transition-transform duration-600 \".concat(isFlipped ? 'rotate-y-180' : ''),\n style: {\n transformStyle: 'preserve-3d',\n transform: isFlipped ? 'rotateY(180deg)' : 'rotateY(0deg)'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 flex flex-col items-center justify-center\",\n style: {\n backfaceVisibility: 'hidden'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-4xl font-bold text-gray-900 mb-4\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 258,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-600 mb-2\",\n children: currentCard.partOfSpeech\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 261,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 264,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8 text-sm text-gray-400\",\n children: \"點擊翻轉查看答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 267,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 254,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 overflow-y-auto\",\n style: {\n backfaceVisibility: 'hidden',\n transform: 'rotateY(180deg)'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-1\",\n children: \"翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 282,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-bold text-gray-900\",\n children: currentCard.translation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 283,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 281,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"定義\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 286,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 287,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 285,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 290,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 291,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 text-sm mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 292,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 289,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"同義詞\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 295,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-2\",\n children: currentCard.synonyms.map((syn, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"px-3 py-1 bg-gray-100 rounded-full text-sm\",\n children: syn\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 298,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 296,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 294,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 280,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 273,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 244,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 239,\n columnNumber: 13\n }, this),\n isFlipped && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-600\",\n children: \"這個單字對你來說難度如何?\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 313,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 312,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(1),\n className: \"px-4 py-2 bg-red-100 text-red-700 rounded-lg hover:bg-red-200 transition-colors\",\n children: \"\\uD83D\\uDE14 完全不記得\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 316,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(3),\n className: \"px-4 py-2 bg-yellow-100 text-yellow-700 rounded-lg hover:bg-yellow-200 transition-colors\",\n children: \"\\uD83D\\uDE10 有點困難\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 322,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(5),\n className: \"px-4 py-2 bg-green-100 text-green-700 rounded-lg hover:bg-green-200 transition-colors\",\n children: \"\\uD83D\\uDE0A 很簡單\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 328,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 315,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 311,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 221,\n columnNumber: 11\n }, this) : mode === 'quiz' ? /* Quiz Mode - 選擇題:英文定義選中文翻譯 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 352,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 351,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 343,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 342,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"根據定義選擇正確的中文翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 360,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 361,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 mt-2\",\n children: [\n \"(\",\n currentCard.partOfSpeech,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 364,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 359,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: quizOptions.map((option, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(option),\n disabled: showResult,\n className: \"w-full p-4 text-left rounded-lg border-2 transition-all \".concat(showResult && option === currentCard.translation ? 'border-green-500 bg-green-50' : showResult && option === selectedAnswer && option !== currentCard.translation ? 'border-red-500 bg-red-50' : selectedAnswer === option ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: option\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 386,\n columnNumber: 21\n }, this),\n showResult && option === currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-green-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 389,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 388,\n columnNumber: 23\n }, this),\n showResult && option === selectedAnswer && option !== currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-red-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 394,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 393,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 385,\n columnNumber: 19\n }, this)\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 371,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 369,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 358,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 340,\n columnNumber: 11\n }, this) : mode === 'fill' ? /* Fill in the Blank Mode - 填空題 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 418,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 417,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 409,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 408,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"根據例句圖片和句子填入正確的詞彙\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 426,\n columnNumber: 17\n }, this),\n currentCard.exampleImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: currentCard.exampleImage,\n alt: \"Example context\",\n className: \"w-full rounded-lg shadow-md cursor-pointer hover:shadow-lg transition-shadow\",\n style: {\n maxHeight: '400px',\n objectFit: 'contain'\n },\n onClick: ()=>setModalImage(currentCard.exampleImage)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 431,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-gray-500 mt-2 text-center\",\n children: \"點擊圖片可放大查看\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 438,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 430,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-800 mb-4\",\n children: currentCard.example.split(currentCard.word).map((part, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n part,\n i < currentCard.example.split(currentCard.word).length - 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block w-32 border-b-2 border-gray-400 mx-1\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 448,\n columnNumber: 23\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 445,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 443,\n columnNumber: 15\n }, this),\n !showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowHint(true),\n className: \"text-sm text-primary hover:text-primary-hover flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 461,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 460,\n columnNumber: 19\n }, this),\n \"點擊查看提示\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 456,\n columnNumber: 17\n }, this),\n showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 bg-blue-50 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-blue-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"定義提示:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 471,\n columnNumber: 21\n }, this),\n \" \",\n currentCard.definition\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 470,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 469,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 425,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: fillAnswer,\n onChange: (e)=>setFillAnswer(e.target.value),\n placeholder: \"輸入答案...\",\n className: \"w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:border-primary focus:outline-none text-lg\",\n onKeyPress: (e)=>{\n if (e.key === 'Enter' && fillAnswer) {\n setShowResult(true);\n }\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 479,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 478,\n columnNumber: 13\n }, this),\n !showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>fillAnswer && setShowResult(true),\n disabled: !fillAnswer,\n className: \"w-full py-3 bg-primary text-white rounded-lg font-medium hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: \"提交答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 495,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 rounded-lg \".concat(fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'bg-green-50 border-2 border-green-500' : 'bg-red-50 border-2 border-red-500'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold \".concat(fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'text-green-700' : 'text-red-700'),\n children: fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? '✓ 正確!' : '✗ 錯誤'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 512,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 511,\n columnNumber: 17\n }, this),\n fillAnswer.toLowerCase() !== currentCard.word.toLowerCase() && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-700\",\n children: [\n \"正確答案:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-bold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 522,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 521,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-semibold mb-1\",\n children: \"完整例句:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 526,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 527,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 528,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 525,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 506,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 424,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 406,\n columnNumber: 11\n }, this) : mode === 'listening' ? /* Listening Test Mode - 聽力測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 548,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 547,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 539,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 538,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"聽音頻,選擇正確的單字\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 556,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setAudioPlaying(true);\n // Simulate audio playing\n setTimeout(()=>setAudioPlaying(false), 2000);\n },\n className: \"mx-auto mb-6 p-8 bg-gray-100 rounded-full hover:bg-gray-200 transition-colors\",\n children: audioPlaying ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-primary animate-pulse\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 569,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 568,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-gray-600\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 573,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 574,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 572,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 559,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500\",\n children: \"點擊播放按鈕聽發音\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 579,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 555,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-3\",\n children: [\n currentCard.word,\n 'determine',\n 'achieve',\n 'consider'\n ].map((word)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(word),\n disabled: showResult,\n className: \"p-4 text-lg font-medium rounded-lg border-2 transition-all \".concat(showResult && word === currentCard.word ? 'border-green-500 bg-green-50' : showResult && word === selectedAnswer && word !== currentCard.word ? 'border-red-500 bg-red-50' : selectedAnswer === word ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'),\n children: word\n }, word, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 585,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 583,\n columnNumber: 13\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-gray-50 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-2\",\n children: \"單字詳情\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 607,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 610,\n columnNumber: 21\n }, this),\n \" - \",\n currentCard.translation\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 609,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 612,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 italic\",\n children: [\n '\"',\n currentCard.example,\n '\"'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 613,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 608,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 606,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 554,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 536,\n columnNumber: 11\n }, this) : mode === 'speaking' ? /* Speaking Test Mode - 口說測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 633,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 632,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 624,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 623,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"念出以下例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 641,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 bg-gray-50 rounded-lg mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed mb-3\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 645,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 648,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 644,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"重點單字發音:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 655,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold text-lg\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 657,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 658,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-primary hover:text-primary-hover\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 661,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 660,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 659,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 656,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 654,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setIsRecording(!isRecording);\n if (!isRecording) {\n // Start recording\n setTimeout(()=>{\n setIsRecording(false);\n setShowResult(true);\n }, 3000);\n }\n },\n className: \"p-6 rounded-full transition-all \".concat(isRecording ? 'bg-red-500 hover:bg-red-600 animate-pulse' : 'bg-primary hover:bg-primary-hover'),\n children: isRecording ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 688,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 689,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 687,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 693,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 692,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 669,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: isRecording ? '錄音中... 點擊停止' : '點擊開始錄音'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 697,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 668,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-green-50 border-2 border-green-500 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-green-700 font-semibold mb-2\",\n children: \"✓ 完成口說練習!\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 705,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: \"提示:持續練習可以提高發音準確度和流暢度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 708,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 704,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 640,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 639,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 621,\n columnNumber: 11\n }, this) : null,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handlePrevious,\n disabled: currentCardIndex === 0,\n className: \"flex items-center space-x-2 px-6 py-3 bg-white rounded-lg shadow-sm hover:shadow-md transition-shadow disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 19l-7-7 7-7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 726,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 725,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"上一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 728,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 720,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleNext,\n disabled: currentCardIndex === cards.length - 1,\n className: \"flex items-center space-x-2 px-6 py-3 bg-primary text-white rounded-lg shadow-sm hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"下一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 736,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 5l7 7-7 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 738,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 737,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 731,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 719,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 146,\n columnNumber: 7\n }, this),\n modalImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-75 p-4\",\n onClick: ()=>setModalImage(null),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative max-w-4xl max-h-[90vh] bg-white rounded-lg overflow-hidden\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setModalImage(null),\n className: \"absolute top-2 right-2 z-10 p-2 bg-white bg-opacity-90 rounded-full hover:bg-opacity-100 transition-all shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-gray-700\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 760,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 759,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 755,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: modalImage,\n alt: \"Example context enlarged\",\n className: \"w-full h-full object-contain\",\n style: {\n maxHeight: 'calc(90vh - 2rem)'\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 766,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 765,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 750,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 746,\n columnNumber: 9\n }, this),\n showReportModal && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4\",\n onClick: ()=>setShowReportModal(false),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-xl max-w-md w-full p-6\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: \"回報錯誤\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 788,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowReportModal(false),\n className: \"text-gray-400 hover:text-gray-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 794,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 793,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 789,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 787,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"詞卡:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: reportingCard === null || reportingCard === void 0 ? void 0 : reportingCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 801,\n columnNumber: 20\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 800,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"測驗模式:\",\n mode === 'flip' ? '翻卡模式' : mode === 'quiz' ? '選擇題' : mode === 'fill' ? '填空題' : mode === 'listening' ? '聽力測試' : '口說測試'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 803,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 799,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"錯誤原因(選填)\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 809,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n value: reportReason,\n onChange: (e)=>setReportReason(e.target.value),\n placeholder: \"請描述錯誤內容...\",\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-primary focus:border-primary\",\n rows: 3\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 812,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 808,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // Submit error report\n console.log('Error reported:', {\n card: reportingCard,\n mode,\n reason: reportReason\n });\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n // Show success message (could add a toast notification here)\n alert('感謝您的回報,我們會盡快處理!');\n },\n className: \"flex-1 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-hover transition-colors\",\n children: \"送出回報\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 822,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n },\n className: \"flex-1 px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition-colors\",\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 840,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 821,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 783,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 779,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 122,\n columnNumber: 5\n }, this);\n}\n_s(LearnPage, \"WqPWxKK2kVLHn5FQq3JGaZOrz6Y=\");\n_c = LearnPage;\nvar _c;\n$RefreshReg$(_c, \"LearnPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FDbkI7b0NBQ0FtQyxXQUFVOzhDQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNmO0dBaDFCd0JqRTtLQUFBQSIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvYXBwL2xlYXJuL3BhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xuaW1wb3J0IHsgTmF2aWdhdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9OYXZpZ2F0aW9uJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMZWFyblBhZ2UoKSB7XG4gIGNvbnN0IFtjdXJyZW50Q2FyZEluZGV4LCBzZXRDdXJyZW50Q2FyZEluZGV4XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc0ZsaXBwZWQsIHNldElzRmxpcHBlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGUsIHNldE1vZGVdID0gdXNlU3RhdGU8J2ZsaXAnIHwgJ3F1aXonIHwgJ2ZpbGwnIHwgJ2xpc3RlbmluZycgfCAnc3BlYWtpbmcnPignZmxpcCcpXG4gIGNvbnN0IFtzY29yZSwgc2V0U2NvcmVdID0gdXNlU3RhdGUoeyBjb3JyZWN0OiAwLCB0b3RhbDogMCB9KVxuICBjb25zdCBbc2VsZWN0ZWRBbnN3ZXIsIHNldFNlbGVjdGVkQW5zd2VyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93UmVzdWx0LCBzZXRTaG93UmVzdWx0XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZmlsbEFuc3dlciwgc2V0RmlsbEFuc3dlcl0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3Nob3dIaW50LCBzZXRTaG93SGludF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzUmVjb3JkaW5nLCBzZXRJc1JlY29yZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2F1ZGlvUGxheWluZywgc2V0QXVkaW9QbGF5aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxJbWFnZSwgc2V0TW9kYWxJbWFnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1JlcG9ydE1vZGFsLCBzZXRTaG93UmVwb3J0TW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtyZXBvcnRSZWFzb24sIHNldFJlcG9ydFJlYXNvbl0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3JlcG9ydGluZ0NhcmQsIHNldFJlcG9ydGluZ0NhcmRdID0gdXNlU3RhdGU8YW55PihudWxsKVxuXG4gIC8vIE1vY2sgZGF0YSB3aXRoIHJlYWwgZXhhbXBsZSBpbWFnZXNcbiAgY29uc3QgY2FyZHMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICB3b3JkOiAnYnJvdWdodCcsXG4gICAgICBwYXJ0T2ZTcGVlY2g6ICd2ZXJiJyxcbiAgICAgIHByb251bmNpYXRpb246ICcvYnLJlMuQdC8nLFxuICAgICAgdHJhbnNsYXRpb246ICfmj5Dlh7rjgIHluLbkvoYnLFxuICAgICAgZGVmaW5pdGlvbjogJ1Bhc3QgdGVuc2Ugb2YgYnJpbmc7IHRvIG1lbnRpb24gb3IgaW50cm9kdWNlIGEgdG9waWMgaW4gY29udmVyc2F0aW9uJyxcbiAgICAgIGV4YW1wbGU6ICdIZSBicm91Z2h0IHRoaXMgdGhpbmcgdXAgZHVyaW5nIG91ciBtZWV0aW5nIGFuZCBubyBvbmUgYWdyZWVkLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICfku5blnKjmiJHlgJHnmoTmnIPorbDkuK3mj5Dlh7rkuobpgJnku7bkuovvvIzkvYbmspLmnInkurrlkIzmhI/jgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy9icmluZ191cC5wbmcnLFxuICAgICAgc3lub255bXM6IFsnbWVudGlvbmVkJywgJ3JhaXNlZCcsICdpbnRyb2R1Y2VkJ10sXG4gICAgICBkaWZmaWN1bHR5OiAnQjEnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHdvcmQ6ICdpbnN0aW5jdHMnLFxuICAgICAgcGFydE9mU3BlZWNoOiAnbm91bicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL8uIyapuc3TJqsWLa3RzLycsXG4gICAgICB0cmFuc2xhdGlvbjogJ+acrOiDveOAgeebtOimuicsXG4gICAgICBkZWZpbml0aW9uOiAnTmF0dXJhbCBhYmlsaXRpZXMgdGhhdCBoZWxwIGxpdmluZyB0aGluZ3Mgc3Vydml2ZSB3aXRob3V0IGxlYXJuaW5nJyxcbiAgICAgIGV4YW1wbGU6ICdBbmltYWxzIHVzZSB0aGVpciBpbnN0aW5jdHMgdG8gZmluZCBmb29kIGFuZCBzdGF5IHNhZmUuJyxcbiAgICAgIGV4YW1wbGVUcmFuc2xhdGlvbjogJ+WLleeJqeWIqeeUqOacrOiDveS+huWwi+aJvumjn+eJqeS4puS/neaMgeWuieWFqOOAgicsXG4gICAgICBleGFtcGxlSW1hZ2U6ICcvaW1hZ2VzL2V4YW1wbGVzL2luc3RpbmN0LnBuZycsXG4gICAgICBzeW5vbnltczogWydpbnR1aXRpb24nLCAnaW1wdWxzZScsICd0ZW5kZW5jeSddLFxuICAgICAgZGlmZmljdWx0eTogJ0IyJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDMsXG4gICAgICB3b3JkOiAnd2FycmFudHMnLFxuICAgICAgcGFydE9mU3BlZWNoOiAnbm91bicsXG4gICAgICBwcm9udW5jaWF0aW9uOiAnL8uId8mUy5ByyZludHMvJyxcbiAgICAgIHRyYW5zbGF0aW9uOiAn5pCc5p+l5Luk44CB5o6I5qyK5LukJyxcbiAgICAgIGRlZmluaXRpb246ICdPZmZpY2lhbCBkb2N1bWVudHMgdGhhdCBnaXZlIHBvbGljZSBwZXJtaXNzaW9uIHRvIGRvIHNvbWV0aGluZycsXG4gICAgICBleGFtcGxlOiAnVGhlIHBvbGljZSBvYnRhaW5lZCB3YXJyYW50cyB0byBzZWFyY2ggdGhlIGJ1aWxkaW5nLicsXG4gICAgICBleGFtcGxlVHJhbnNsYXRpb246ICforabmlrnlj5blvpfkuobmkJzmn6Xku6TkvobmkJzmn6XpgJnmo5/lu7rnr4nnianjgIInLFxuICAgICAgZXhhbXBsZUltYWdlOiAnL2ltYWdlcy9leGFtcGxlcy93YXJyYW50LnBuZycsXG4gICAgICBzeW5vbnltczogWydhdXRob3JpemF0aW9uJywgJ3Blcm1pdCcsICdsaWNlbnNlJ10sXG4gICAgICBkaWZmaWN1bHR5OiAnQzEnXG4gICAgfVxuICBdXG5cbiAgY29uc3QgY3VycmVudENhcmQgPSBjYXJkc1tjdXJyZW50Q2FyZEluZGV4XVxuXG4gIC8vIFF1aXogbW9kZSBvcHRpb25zIC0gZHluYW1pY2FsbHkgZ2VuZXJhdGUgZnJvbSBjdXJyZW50IGNhcmRzXG4gIGNvbnN0IHF1aXpPcHRpb25zID0gW1xuICAgIGNhcmRzW2N1cnJlbnRDYXJkSW5kZXhdLnRyYW5zbGF0aW9uLFxuICAgIC4uLmNhcmRzXG4gICAgICAuZmlsdGVyKChfLCBpZHgpID0+IGlkeCAhPT0gY3VycmVudENhcmRJbmRleClcbiAgICAgIC5tYXAoY2FyZCA9PiBjYXJkLnRyYW5zbGF0aW9uKVxuICAgICAgLnNsaWNlKDAsIDIpLFxuICAgICflu7rorbDjgIHmj5DorbAnIC8vIGFkZGl0aW9uYWwgd3Jvbmcgb3B0aW9uXG4gIF0uc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KSAvLyBzaHVmZmxlIG9wdGlvbnNcblxuICBjb25zdCBoYW5kbGVGbGlwID0gKCkgPT4ge1xuICAgIHNldElzRmxpcHBlZCghaXNGbGlwcGVkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlTmV4dCA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudENhcmRJbmRleCA8IGNhcmRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHNldEN1cnJlbnRDYXJkSW5kZXgoY3VycmVudENhcmRJbmRleCArIDEpXG4gICAgICBzZXRJc0ZsaXBwZWQoZmFsc2UpXG4gICAgICBzZXRTZWxlY3RlZEFuc3dlcihudWxsKVxuICAgICAgc2V0U2hvd1Jlc3VsdChmYWxzZSlcbiAgICAgIHNldEZpbGxBbnN3ZXIoJycpXG4gICAgICBzZXRTaG93SGludChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVQcmV2aW91cyA9ICgpID0+IHtcbiAgICBpZiAoY3VycmVudENhcmRJbmRleCA+IDApIHtcbiAgICAgIHNldEN1cnJlbnRDYXJkSW5kZXgoY3VycmVudENhcmRJbmRleCAtIDEpXG4gICAgICBzZXRJc0ZsaXBwZWQoZmFsc2UpXG4gICAgICBzZXRTZWxlY3RlZEFuc3dlcihudWxsKVxuICAgICAgc2V0U2hvd1Jlc3VsdChmYWxzZSlcbiAgICAgIHNldEZpbGxBbnN3ZXIoJycpXG4gICAgICBzZXRTaG93SGludChmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEaWZmaWN1bHR5UmF0ZSA9IChyYXRpbmc6IG51bWJlcikgPT4ge1xuICAgIC8vIE1vY2sgcmF0aW5nIGxvZ2ljXG4gICAgY29uc29sZS5sb2coYFJhdGVkICR7cmF0aW5nfSBmb3IgJHtjdXJyZW50Q2FyZC53b3JkfWApXG4gICAgaGFuZGxlTmV4dCgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVRdWl6QW5zd2VyID0gKGFuc3dlcjogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRBbnN3ZXIoYW5zd2VyKVxuICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICBpZiAoYW5zd2VyID09PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbikge1xuICAgICAgc2V0U2NvcmUoeyAuLi5zY29yZSwgY29ycmVjdDogc2NvcmUuY29ycmVjdCArIDEsIHRvdGFsOiBzY29yZS50b3RhbCArIDEgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2NvcmUoeyAuLi5zY29yZSwgdG90YWw6IHNjb3JlLnRvdGFsICsgMSB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1ibHVlLTUwIHRvLWluZGlnby0xMDBcIj5cbiAgICAgIHsvKiBOYXZpZ2F0aW9uICovfVxuICAgICAgPG5hdiBjbGFzc05hbWU9XCJiZy13aGl0ZSBzaGFkb3ctc20gYm9yZGVyLWJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy03eGwgbXgtYXV0byBweC00IHNtOnB4LTYgbGc6cHgtOFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaC0xNlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LThcIj5cbiAgICAgICAgICAgICAgPExpbmsgaHJlZj1cIi9kYXNoYm9hcmRcIiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1wcmltYXJ5XCI+RHJhbWFMaW5nPC9MaW5rPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpmbGV4IHNwYWNlLXgtNlwiPlxuICAgICAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCIgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCI+5YSA6KGo5p2/PC9MaW5rPlxuICAgICAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZmxhc2hjYXJkc1wiIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMFwiPuipnuWNoTwvTGluaz5cbiAgICAgICAgICAgICAgICA8TGluayBocmVmPVwiL2xlYXJuXCIgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTkwMCBmb250LW1lZGl1bVwiPuWtuOe/kjwvTGluaz5cbiAgICAgICAgICAgICAgICA8TGluayBocmVmPVwiL2dlbmVyYXRlXCIgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCI+QUkg55Sf5oiQPC9MaW5rPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvZGFzaGJvYXJkJ31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgw5cg57WQ5p2f5a2457+SXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25hdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy00eGwgbXgtYXV0byBweC00IHB5LThcIj5cbiAgICAgICAgey8qIFByb2dyZXNzIEJhciAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi04XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+6YCy5bqmPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgIHtjdXJyZW50Q2FyZEluZGV4ICsgMX0gLyB7Y2FyZHMubGVuZ3RofVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGJnLWdyYXktMjAwIHJvdW5kZWQtZnVsbCBoLTJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSBoLTIgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IGAkeygoY3VycmVudENhcmRJbmRleCArIDEpIC8gY2FyZHMubGVuZ3RoKSAqIDEwMH0lYCB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7LyogTW9kZSBUb2dnbGUgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBtYi02XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy1zbSBwLTEgaW5saW5lLWZsZXggZmxleC13cmFwXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ2ZsaXAnKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0yIHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICBtb2RlID09PSAnZmxpcCdcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOe/u+WNoeaooeW8j1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ3F1aXonKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0yIHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICBtb2RlID09PSAncXVpeidcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOmBuOaTh+mhjFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ2ZpbGwnKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0yIHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICBtb2RlID09PSAnZmlsbCdcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOWhq+epuumhjFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ2xpc3RlbmluZycpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdsaXN0ZW5pbmcnXG4gICAgICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUnXG4gICAgICAgICAgICAgICAgICA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAnXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDogb3lipvmuKzoqaZcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RlKCdzcGVha2luZycpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdzcGVha2luZydcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOWPo+iqqua4rOipplxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHttb2RlID09PSAnZmxpcCcgPyAoXG4gICAgICAgICAgLyogRmxpcCBDYXJkIE1vZGUgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgRmxpcCBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC05NiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUZsaXB9XG4gICAgICAgICAgICAgIHN0eWxlPXt7IHBlcnNwZWN0aXZlOiAnMTAwMHB4JyB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi02MDAgJHtcbiAgICAgICAgICAgICAgICAgIGlzRmxpcHBlZCA/ICdyb3RhdGUteS0xODAnIDogJydcbiAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3R5bGU6ICdwcmVzZXJ2ZS0zZCcsXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IGlzRmxpcHBlZCA/ICdyb3RhdGVZKDE4MGRlZyknIDogJ3JvdGF0ZVkoMGRlZyknXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsvKiBGcm9udCBvZiBjYXJkICovfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHctZnVsbCBoLWZ1bGwgYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBiYWNrZmFjZVZpc2liaWxpdHk6ICdoaWRkZW4nIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LTR4bCBmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBtYi00XCI+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC53b3JkfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGcgdGV4dC1ncmF5LTYwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5wYXJ0T2ZTcGVlY2h9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5wcm9udW5jaWF0aW9ufVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTggdGV4dC1zbSB0ZXh0LWdyYXktNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgIOm7nuaTiue/u+i9ieafpeeci+etlOahiFxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB7LyogQmFjayBvZiBjYXJkICovfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHctZnVsbCBoLWZ1bGwgYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOCBvdmVyZmxvdy15LWF1dG9cIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICAgICAgICAgIGJhY2tmYWNlVmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3JvdGF0ZVkoMTgwZGVnKSdcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTFcIj7nv7vora88L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwXCI+e2N1cnJlbnRDYXJkLnRyYW5zbGF0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTFcIj7lrprnvqk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDBcIj57Y3VycmVudENhcmQuZGVmaW5pdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCBtYi0xXCI+5L6L5Y+lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+e2N1cnJlbnRDYXJkLmV4YW1wbGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIHRleHQtc20gbXQtMVwiPntjdXJyZW50Q2FyZC5leGFtcGxlVHJhbnNsYXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPuWQjOe+qeipnjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5zeW5vbnltcy5tYXAoKHN5biwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17aWR4fSBjbGFzc05hbWU9XCJweC0zIHB5LTEgYmctZ3JheS0xMDAgcm91bmRlZC1mdWxsIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3lufVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIERpZmZpY3VsdHkgUmF0aW5nICovfVxuICAgICAgICAgICAge2lzRmxpcHBlZCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtOFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMFwiPumAmeWAi+WWruWtl+WwjeS9oOS+huiqqumbo+W6puWmguS9le+8nzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXIgc3BhY2UteC0zXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURpZmZpY3VsdHlSYXRlKDEpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC00IHB5LTIgYmctcmVkLTEwMCB0ZXh0LXJlZC03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy1yZWQtMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg8J+YlCDlrozlhajkuI3oqJjlvpdcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEaWZmaWN1bHR5UmF0ZSgzKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNCBweS0yIGJnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctNzAwIHJvdW5kZWQtbGcgaG92ZXI6YmcteWVsbG93LTIwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIPCfmJAg5pyJ6bue5Zuw6ZujXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRGlmZmljdWx0eVJhdGUoNSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy1ncmVlbi0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDwn5iKIOW+iOewoeWWrlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG1vZGUgPT09ICdxdWl6JyA/IChcbiAgICAgICAgICAvKiBRdWl6IE1vZGUgLSDpgbjmk4fpoYzvvJroi7HmloflrprnvqnpgbjkuK3mlofnv7vora8gKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgUXVpeiBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTJcIj7moLnmk5rlrprnvqnpgbjmk4fmraPnorrnmoTkuK3mlofnv7vora88L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteGwgdGV4dC1ncmF5LTgwMCBsZWFkaW5nLXJlbGF4ZWRcIj5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5kZWZpbml0aW9ufVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICh7Y3VycmVudENhcmQucGFydE9mU3BlZWNofSlcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG4gICAgICAgICAgICAgIHtxdWl6T3B0aW9ucy5tYXAoKG9wdGlvbiwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAga2V5PXtpZHh9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiAhc2hvd1Jlc3VsdCAmJiBoYW5kbGVRdWl6QW5zd2VyKG9wdGlvbil9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2hvd1Jlc3VsdH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHctZnVsbCBwLTQgdGV4dC1sZWZ0IHJvdW5kZWQtbGcgYm9yZGVyLTIgdHJhbnNpdGlvbi1hbGwgJHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd1Jlc3VsdCAmJiBvcHRpb24gPT09IGN1cnJlbnRDYXJkLnRyYW5zbGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLWdyZWVuLTUwMCBiZy1ncmVlbi01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNob3dSZXN1bHQgJiYgb3B0aW9uID09PSBzZWxlY3RlZEFuc3dlciAmJiBvcHRpb24gIT09IGN1cnJlbnRDYXJkLnRyYW5zbGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTUwJ1xuICAgICAgICAgICAgICAgICAgICAgIDogc2VsZWN0ZWRBbnN3ZXIgPT09IG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1wcmltYXJ5IGJnLXByaW1hcnktbGlnaHQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJvcmRlci1ncmF5LTMwMCdcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e29wdGlvbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gY3VycmVudENhcmQudHJhbnNsYXRpb24gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNSB0ZXh0LWdyZWVuLTUwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTUgMTNsNCA0TDE5IDdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiBvcHRpb24gPT09IHNlbGVjdGVkQW5zd2VyICYmIG9wdGlvbiAhPT0gY3VycmVudENhcmQudHJhbnNsYXRpb24gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNSB0ZXh0LXJlZC01MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG1vZGUgPT09ICdmaWxsJyA/IChcbiAgICAgICAgICAvKiBGaWxsIGluIHRoZSBCbGFuayBNb2RlIC0g5aGr56m66aGMICovXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgey8qIEVycm9yIFJlcG9ydCBCdXR0b24gZm9yIEZpbGwgTW9kZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBtYi0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKGN1cnJlbnRDYXJkKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5Zue5aCx6Yyv6KqkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAg5Zue5aCx6Yyv6KqkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi00XCI+5qC55pOa5L6L5Y+l5ZyW54mH5ZKM5Y+l5a2Q5aGr5YWl5q2j56K655qE6Kme5b2ZPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIEV4YW1wbGUgSW1hZ2UgKi99XG4gICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5leGFtcGxlSW1hZ2UgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNFwiPlxuICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICBzcmM9e2N1cnJlbnRDYXJkLmV4YW1wbGVJbWFnZX1cbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiRXhhbXBsZSBjb250ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbGcgc2hhZG93LW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOnNoYWRvdy1sZyB0cmFuc2l0aW9uLXNoYWRvd1wiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1heEhlaWdodDogJzQwMHB4Jywgb2JqZWN0Rml0OiAnY29udGFpbicgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kYWxJbWFnZShjdXJyZW50Q2FyZC5leGFtcGxlSW1hZ2UpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LWdyYXktNTAwIG10LTIgdGV4dC1jZW50ZXJcIj7pu57mk4rlnJbniYflj6/mlL7lpKfmn6XnnIs8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICB7LyogRXhhbXBsZSBTZW50ZW5jZSB3aXRoIEJsYW5rICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGcgdGV4dC1ncmF5LTgwMCBtYi00XCI+XG4gICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGUuc3BsaXQoY3VycmVudENhcmQud29yZCkubWFwKChwYXJ0LCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e2l9PlxuICAgICAgICAgICAgICAgICAgICB7cGFydH1cbiAgICAgICAgICAgICAgICAgICAge2kgPCBjdXJyZW50Q2FyZC5leGFtcGxlLnNwbGl0KGN1cnJlbnRDYXJkLndvcmQpLmxlbmd0aCAtIDEgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImlubGluZS1ibG9jayB3LTMyIGJvcmRlci1iLTIgYm9yZGVyLWdyYXktNDAwIG14LTFcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBIaW50IEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgeyFzaG93SGludCAmJiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd0hpbnQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcHJpbWFyeSBob3Zlcjp0ZXh0LXByaW1hcnktaG92ZXIgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTMgMTZoLTF2LTRoLTFtMS00aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICDpu57mk4rmn6XnnIvmj5DnpLpcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICB7LyogRGVmaW5pdGlvbiBIaW50ICovfVxuICAgICAgICAgICAgICB7c2hvd0hpbnQgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMyBwLTMgYmctYmx1ZS01MCByb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ibHVlLTgwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPuWumue+qeaPkOekuu+8mjwvc3Ryb25nPiB7Y3VycmVudENhcmQuZGVmaW5pdGlvbn1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBBbnN3ZXIgSW5wdXQgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtmaWxsQW5zd2VyfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0RmlsbEFuc3dlcihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLovLjlhaXnrZTmoYguLi5cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC00IHB5LTMgYm9yZGVyLTIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgZm9jdXM6Ym9yZGVyLXByaW1hcnkgZm9jdXM6b3V0bGluZS1ub25lIHRleHQtbGdcIlxuICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgZmlsbEFuc3dlcikge1xuICAgICAgICAgICAgICAgICAgICBzZXRTaG93UmVzdWx0KHRydWUpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogU3VibWl0IEJ1dHRvbiAqL31cbiAgICAgICAgICAgIHshc2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBmaWxsQW5zd2VyICYmIHNldFNob3dSZXN1bHQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFmaWxsQW5zd2VyfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweS0zIGJnLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLWxnIGZvbnQtbWVkaXVtIGhvdmVyOmJnLXByaW1hcnktaG92ZXIgdHJhbnNpdGlvbi1jb2xvcnMgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg5o+Q5Lqk562U5qGIXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgey8qIFJlc3VsdCBEaXNwbGF5ICovfVxuICAgICAgICAgICAge3Nob3dSZXN1bHQgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHAtNCByb3VuZGVkLWxnICR7XG4gICAgICAgICAgICAgICAgZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgID8gJ2JnLWdyZWVuLTUwIGJvcmRlci0yIGJvcmRlci1ncmVlbi01MDAnXG4gICAgICAgICAgICAgICAgICA6ICdiZy1yZWQtNTAgYm9yZGVyLTIgYm9yZGVyLXJlZC01MDAnXG4gICAgICAgICAgICAgIH1gfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Bmb250LXNlbWlib2xkICR7XG4gICAgICAgICAgICAgICAgICAgIGZpbGxBbnN3ZXIudG9Mb3dlckNhc2UoKSA9PT0gY3VycmVudENhcmQud29yZC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgPyAndGV4dC1ncmVlbi03MDAnXG4gICAgICAgICAgICAgICAgICAgICAgOiAndGV4dC1yZWQtNzAwJ1xuICAgICAgICAgICAgICAgICAgfWB9PlxuICAgICAgICAgICAgICAgICAgICB7ZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKCkgPyAn4pyTIOato+eiuu+8gScgOiAn4pyXIOmMr+iqpCd9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge2ZpbGxBbnN3ZXIudG9Mb3dlckNhc2UoKSAhPT0gY3VycmVudENhcmQud29yZC50b0xvd2VyQ2FzZSgpICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNzAwXCI+XG4gICAgICAgICAgICAgICAgICAgIOato+eiuuetlOahiO+8mjxzcGFuIGNsYXNzTmFtZT1cImZvbnQtYm9sZFwiPntjdXJyZW50Q2FyZC53b3JkfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHRleHQtc20gdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIG1iLTFcIj7lrozmlbTkvovlj6XvvJo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+e2N1cnJlbnRDYXJkLmV4YW1wbGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgbXQtMVwiPntjdXJyZW50Q2FyZC5leGFtcGxlVHJhbnNsYXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ2xpc3RlbmluZycgPyAoXG4gICAgICAgICAgLyogTGlzdGVuaW5nIFRlc3QgTW9kZSAtIOiBveWKm+a4rOippiAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBMaXN0ZW5pbmcgTW9kZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBtYi0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKGN1cnJlbnRDYXJkKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5Zue5aCx6Yyv6KqkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAg5Zue5aCx6Yyv6KqkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTYgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi00XCI+6IG96Z+z6aC777yM6YG45pOH5q2j56K655qE5Zau5a2XPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIEF1ZGlvIFBsYXkgQnV0dG9uICovfVxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0QXVkaW9QbGF5aW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAvLyBTaW11bGF0ZSBhdWRpbyBwbGF5aW5nXG4gICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldEF1ZGlvUGxheWluZyhmYWxzZSksIDIwMDApXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteC1hdXRvIG1iLTYgcC04IGJnLWdyYXktMTAwIHJvdW5kZWQtZnVsbCBob3ZlcjpiZy1ncmF5LTIwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7YXVkaW9QbGF5aW5nID8gKFxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTE2IGgtMTYgdGV4dC1wcmltYXJ5IGFuaW1hdGUtcHVsc2VcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1LjUzNiA4LjQ2NGE1IDUgMCAwMTAgNy4wNzJtMi44MjgtOS45YTkgOSAwIDAxMCAxMi43MjhNNS41ODYgMTVINGExIDEgMCAwMS0xLTF2LTRhMSAxIDAgMDExLTFoMS41ODZsNC43MDctNC43MDdDMTAuOTIzIDMuNjYzIDEyIDQuMTA5IDEyIDV2MTRjMCAuODkxLTEuMDc3IDEuMzM3LTEuNzA3LjcwN0w1LjU4NiAxNXpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy0xNiBoLTE2IHRleHQtZ3JheS02MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE0Ljc1MiAxMS4xNjhsLTMuMTk3LTIuMTMyQTEgMSAwIDAwMTAgOS44N3Y0LjI2M2ExIDEgMCAwMDEuNTU1LjgzMmwzLjE5Ny0yLjEzMmExIDEgMCAwMDAtMS42NjR6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTUwMFwiPum7nuaTiuaSreaUvuaMiemIleiBveeZvOmfszwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBXb3JkIE9wdGlvbnMgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAge1tjdXJyZW50Q2FyZC53b3JkLCAnZGV0ZXJtaW5lJywgJ2FjaGlldmUnLCAnY29uc2lkZXInXS5tYXAoKHdvcmQpID0+IChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e3dvcmR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiAhc2hvd1Jlc3VsdCAmJiBoYW5kbGVRdWl6QW5zd2VyKHdvcmQpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Nob3dSZXN1bHR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BwLTQgdGV4dC1sZyBmb250LW1lZGl1bSByb3VuZGVkLWxnIGJvcmRlci0yIHRyYW5zaXRpb24tYWxsICR7XG4gICAgICAgICAgICAgICAgICAgIHNob3dSZXN1bHQgJiYgd29yZCA9PT0gY3VycmVudENhcmQud29yZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1ncmVlbi01MDAgYmctZ3JlZW4tNTAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBzaG93UmVzdWx0ICYmIHdvcmQgPT09IHNlbGVjdGVkQW5zd2VyICYmIHdvcmQgIT09IGN1cnJlbnRDYXJkLndvcmRcbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZEFuc3dlciA9PT0gd29yZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1wcmltYXJ5IGJnLXByaW1hcnktbGlnaHQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLWdyYXktMjAwIGhvdmVyOmJvcmRlci1ncmF5LTMwMCdcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt3b3JkfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogUmVzdWx0IERpc3BsYXkgKi99XG4gICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNiBwLTQgYmctZ3JheS01MCByb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCBtYi0yXCI+5Zau5a2X6Kmz5oOFPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGRcIj57Y3VycmVudENhcmQud29yZH08L3NwYW4+IC0ge2N1cnJlbnRDYXJkLnRyYW5zbGF0aW9ufVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMFwiPntjdXJyZW50Q2FyZC5kZWZpbml0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDAgaXRhbGljXCI+XCJ7Y3VycmVudENhcmQuZXhhbXBsZX1cIjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG1vZGUgPT09ICdzcGVha2luZycgPyAoXG4gICAgICAgICAgLyogU3BlYWtpbmcgVGVzdCBNb2RlIC0g5Y+j6Kqq5ris6KmmICovXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgey8qIEVycm9yIFJlcG9ydCBCdXR0b24gZm9yIFNwZWFraW5nIE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLThcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItNFwiPuW/teWHuuS7peS4i+S+i+WPpTwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBUYXJnZXQgU2VudGVuY2UgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC02IGJnLWdyYXktNTAgcm91bmRlZC1sZyBtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhsIHRleHQtZ3JheS04MDAgbGVhZGluZy1yZWxheGVkIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q2FyZC5leGFtcGxlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGVUcmFuc2xhdGlvbn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFByb251bmNpYXRpb24gR3VpZGUgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTJcIj7ph43pu57llq7lrZfnmbzpn7PvvJo8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIHRleHQtbGdcIj57Y3VycmVudENhcmQud29yZH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwXCI+e2N1cnJlbnRDYXJkLnByb251bmNpYXRpb259PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJ0ZXh0LXByaW1hcnkgaG92ZXI6dGV4dC1wcmltYXJ5LWhvdmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xNS41MzYgOC40NjRhNSA1IDAgMDEwIDcuMDcybTIuODI4LTkuOWE5IDkgMCAwMTAgMTIuNzI4TTUuNTg2IDE1SDRhMSAxIDAgMDEtMS0xdi00YTEgMSAwIDAxMS0xaDEuNTg2bDQuNzA3LTQuNzA3QzEwLjkyMyAzLjY2MyAxMiA0LjEwOSAxMiA1djE0YzAgLjg5MS0xLjA3NyAxLjMzNy0xLjcwNy43MDdMNS41ODYgMTV6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlY29yZGluZyBCdXR0b24gKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldElzUmVjb3JkaW5nKCFpc1JlY29yZGluZylcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlY29yZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHJlY29yZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNSZWNvcmRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93UmVzdWx0KHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMzAwMClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHAtNiByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1hbGwgJHtcbiAgICAgICAgICAgICAgICAgICAgaXNSZWNvcmRpbmdcbiAgICAgICAgICAgICAgICAgICAgICA/ICdiZy1yZWQtNTAwIGhvdmVyOmJnLXJlZC02MDAgYW5pbWF0ZS1wdWxzZSdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdiZy1wcmltYXJ5IGhvdmVyOmJnLXByaW1hcnktaG92ZXInXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7aXNSZWNvcmRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy0xMiBoLTEyIHRleHQtd2hpdGVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNOSAxMGExIDEgMCAwMTEtMWg0YTEgMSAwIDAxMSAxdjRhMSAxIDAgMDEtMSAxaC00YTEgMSAwIDAxLTEtMXYtNHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy0xMiBoLTEyIHRleHQtd2hpdGVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTkgMTFhNyA3IDAgMDEtNyA3bTAgMGE3IDcgMCAwMS03LTdtNyA3djRtMCAwSDhtNCAwaDRtLTQtOGEzIDMgMCAwMS0zLTNWNWEzIDMgMCAxMTYgMHY2YTMgMyAwIDAxLTMgM3pcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHRleHQtc20gdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAge2lzUmVjb3JkaW5nID8gJ+mMhOmfs+S4rS4uLiDpu57mk4rlgZzmraInIDogJ+m7nuaTiumWi+Wni+mMhOmfsyd9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBSZXN1bHQgRGlzcGxheSAqL31cbiAgICAgICAgICAgICAge3Nob3dSZXN1bHQgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNiBwLTQgYmctZ3JlZW4tNTAgYm9yZGVyLTIgYm9yZGVyLWdyZWVuLTUwMCByb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JlZW4tNzAwIGZvbnQtc2VtaWJvbGQgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICDinJMg5a6M5oiQ5Y+j6Kqq57e057+S77yBXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgIOaPkOekuu+8muaMgee6jOe3tOe/kuWPr+S7peaPkOmrmOeZvOmfs+a6lueiuuW6puWSjOa1geaaouW6plxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgey8qIE5hdmlnYXRpb24gQnV0dG9ucyAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBtdC04XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUHJldmlvdXN9XG4gICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVudENhcmRJbmRleCA9PT0gMH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiBweC02IHB5LTMgYmctd2hpdGUgcm91bmRlZC1sZyBzaGFkb3ctc20gaG92ZXI6c2hhZG93LW1kIHRyYW5zaXRpb24tc2hhZG93IGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDE5bC03LTcgNy03XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPHNwYW4+5LiK5LiA5YCLPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTmV4dH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtjdXJyZW50Q2FyZEluZGV4ID09PSBjYXJkcy5sZW5ndGggLSAxfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHB4LTYgcHktMyBiZy1wcmltYXJ5IHRleHQtd2hpdGUgcm91bmRlZC1sZyBzaGFkb3ctc20gaG92ZXI6YmctcHJpbWFyeS1ob3ZlciB0cmFuc2l0aW9uLWNvbG9ycyBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+5LiL5LiA5YCLPC9zcGFuPlxuICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk05IDVsNyA3LTcgN1wiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIEltYWdlIE1vZGFsICovfVxuICAgICAge21vZGFsSW1hZ2UgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZml4ZWQgaW5zZXQtMCB6LTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWJsYWNrIGJnLW9wYWNpdHktNzUgcC00XCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RhbEltYWdlKG51bGwpfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgbWF4LXctNHhsIG1heC1oLVs5MHZoXSBiZy13aGl0ZSByb3VuZGVkLWxnIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogQ2xvc2UgQnV0dG9uICovfVxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RhbEltYWdlKG51bGwpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMiByaWdodC0yIHotMTAgcC0yIGJnLXdoaXRlIGJnLW9wYWNpdHktOTAgcm91bmRlZC1mdWxsIGhvdmVyOmJnLW9wYWNpdHktMTAwIHRyYW5zaXRpb24tYWxsIHNoYWRvdy1sZ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNiB0ZXh0LWdyYXktNzAwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICB7LyogSW1hZ2UgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNFwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgc3JjPXttb2RhbEltYWdlfVxuICAgICAgICAgICAgICAgIGFsdD1cIkV4YW1wbGUgY29udGV4dCBlbmxhcmdlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBvYmplY3QtY29udGFpblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbWF4SGVpZ2h0OiAnY2FsYyg5MHZoIC0gMnJlbSknIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7LyogRXJyb3IgUmVwb3J0IE1vZGFsICovfVxuICAgICAge3Nob3dSZXBvcnRNb2RhbCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmxhY2sgYmctb3BhY2l0eS01MCBwLTRcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXBvcnRNb2RhbChmYWxzZSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy14bCBtYXgtdy1tZCB3LWZ1bGwgcC02XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTRcIj5cbiAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZFwiPuWbnuWgsemMr+iqpDwvaDM+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UmVwb3J0TW9kYWwoZmFsc2UpfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1ncmF5LTYwMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICDoqZ7ljaHvvJo8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntyZXBvcnRpbmdDYXJkPy53b3JkfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICDmuKzpqZfmqKHlvI/vvJp7bW9kZSA9PT0gJ2ZsaXAnID8gJ+e/u+WNoeaooeW8jycgOiBtb2RlID09PSAncXVpeicgPyAn6YG45pOH6aGMJyA6IG1vZGUgPT09ICdmaWxsJyA/ICfloavnqbrpoYwnIDogbW9kZSA9PT0gJ2xpc3RlbmluZycgPyAn6IG95Yqb5ris6KmmJyA6ICflj6PoqqrmuKzoqaYnfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAg6Yyv6Kqk5Y6f5Zug77yI6YG45aGr77yJXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIHZhbHVlPXtyZXBvcnRSZWFzb259XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRSZXBvcnRSZWFzb24oZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6KuL5o+P6L+w6Yyv6Kqk5YWn5a65Li4uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcHgtMyBweS0yIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBmb2N1czpyaW5nLXByaW1hcnkgZm9jdXM6Ym9yZGVyLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHJvd3M9ezN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBTdWJtaXQgZXJyb3IgcmVwb3J0XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgcmVwb3J0ZWQ6Jywge1xuICAgICAgICAgICAgICAgICAgICBjYXJkOiByZXBvcnRpbmdDYXJkLFxuICAgICAgICAgICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246IHJlcG9ydFJlYXNvblxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbChmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydFJlYXNvbignJylcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQobnVsbClcbiAgICAgICAgICAgICAgICAgIC8vIFNob3cgc3VjY2VzcyBtZXNzYWdlIChjb3VsZCBhZGQgYSB0b2FzdCBub3RpZmljYXRpb24gaGVyZSlcbiAgICAgICAgICAgICAgICAgIGFsZXJ0KCfmhJ/orJ3mgqjnmoTlm57loLHvvIzmiJHlgJHmnIPnm6Hlv6vomZXnkIbvvIEnKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHB4LTQgcHktMiBiZy1wcmltYXJ5IHRleHQtd2hpdGUgcm91bmRlZC1sZyBob3ZlcjpiZy1wcmltYXJ5LWhvdmVyIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIOmAgeWHuuWbnuWgsVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbChmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydFJlYXNvbignJylcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQobnVsbClcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBweC00IHB5LTIgYmctZ3JheS0xMDAgdGV4dC1ncmF5LTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyYXktMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIOWPlua2iFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn0iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJMaW5rIiwiTGVhcm5QYWdlIiwiY3VycmVudENhcmRJbmRleCIsInNldEN1cnJlbnRDYXJkSW5kZXgiLCJpc0ZsaXBwZWQiLCJzZXRJc0ZsaXBwZWQiLCJtb2RlIiwic2V0TW9kZSIsInNjb3JlIiwic2V0U2NvcmUiLCJjb3JyZWN0IiwidG90YWwiLCJzZWxlY3RlZEFuc3dlciIsInNldFNlbGVjdGVkQW5zd2VyIiwic2hvd1Jlc3VsdCIsInNldFNob3dSZXN1bHQiLCJmaWxsQW5zd2VyIiwic2V0RmlsbEFuc3dlciIsInNob3dIaW50Iiwic2V0U2hvd0hpbnQiLCJpc1JlY29yZGluZyIsInNldElzUmVjb3JkaW5nIiwiYXVkaW9QbGF5aW5nIiwic2V0QXVkaW9QbGF5aW5nIiwibW9kYWxJbWFnZSIsInNldE1vZGFsSW1hZ2UiLCJzaG93UmVwb3J0TW9kYWwiLCJzZXRTaG93UmVwb3J0TW9kYWwiLCJyZXBvcnRSZWFzb24iLCJzZXRSZXBvcnRSZWFzb24iLCJyZXBvcnRpbmdDYXJkIiwic2V0UmVwb3J0aW5nQ2FyZCIsImNhcmRzIiwiaWQiLCJ3b3JkIiwicGFydE9mU3BlZWNoIiwicHJvbnVuY2lhdGlvbiIsInRyYW5zbGF0aW9uIiwiZGVmaW5pdGlvbiIsImV4YW1wbGUiLCJleGFtcGxlVHJhbnNsYXRpb24iLCJleGFtcGxlSW1hZ2UiLCJzeW5vbnltcyIsImRpZmZpY3VsdHkiLCJjdXJyZW50Q2FyZCIsInF1aXpPcHRpb25zIiwiZmlsdGVyIiwiXyIsImlkeCIsIm1hcCIsImNhcmQiLCJzbGljZSIsInNvcnQiLCJNYXRoIiwicmFuZG9tIiwiaGFuZGxlRmxpcCIsImhhbmRsZU5leHQiLCJsZW5ndGgiLCJoYW5kbGVQcmV2aW91cyIsImhhbmRsZURpZmZpY3VsdHlSYXRlIiwicmF0aW5nIiwiY29uc29sZSIsImxvZyIsImhhbmRsZVF1aXpBbnN3ZXIiLCJhbnN3ZXIiLCJkaXYiLCJjbGFzc05hbWUiLCJuYXYiLCJocmVmIiwiYnV0dG9uIiwib25DbGljayIsIndpbmRvdyIsImxvY2F0aW9uIiwic3BhbiIsInN0eWxlIiwid2lkdGgiLCJ0aXRsZSIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsInBlcnNwZWN0aXZlIiwidHJhbnNmb3JtU3R5bGUiLCJ0cmFuc2Zvcm0iLCJiYWNrZmFjZVZpc2liaWxpdHkiLCJzeW4iLCJvcHRpb24iLCJkaXNhYmxlZCIsImltZyIsInNyYyIsImFsdCIsIm1heEhlaWdodCIsIm9iamVjdEZpdCIsInNwbGl0IiwicGFydCIsImkiLCJzdHJvbmciLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInBsYWNlaG9sZGVyIiwib25LZXlQcmVzcyIsImtleSIsInRvTG93ZXJDYXNlIiwic2V0VGltZW91dCIsInN0b3BQcm9wYWdhdGlvbiIsImgzIiwibGFiZWwiLCJ0ZXh0YXJlYSIsInJvd3MiLCJyZWFzb24iLCJhbGVydCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/learn/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/learn/page.cf4bfef944e80cba.hot-update.js b/frontend/.next/static/webpack/app/learn/page.cf4bfef944e80cba.hot-update.js new file mode 100644 index 0000000..e060917 --- /dev/null +++ b/frontend/.next/static/webpack/app/learn/page.cf4bfef944e80cba.hot-update.js @@ -0,0 +1,32 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/learn/page",{ + +/***/ "(app-pages-browser)/./app/learn/page.tsx": +/*!****************************!*\ + !*** ./app/learn/page.tsx ***! + \****************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ LearnPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction LearnPage() {\n _s();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const [currentCardIndex, setCurrentCardIndex] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [isFlipped, setIsFlipped] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [mode, setMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('flip');\n const [score, setScore] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n correct: 0,\n total: 0\n });\n const [selectedAnswer, setSelectedAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showResult, setShowResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [fillAnswer, setFillAnswer] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [showHint, setShowHint] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [isRecording, setIsRecording] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [audioPlaying, setAudioPlaying] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [modalImage, setModalImage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showReportModal, setShowReportModal] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [reportReason, setReportReason] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [reportingCard, setReportingCard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Mock data with real example images\n const cards = [\n {\n id: 1,\n word: 'brought',\n partOfSpeech: 'verb',\n pronunciation: '/brɔːt/',\n translation: '提出、帶來',\n definition: 'Past tense of bring; to mention or introduce a topic in conversation',\n example: 'He brought this thing up during our meeting and no one agreed.',\n exampleTranslation: '他在我們的會議中提出了這件事,但沒有人同意。',\n exampleImage: '/images/examples/bring_up.png',\n synonyms: [\n 'mentioned',\n 'raised',\n 'introduced'\n ],\n difficulty: 'B1'\n },\n {\n id: 2,\n word: 'instincts',\n partOfSpeech: 'noun',\n pronunciation: '/ˈɪnstɪŋkts/',\n translation: '本能、直覺',\n definition: 'Natural abilities that help living things survive without learning',\n example: 'Animals use their instincts to find food and stay safe.',\n exampleTranslation: '動物利用本能來尋找食物並保持安全。',\n exampleImage: '/images/examples/instinct.png',\n synonyms: [\n 'intuition',\n 'impulse',\n 'tendency'\n ],\n difficulty: 'B2'\n },\n {\n id: 3,\n word: 'warrants',\n partOfSpeech: 'noun',\n pronunciation: '/ˈwɔːrənts/',\n translation: '搜查令、授權令',\n definition: 'Official documents that give police permission to do something',\n example: 'The police obtained warrants to search the building.',\n exampleTranslation: '警方取得了搜查令來搜查這棟建築物。',\n exampleImage: '/images/examples/warrant.png',\n synonyms: [\n 'authorization',\n 'permit',\n 'license'\n ],\n difficulty: 'C1'\n }\n ];\n const currentCard = cards[currentCardIndex];\n // Quiz mode options - dynamically generate from current cards\n const quizOptions = [\n cards[currentCardIndex].translation,\n ...cards.filter((_, idx)=>idx !== currentCardIndex).map((card)=>card.translation).slice(0, 2),\n '建議、提議' // additional wrong option\n ].sort(()=>Math.random() - 0.5) // shuffle options\n ;\n const handleFlip = ()=>{\n setIsFlipped(!isFlipped);\n };\n const handleNext = ()=>{\n if (currentCardIndex < cards.length - 1) {\n setCurrentCardIndex(currentCardIndex + 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handlePrevious = ()=>{\n if (currentCardIndex > 0) {\n setCurrentCardIndex(currentCardIndex - 1);\n setIsFlipped(false);\n setSelectedAnswer(null);\n setShowResult(false);\n setFillAnswer('');\n setShowHint(false);\n }\n };\n const handleDifficultyRate = (rating)=>{\n // Mock rating logic\n console.log(\"Rated \".concat(rating, \" for \").concat(currentCard.word));\n handleNext();\n };\n const handleQuizAnswer = (answer)=>{\n setSelectedAnswer(answer);\n setShowResult(true);\n if (answer === currentCard.translation) {\n setScore({\n ...score,\n correct: score.correct + 1,\n total: score.total + 1\n });\n } else {\n setScore({\n ...score,\n total: score.total + 1\n });\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"bg-white shadow-sm border-b\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/dashboard\",\n className: \"text-2xl font-bold text-primary\",\n children: \"DramaLing\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 129,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/dashboard\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"儀表板\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 131,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/flashcards\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 132,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/learn\",\n className: \"text-gray-900 font-medium\",\n children: \"學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 133,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/generate\",\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"AI 生成\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 134,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 130,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 128,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>window.location.href = '/dashboard',\n className: \"text-gray-600 hover:text-gray-900\",\n children: \"\\xd7 結束學習\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 137,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 127,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 126,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 125,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-4xl mx-auto px-4 py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: \"進度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 151,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n currentCardIndex + 1,\n \" / \",\n cards.length\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 152,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 150,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full bg-gray-200 rounded-full h-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-primary h-2 rounded-full transition-all\",\n style: {\n width: \"\".concat((currentCardIndex + 1) / cards.length * 100, \"%\")\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 157,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 156,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 149,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-sm p-1 inline-flex flex-wrap\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('flip'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'flip' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"翻卡模式\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 167,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('quiz'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'quiz' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"選擇題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 177,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('fill'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'fill' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"填空題\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 187,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('listening'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'listening' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"聽力測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setMode('speaking'),\n className: \"px-3 py-2 rounded-md transition-colors \".concat(mode === 'speaking' ? 'bg-primary text-white' : 'text-gray-600 hover:text-gray-900'),\n children: \"口說測試\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 207,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 166,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 165,\n columnNumber: 9\n }, this),\n mode === 'flip' ? /* Flip Card Mode */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 234,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 233,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 225,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 224,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full h-96 cursor-pointer\",\n onClick: handleFlip,\n style: {\n perspective: '1000px'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full transition-transform duration-600 \".concat(isFlipped ? 'rotate-y-180' : ''),\n style: {\n transformStyle: 'preserve-3d',\n transform: isFlipped ? 'rotateY(180deg)' : 'rotateY(0deg)'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 flex flex-col items-center justify-center\",\n style: {\n backfaceVisibility: 'hidden'\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-4xl font-bold text-gray-900 mb-4\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 259,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-600 mb-2\",\n children: currentCard.partOfSpeech\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 262,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 265,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8 text-sm text-gray-400\",\n children: \"點擊翻轉查看答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 268,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 255,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-full bg-white rounded-2xl shadow-xl p-8 overflow-y-auto\",\n style: {\n backfaceVisibility: 'hidden',\n transform: 'rotateY(180deg)'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-1\",\n children: \"翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 283,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-bold text-gray-900\",\n children: currentCard.translation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 284,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 282,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"定義\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 287,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 288,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 286,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 291,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 292,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 text-sm mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 293,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 290,\n columnNumber: 21\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-sm font-semibold text-gray-700 mb-1\",\n children: \"同義詞\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 296,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap gap-2\",\n children: currentCard.synonyms.map((syn, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"px-3 py-1 bg-gray-100 rounded-full text-sm\",\n children: syn\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 299,\n columnNumber: 27\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 297,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 295,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 281,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 274,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 245,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 240,\n columnNumber: 13\n }, this),\n isFlipped && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-600\",\n children: \"這個單字對你來說難度如何?\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 314,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 313,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(1),\n className: \"px-4 py-2 bg-red-100 text-red-700 rounded-lg hover:bg-red-200 transition-colors\",\n children: \"\\uD83D\\uDE14 完全不記得\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 317,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(3),\n className: \"px-4 py-2 bg-yellow-100 text-yellow-700 rounded-lg hover:bg-yellow-200 transition-colors\",\n children: \"\\uD83D\\uDE10 有點困難\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 323,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleDifficultyRate(5),\n className: \"px-4 py-2 bg-green-100 text-green-700 rounded-lg hover:bg-green-200 transition-colors\",\n children: \"\\uD83D\\uDE0A 很簡單\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 329,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 316,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 312,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 222,\n columnNumber: 11\n }, this) : mode === 'quiz' ? /* Quiz Mode - 選擇題:英文定義選中文翻譯 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 353,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 352,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 344,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 343,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"根據定義選擇正確的中文翻譯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 361,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 362,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 mt-2\",\n children: [\n \"(\",\n currentCard.partOfSpeech,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 365,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 360,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: quizOptions.map((option, idx)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(option),\n disabled: showResult,\n className: \"w-full p-4 text-left rounded-lg border-2 transition-all \".concat(showResult && option === currentCard.translation ? 'border-green-500 bg-green-50' : showResult && option === selectedAnswer && option !== currentCard.translation ? 'border-red-500 bg-red-50' : selectedAnswer === option ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: option\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 387,\n columnNumber: 21\n }, this),\n showResult && option === currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-green-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 390,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 389,\n columnNumber: 23\n }, this),\n showResult && option === selectedAnswer && option !== currentCard.translation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 text-red-500\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 395,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 394,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 386,\n columnNumber: 19\n }, this)\n }, idx, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 372,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 370,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 359,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 341,\n columnNumber: 11\n }, this) : mode === 'fill' ? /* Fill in the Blank Mode - 填空題 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 419,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 418,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 410,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 409,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"根據例句圖片和句子填入正確的詞彙\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 427,\n columnNumber: 17\n }, this),\n currentCard.exampleImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: currentCard.exampleImage,\n alt: \"Example context\",\n className: \"w-full rounded-lg shadow-md cursor-pointer hover:shadow-lg transition-shadow\",\n style: {\n maxHeight: '400px',\n objectFit: 'contain'\n },\n onClick: ()=>setModalImage(currentCard.exampleImage)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 432,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-gray-500 mt-2 text-center\",\n children: \"點擊圖片可放大查看\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 439,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 431,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg text-gray-800 mb-4\",\n children: currentCard.example.split(currentCard.word).map((part, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n part,\n i < currentCard.example.split(currentCard.word).length - 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-block w-32 border-b-2 border-gray-400 mx-1\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 449,\n columnNumber: 23\n }, this)\n ]\n }, i, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 446,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 444,\n columnNumber: 15\n }, this),\n !showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowHint(true),\n className: \"text-sm text-primary hover:text-primary-hover flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 462,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 461,\n columnNumber: 19\n }, this),\n \"點擊查看提示\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 457,\n columnNumber: 17\n }, this),\n showHint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 p-3 bg-blue-50 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-blue-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"strong\", {\n children: \"定義提示:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 472,\n columnNumber: 21\n }, this),\n \" \",\n currentCard.definition\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 471,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 470,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 426,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: fillAnswer,\n onChange: (e)=>setFillAnswer(e.target.value),\n placeholder: \"輸入答案...\",\n className: \"w-full px-4 py-3 border-2 border-gray-300 rounded-lg focus:border-primary focus:outline-none text-lg\",\n onKeyPress: (e)=>{\n if (e.key === 'Enter' && fillAnswer) {\n setShowResult(true);\n }\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 480,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 479,\n columnNumber: 13\n }, this),\n !showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>fillAnswer && setShowResult(true),\n disabled: !fillAnswer,\n className: \"w-full py-3 bg-primary text-white rounded-lg font-medium hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: \"提交答案\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 496,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 rounded-lg \".concat(fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'bg-green-50 border-2 border-green-500' : 'bg-red-50 border-2 border-red-500'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold \".concat(fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? 'text-green-700' : 'text-red-700'),\n children: fillAnswer.toLowerCase() === currentCard.word.toLowerCase() ? '✓ 正確!' : '✗ 錯誤'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 513,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 512,\n columnNumber: 17\n }, this),\n fillAnswer.toLowerCase() !== currentCard.word.toLowerCase() && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-700\",\n children: [\n \"正確答案:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-bold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 523,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 522,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-semibold mb-1\",\n children: \"完整例句:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 527,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 528,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-500 mt-1\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 529,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 526,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 507,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 425,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 407,\n columnNumber: 11\n }, this) : mode === 'listening' ? /* Listening Test Mode - 聽力測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 549,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 548,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 540,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 539,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"聽音頻,選擇正確的單字\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 557,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setAudioPlaying(true);\n // Simulate audio playing\n setTimeout(()=>setAudioPlaying(false), 2000);\n },\n className: \"mx-auto mb-6 p-8 bg-gray-100 rounded-full hover:bg-gray-200 transition-colors\",\n children: audioPlaying ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-primary animate-pulse\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 570,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 569,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-16 h-16 text-gray-600\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 574,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 575,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 573,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 560,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500\",\n children: \"點擊播放按鈕聽發音\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 580,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 556,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-3\",\n children: [\n currentCard.word,\n 'determine',\n 'achieve',\n 'consider'\n ].map((word)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>!showResult && handleQuizAnswer(word),\n disabled: showResult,\n className: \"p-4 text-lg font-medium rounded-lg border-2 transition-all \".concat(showResult && word === currentCard.word ? 'border-green-500 bg-green-50' : showResult && word === selectedAnswer && word !== currentCard.word ? 'border-red-500 bg-red-50' : selectedAnswer === word ? 'border-primary bg-primary-light' : 'border-gray-200 hover:border-gray-300'),\n children: word\n }, word, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 586,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 584,\n columnNumber: 13\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-gray-50 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-semibold text-gray-700 mb-2\",\n children: \"單字詳情\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 608,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 611,\n columnNumber: 21\n }, this),\n \" - \",\n currentCard.translation\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 610,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: currentCard.definition\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 613,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-500 italic\",\n children: [\n '\"',\n currentCard.example,\n '\"'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 614,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 609,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 607,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 555,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 537,\n columnNumber: 11\n }, this) : mode === 'speaking' ? /* Speaking Test Mode - 口說測試 */ /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setReportingCard(currentCard);\n setShowReportModal(true);\n },\n className: \"text-red-500 hover:text-red-600 text-sm flex items-center gap-1\",\n title: \"回報錯誤\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 634,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 633,\n columnNumber: 17\n }, this),\n \"回報錯誤\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 625,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 624,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl shadow-xl p-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-4\",\n children: \"念出以下例句\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 642,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 bg-gray-50 rounded-lg mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xl text-gray-800 leading-relaxed mb-3\",\n children: currentCard.example\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 646,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-600\",\n children: currentCard.exampleTranslation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 649,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 645,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: \"重點單字發音:\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 656,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold text-lg\",\n children: currentCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 658,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: currentCard.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 659,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-primary hover:text-primary-hover\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 662,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 661,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 660,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 657,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 655,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setIsRecording(!isRecording);\n if (!isRecording) {\n // Start recording\n setTimeout(()=>{\n setIsRecording(false);\n setShowResult(true);\n }, 3000);\n }\n },\n className: \"p-6 rounded-full transition-all \".concat(isRecording ? 'bg-red-500 hover:bg-red-600 animate-pulse' : 'bg-primary hover:bg-primary-hover'),\n children: isRecording ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 689,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 690,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 688,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-12 h-12 text-white\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 694,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 693,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 670,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 text-sm text-gray-600\",\n children: isRecording ? '錄音中... 點擊停止' : '點擊開始錄音'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 698,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 669,\n columnNumber: 15\n }, this),\n showResult && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 bg-green-50 border-2 border-green-500 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-green-700 font-semibold mb-2\",\n children: \"✓ 完成口說練習!\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 706,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600\",\n children: \"提示:持續練習可以提高發音準確度和流暢度\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 709,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 705,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 641,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 640,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 622,\n columnNumber: 11\n }, this) : null,\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between mt-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handlePrevious,\n disabled: currentCardIndex === 0,\n className: \"flex items-center space-x-2 px-6 py-3 bg-white rounded-lg shadow-sm hover:shadow-md transition-shadow disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M15 19l-7-7 7-7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 727,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 726,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"上一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 729,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 721,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleNext,\n disabled: currentCardIndex === cards.length - 1,\n className: \"flex items-center space-x-2 px-6 py-3 bg-primary text-white rounded-lg shadow-sm hover:bg-primary-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"下一個\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 737,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 5l7 7-7 7\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 739,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 738,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 732,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 720,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 147,\n columnNumber: 7\n }, this),\n modalImage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-75 p-4\",\n onClick: ()=>setModalImage(null),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative max-w-4xl max-h-[90vh] bg-white rounded-lg overflow-hidden\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setModalImage(null),\n className: \"absolute top-2 right-2 z-10 p-2 bg-white bg-opacity-90 rounded-full hover:bg-opacity-100 transition-all shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-gray-700\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 761,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 760,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 756,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: modalImage,\n alt: \"Example context enlarged\",\n className: \"w-full h-full object-contain\",\n style: {\n maxHeight: 'calc(90vh - 2rem)'\n }\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 767,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 766,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 751,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 747,\n columnNumber: 9\n }, this),\n showReportModal && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4\",\n onClick: ()=>setShowReportModal(false),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-lg shadow-xl max-w-md w-full p-6\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: \"回報錯誤\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 789,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowReportModal(false),\n className: \"text-gray-400 hover:text-gray-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 795,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 794,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 790,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 788,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"詞卡:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: reportingCard === null || reportingCard === void 0 ? void 0 : reportingCard.word\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 802,\n columnNumber: 20\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 801,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-600 mb-2\",\n children: [\n \"測驗模式:\",\n mode === 'flip' ? '翻卡模式' : mode === 'quiz' ? '選擇題' : mode === 'fill' ? '填空題' : mode === 'listening' ? '聽力測試' : '口說測試'\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 804,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 800,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium text-gray-700 mb-2\",\n children: \"錯誤原因(選填)\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 810,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n value: reportReason,\n onChange: (e)=>setReportReason(e.target.value),\n placeholder: \"請描述錯誤內容...\",\n className: \"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-primary focus:border-primary\",\n rows: 3\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 813,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 809,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // Submit error report\n console.log('Error reported:', {\n card: reportingCard,\n mode,\n reason: reportReason\n });\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n // Show success message (could add a toast notification here)\n alert('感謝您的回報,我們會盡快處理!');\n },\n className: \"flex-1 px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-hover transition-colors\",\n children: \"送出回報\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 823,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setShowReportModal(false);\n setReportReason('');\n setReportingCard(null);\n },\n className: \"flex-1 px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition-colors\",\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 841,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 822,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 784,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 780,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/learn/page.tsx\",\n lineNumber: 123,\n columnNumber: 5\n }, this);\n}\n_s(LearnPage, \"A33pHe7n/okUhfaMoz3QjZYl284=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter\n ];\n});\n_c = LearnPage;\nvar _c;\n$RefreshReg$(_c, \"LearnPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bUI7d0NBQ25CRSxnQkFBZ0I7d0NBQ2hCRSxpQkFBaUI7b0NBQ25CO29DQUNBbUMsV0FBVTs4Q0FDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTZjtHQWoxQndCbEU7O1FBQ1BELHNEQUFTQTs7O0tBREZDIiwic291cmNlcyI6WyIvVXNlcnMvamV0dGNoZW5nMTAxOC9jb2RlL2RyYW1hbGluZy12b2NhYi1sZWFybmluZy9mcm9udGVuZC9hcHAvbGVhcm4vcGFnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG5pbXBvcnQgeyBOYXZpZ2F0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL05hdmlnYXRpb24nXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIExlYXJuUGFnZSgpIHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgW2N1cnJlbnRDYXJkSW5kZXgsIHNldEN1cnJlbnRDYXJkSW5kZXhdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW2lzRmxpcHBlZCwgc2V0SXNGbGlwcGVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kZSwgc2V0TW9kZV0gPSB1c2VTdGF0ZTwnZmxpcCcgfCAncXVpeicgfCAnZmlsbCcgfCAnbGlzdGVuaW5nJyB8ICdzcGVha2luZyc+KCdmbGlwJylcbiAgY29uc3QgW3Njb3JlLCBzZXRTY29yZV0gPSB1c2VTdGF0ZSh7IGNvcnJlY3Q6IDAsIHRvdGFsOiAwIH0pXG4gIGNvbnN0IFtzZWxlY3RlZEFuc3dlciwgc2V0U2VsZWN0ZWRBbnN3ZXJdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dSZXN1bHQsIHNldFNob3dSZXN1bHRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtmaWxsQW5zd2VyLCBzZXRGaWxsQW5zd2VyXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbc2hvd0hpbnQsIHNldFNob3dIaW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNSZWNvcmRpbmcsIHNldElzUmVjb3JkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbYXVkaW9QbGF5aW5nLCBzZXRBdWRpb1BsYXlpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFttb2RhbEltYWdlLCBzZXRNb2RhbEltYWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93UmVwb3J0TW9kYWwsIHNldFNob3dSZXBvcnRNb2RhbF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3JlcG9ydFJlYXNvbiwgc2V0UmVwb3J0UmVhc29uXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbcmVwb3J0aW5nQ2FyZCwgc2V0UmVwb3J0aW5nQ2FyZF0gPSB1c2VTdGF0ZTxhbnk+KG51bGwpXG5cbiAgLy8gTW9jayBkYXRhIHdpdGggcmVhbCBleGFtcGxlIGltYWdlc1xuICBjb25zdCBjYXJkcyA9IFtcbiAgICB7XG4gICAgICBpZDogMSxcbiAgICAgIHdvcmQ6ICdicm91Z2h0JyxcbiAgICAgIHBhcnRPZlNwZWVjaDogJ3ZlcmInLFxuICAgICAgcHJvbnVuY2lhdGlvbjogJy9icsmUy5B0LycsXG4gICAgICB0cmFuc2xhdGlvbjogJ+aPkOWHuuOAgeW4tuS+hicsXG4gICAgICBkZWZpbml0aW9uOiAnUGFzdCB0ZW5zZSBvZiBicmluZzsgdG8gbWVudGlvbiBvciBpbnRyb2R1Y2UgYSB0b3BpYyBpbiBjb252ZXJzYXRpb24nLFxuICAgICAgZXhhbXBsZTogJ0hlIGJyb3VnaHQgdGhpcyB0aGluZyB1cCBkdXJpbmcgb3VyIG1lZXRpbmcgYW5kIG5vIG9uZSBhZ3JlZWQuJyxcbiAgICAgIGV4YW1wbGVUcmFuc2xhdGlvbjogJ+S7luWcqOaIkeWAkeeahOacg+itsOS4reaPkOWHuuS6humAmeS7tuS6i++8jOS9huaykuacieS6uuWQjOaEj+OAgicsXG4gICAgICBleGFtcGxlSW1hZ2U6ICcvaW1hZ2VzL2V4YW1wbGVzL2JyaW5nX3VwLnBuZycsXG4gICAgICBzeW5vbnltczogWydtZW50aW9uZWQnLCAncmFpc2VkJywgJ2ludHJvZHVjZWQnXSxcbiAgICAgIGRpZmZpY3VsdHk6ICdCMSdcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAyLFxuICAgICAgd29yZDogJ2luc3RpbmN0cycsXG4gICAgICBwYXJ0T2ZTcGVlY2g6ICdub3VuJyxcbiAgICAgIHByb251bmNpYXRpb246ICcvy4jJqm5zdMmqxYtrdHMvJyxcbiAgICAgIHRyYW5zbGF0aW9uOiAn5pys6IO944CB55u06Ka6JyxcbiAgICAgIGRlZmluaXRpb246ICdOYXR1cmFsIGFiaWxpdGllcyB0aGF0IGhlbHAgbGl2aW5nIHRoaW5ncyBzdXJ2aXZlIHdpdGhvdXQgbGVhcm5pbmcnLFxuICAgICAgZXhhbXBsZTogJ0FuaW1hbHMgdXNlIHRoZWlyIGluc3RpbmN0cyB0byBmaW5kIGZvb2QgYW5kIHN0YXkgc2FmZS4nLFxuICAgICAgZXhhbXBsZVRyYW5zbGF0aW9uOiAn5YuV54mp5Yip55So5pys6IO95L6G5bCL5om+6aOf54mp5Lim5L+d5oyB5a6J5YWo44CCJyxcbiAgICAgIGV4YW1wbGVJbWFnZTogJy9pbWFnZXMvZXhhbXBsZXMvaW5zdGluY3QucG5nJyxcbiAgICAgIHN5bm9ueW1zOiBbJ2ludHVpdGlvbicsICdpbXB1bHNlJywgJ3RlbmRlbmN5J10sXG4gICAgICBkaWZmaWN1bHR5OiAnQjInXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMyxcbiAgICAgIHdvcmQ6ICd3YXJyYW50cycsXG4gICAgICBwYXJ0T2ZTcGVlY2g6ICdub3VuJyxcbiAgICAgIHByb251bmNpYXRpb246ICcvy4h3yZTLkHLJmW50cy8nLFxuICAgICAgdHJhbnNsYXRpb246ICfmkJzmn6Xku6TjgIHmjojmrIrku6QnLFxuICAgICAgZGVmaW5pdGlvbjogJ09mZmljaWFsIGRvY3VtZW50cyB0aGF0IGdpdmUgcG9saWNlIHBlcm1pc3Npb24gdG8gZG8gc29tZXRoaW5nJyxcbiAgICAgIGV4YW1wbGU6ICdUaGUgcG9saWNlIG9idGFpbmVkIHdhcnJhbnRzIHRvIHNlYXJjaCB0aGUgYnVpbGRpbmcuJyxcbiAgICAgIGV4YW1wbGVUcmFuc2xhdGlvbjogJ+itpuaWueWPluW+l+S6huaQnOafpeS7pOS+huaQnOafpemAmeajn+W7uuevieeJqeOAgicsXG4gICAgICBleGFtcGxlSW1hZ2U6ICcvaW1hZ2VzL2V4YW1wbGVzL3dhcnJhbnQucG5nJyxcbiAgICAgIHN5bm9ueW1zOiBbJ2F1dGhvcml6YXRpb24nLCAncGVybWl0JywgJ2xpY2Vuc2UnXSxcbiAgICAgIGRpZmZpY3VsdHk6ICdDMSdcbiAgICB9XG4gIF1cblxuICBjb25zdCBjdXJyZW50Q2FyZCA9IGNhcmRzW2N1cnJlbnRDYXJkSW5kZXhdXG5cbiAgLy8gUXVpeiBtb2RlIG9wdGlvbnMgLSBkeW5hbWljYWxseSBnZW5lcmF0ZSBmcm9tIGN1cnJlbnQgY2FyZHNcbiAgY29uc3QgcXVpek9wdGlvbnMgPSBbXG4gICAgY2FyZHNbY3VycmVudENhcmRJbmRleF0udHJhbnNsYXRpb24sXG4gICAgLi4uY2FyZHNcbiAgICAgIC5maWx0ZXIoKF8sIGlkeCkgPT4gaWR4ICE9PSBjdXJyZW50Q2FyZEluZGV4KVxuICAgICAgLm1hcChjYXJkID0+IGNhcmQudHJhbnNsYXRpb24pXG4gICAgICAuc2xpY2UoMCwgMiksXG4gICAgJ+W7uuitsOOAgeaPkOitsCcgLy8gYWRkaXRpb25hbCB3cm9uZyBvcHRpb25cbiAgXS5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpIC8vIHNodWZmbGUgb3B0aW9uc1xuXG4gIGNvbnN0IGhhbmRsZUZsaXAgPSAoKSA9PiB7XG4gICAgc2V0SXNGbGlwcGVkKCFpc0ZsaXBwZWQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVOZXh0ID0gKCkgPT4ge1xuICAgIGlmIChjdXJyZW50Q2FyZEluZGV4IDwgY2FyZHMubGVuZ3RoIC0gMSkge1xuICAgICAgc2V0Q3VycmVudENhcmRJbmRleChjdXJyZW50Q2FyZEluZGV4ICsgMSlcbiAgICAgIHNldElzRmxpcHBlZChmYWxzZSlcbiAgICAgIHNldFNlbGVjdGVkQW5zd2VyKG51bGwpXG4gICAgICBzZXRTaG93UmVzdWx0KGZhbHNlKVxuICAgICAgc2V0RmlsbEFuc3dlcignJylcbiAgICAgIHNldFNob3dIaW50KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVByZXZpb3VzID0gKCkgPT4ge1xuICAgIGlmIChjdXJyZW50Q2FyZEluZGV4ID4gMCkge1xuICAgICAgc2V0Q3VycmVudENhcmRJbmRleChjdXJyZW50Q2FyZEluZGV4IC0gMSlcbiAgICAgIHNldElzRmxpcHBlZChmYWxzZSlcbiAgICAgIHNldFNlbGVjdGVkQW5zd2VyKG51bGwpXG4gICAgICBzZXRTaG93UmVzdWx0KGZhbHNlKVxuICAgICAgc2V0RmlsbEFuc3dlcignJylcbiAgICAgIHNldFNob3dIaW50KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURpZmZpY3VsdHlSYXRlID0gKHJhdGluZzogbnVtYmVyKSA9PiB7XG4gICAgLy8gTW9jayByYXRpbmcgbG9naWNcbiAgICBjb25zb2xlLmxvZyhgUmF0ZWQgJHtyYXRpbmd9IGZvciAke2N1cnJlbnRDYXJkLndvcmR9YClcbiAgICBoYW5kbGVOZXh0KClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVF1aXpBbnN3ZXIgPSAoYW5zd2VyOiBzdHJpbmcpID0+IHtcbiAgICBzZXRTZWxlY3RlZEFuc3dlcihhbnN3ZXIpXG4gICAgc2V0U2hvd1Jlc3VsdCh0cnVlKVxuICAgIGlmIChhbnN3ZXIgPT09IGN1cnJlbnRDYXJkLnRyYW5zbGF0aW9uKSB7XG4gICAgICBzZXRTY29yZSh7IC4uLnNjb3JlLCBjb3JyZWN0OiBzY29yZS5jb3JyZWN0ICsgMSwgdG90YWw6IHNjb3JlLnRvdGFsICsgMSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTY29yZSh7IC4uLnNjb3JlLCB0b3RhbDogc2NvcmUudG90YWwgKyAxIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ncmFkaWVudC10by1iciBmcm9tLWJsdWUtNTAgdG8taW5kaWdvLTEwMFwiPlxuICAgICAgey8qIE5hdmlnYXRpb24gKi99XG4gICAgICA8bmF2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHNoYWRvdy1zbSBib3JkZXItYlwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTd4bCBteC1hdXRvIHB4LTQgc206cHgtNiBsZzpweC04XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBoLTE2XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtOFwiPlxuICAgICAgICAgICAgICA8TGluayBocmVmPVwiL2Rhc2hib2FyZFwiIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LXByaW1hcnlcIj5EcmFtYUxpbmc8L0xpbms+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggc3BhY2UteC02XCI+XG4gICAgICAgICAgICAgICAgPExpbmsgaHJlZj1cIi9kYXNoYm9hcmRcIiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj7lhIDooajmnb88L0xpbms+XG4gICAgICAgICAgICAgICAgPExpbmsgaHJlZj1cIi9mbGFzaGNhcmRzXCIgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCI+6Kme5Y2hPC9MaW5rPlxuICAgICAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvbGVhcm5cIiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktOTAwIGZvbnQtbWVkaXVtXCI+5a2457+SPC9MaW5rPlxuICAgICAgICAgICAgICAgIDxMaW5rIGhyZWY9XCIvZ2VuZXJhdGVcIiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIj5BSSDnlJ/miJA8L0xpbms+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9kYXNoYm9hcmQnfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDDlyDntZDmnZ/lrbjnv5JcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmF2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTR4bCBteC1hdXRvIHB4LTQgcHktOFwiPlxuICAgICAgICB7LyogUHJvZ3Jlc3MgQmFyICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLThcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj7pgLLluqY8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAge2N1cnJlbnRDYXJkSW5kZXggKyAxfSAvIHtjYXJkcy5sZW5ndGh9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIGgtMlwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IGgtMiByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1hbGxcIlxuICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogYCR7KChjdXJyZW50Q2FyZEluZGV4ICsgMSkgLyBjYXJkcy5sZW5ndGgpICogMTAwfSVgIH19XG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBNb2RlIFRvZ2dsZSAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIG1iLTZcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LXNtIHAtMSBpbmxpbmUtZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnZmxpcCcpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdmbGlwJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg57+75Y2h5qih5byPXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgncXVpeicpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdxdWl6J1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg6YG45pOH6aGMXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnZmlsbCcpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BweC0zIHB5LTIgcm91bmRlZC1tZCB0cmFuc2l0aW9uLWNvbG9ycyAke1xuICAgICAgICAgICAgICAgIG1vZGUgPT09ICdmaWxsJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg5aGr56m66aGMXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9kZSgnbGlzdGVuaW5nJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ2xpc3RlbmluZydcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOiBveWKm+a4rOipplxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGUoJ3NwZWFraW5nJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7XG4gICAgICAgICAgICAgICAgbW9kZSA9PT0gJ3NwZWFraW5nJ1xuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgOiAndGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg5Y+j6Kqq5ris6KmmXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAge21vZGUgPT09ICdmbGlwJyA/IChcbiAgICAgICAgICAvKiBGbGlwIENhcmQgTW9kZSAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBGbGlwIE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLTk2IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRmxpcH1cbiAgICAgICAgICAgICAgc3R5bGU9e3sgcGVyc3BlY3RpdmU6ICcxMDAwcHgnIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BhYnNvbHV0ZSB3LWZ1bGwgaC1mdWxsIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTYwMCAke1xuICAgICAgICAgICAgICAgICAgaXNGbGlwcGVkID8gJ3JvdGF0ZS15LTE4MCcgOiAnJ1xuICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHlsZTogJ3ByZXNlcnZlLTNkJyxcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogaXNGbGlwcGVkID8gJ3JvdGF0ZVkoMTgwZGVnKScgOiAncm90YXRlWSgwZGVnKSdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgey8qIEZyb250IG9mIGNhcmQgKi99XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCBiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tmYWNlVmlzaWJpbGl0eTogJ2hpZGRlbicgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtNHhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTRcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLndvcmR9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LWdyYXktNjAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnBhcnRPZlNwZWVjaH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxnIHRleHQtZ3JheS01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnByb251bmNpYXRpb259XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtOCB0ZXh0LXNtIHRleHQtZ3JheS00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg6bue5pOK57+76L2J5p+l55yL562U5qGIXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIHsvKiBCYWNrIG9mIGNhcmQgKi99XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCBiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04IG92ZXJmbG93LXktYXV0b1wiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBcbiAgICAgICAgICAgICAgICAgICAgYmFja2ZhY2VWaXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlWSgxODBkZWcpJ1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPue/u+itrzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDBcIj57Y3VycmVudENhcmQudHJhbnNsYXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDAgbWItMVwiPuWumue+qTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTYwMFwiPntjdXJyZW50Q2FyZC5kZWZpbml0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTFcIj7kvovlj6U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDBcIj57Y3VycmVudENhcmQuZXhhbXBsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgdGV4dC1zbSBtdC0xXCI+e2N1cnJlbnRDYXJkLmV4YW1wbGVUcmFuc2xhdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMCBtYi0xXCI+5ZCM576p6KmePC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLnN5bm9ueW1zLm1hcCgoc3luLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtpZHh9IGNsYXNzTmFtZT1cInB4LTMgcHktMSBiZy1ncmF5LTEwMCByb3VuZGVkLWZ1bGwgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzeW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogRGlmZmljdWx0eSBSYXRpbmcgKi99XG4gICAgICAgICAgICB7aXNGbGlwcGVkICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC04XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+6YCZ5YCL5Zau5a2X5bCN5L2g5L6G6Kqq6Zuj5bqm5aaC5L2V77yfPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRGlmZmljdWx0eVJhdGUoMSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy1yZWQtMTAwIHRleHQtcmVkLTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLXJlZC0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDwn5iUIOWujOWFqOS4jeiomOW+l1xuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURpZmZpY3VsdHlSYXRlKDMpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC00IHB5LTIgYmcteWVsbG93LTEwMCB0ZXh0LXllbGxvdy03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy15ZWxsb3ctMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg8J+YkCDmnInpu57lm7Dpm6NcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEaWZmaWN1bHR5UmF0ZSg1KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNCBweS0yIGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTcwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyZWVuLTIwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIPCfmIog5b6I57Ch5ZauXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ3F1aXonID8gKFxuICAgICAgICAgIC8qIFF1aXogTW9kZSAtIOmBuOaTh+mhjO+8muiLseaWh+Wumue+qemBuOS4reaWh+e/u+itryAqL1xuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIHsvKiBFcnJvciBSZXBvcnQgQnV0dG9uIGZvciBRdWl6IE1vZGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgbWItMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChjdXJyZW50Q2FyZClcbiAgICAgICAgICAgICAgICAgIHNldFNob3dSZXBvcnRNb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIuWbnuWgsemMr+iqpFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIOWbnuWgsemMr+iqpFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtMnhsIHNoYWRvdy14bCBwLThcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPuagueaTmuWumue+qemBuOaTh+ato+eiuueahOS4reaWh+e/u+itrzwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14bCB0ZXh0LWdyYXktODAwIGxlYWRpbmctcmVsYXhlZFwiPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmRlZmluaXRpb259XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDAgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgKHtjdXJyZW50Q2FyZC5wYXJ0T2ZTcGVlY2h9KVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICAgICAge3F1aXpPcHRpb25zLm1hcCgob3B0aW9uLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e2lkeH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFzaG93UmVzdWx0ICYmIGhhbmRsZVF1aXpBbnN3ZXIob3B0aW9uKX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzaG93UmVzdWx0fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgdy1mdWxsIHAtNCB0ZXh0LWxlZnQgcm91bmRlZC1sZyBib3JkZXItMiB0cmFuc2l0aW9uLWFsbCAke1xuICAgICAgICAgICAgICAgICAgICBzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gY3VycmVudENhcmQudHJhbnNsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItZ3JlZW4tNTAwIGJnLWdyZWVuLTUwJ1xuICAgICAgICAgICAgICAgICAgICAgIDogc2hvd1Jlc3VsdCAmJiBvcHRpb24gPT09IHNlbGVjdGVkQW5zd2VyICYmIG9wdGlvbiAhPT0gY3VycmVudENhcmQudHJhbnNsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnXG4gICAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZEFuc3dlciA9PT0gb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgYmctcHJpbWFyeS1saWdodCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItZ3JheS0yMDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwJ1xuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57b3B0aW9ufTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3Nob3dSZXN1bHQgJiYgb3B0aW9uID09PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtZ3JlZW4tNTAwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNSAxM2w0IDRMMTkgN1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIG9wdGlvbiA9PT0gc2VsZWN0ZWRBbnN3ZXIgJiYgb3B0aW9uICE9PSBjdXJyZW50Q2FyZC50cmFuc2xhdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtcmVkLTUwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ2ZpbGwnID8gKFxuICAgICAgICAgIC8qIEZpbGwgaW4gdGhlIEJsYW5rIE1vZGUgLSDloavnqbrpoYwgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgRmlsbCBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTRcIj7moLnmk5rkvovlj6XlnJbniYflkozlj6XlrZDloavlhaXmraPnorrnmoToqZ7lvZk8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogRXhhbXBsZSBJbWFnZSAqL31cbiAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGVJbWFnZSAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIHNyYz17Y3VycmVudENhcmQuZXhhbXBsZUltYWdlfVxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJFeGFtcGxlIGNvbnRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgcm91bmRlZC1sZyBzaGFkb3ctbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6c2hhZG93LWxnIHRyYW5zaXRpb24tc2hhZG93XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWF4SGVpZ2h0OiAnNDAwcHgnLCBvYmplY3RGaXQ6ICdjb250YWluJyB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRNb2RhbEltYWdlKGN1cnJlbnRDYXJkLmV4YW1wbGVJbWFnZSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMiB0ZXh0LWNlbnRlclwiPum7nuaTiuWclueJh+WPr+aUvuWkp+afpeecizwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiBFeGFtcGxlIFNlbnRlbmNlIHdpdGggQmxhbmsgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyB0ZXh0LWdyYXktODAwIG1iLTRcIj5cbiAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZXhhbXBsZS5zcGxpdChjdXJyZW50Q2FyZC53b3JkKS5tYXAoKHBhcnQsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17aX0+XG4gICAgICAgICAgICAgICAgICAgIHtwYXJ0fVxuICAgICAgICAgICAgICAgICAgICB7aSA8IGN1cnJlbnRDYXJkLmV4YW1wbGUuc3BsaXQoY3VycmVudENhcmQud29yZCkubGVuZ3RoIC0gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWJsb2NrIHctMzIgYm9yZGVyLWItMiBib3JkZXItZ3JheS00MDAgbXgtMVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIEhpbnQgQnV0dG9uICovfVxuICAgICAgICAgICAgICB7IXNob3dIaW50ICYmIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93SGludCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1wcmltYXJ5IGhvdmVyOnRleHQtcHJpbWFyeS1ob3ZlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xMyAxNmgtMXYtNGgtMW0xLTRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIOm7nuaTiuafpeeci+aPkOekulxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiBEZWZpbml0aW9uIEhpbnQgKi99XG4gICAgICAgICAgICAgIHtzaG93SGludCAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHAtMyBiZy1ibHVlLTUwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWJsdWUtODAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+5a6a576p5o+Q56S677yaPC9zdHJvbmc+IHtjdXJyZW50Q2FyZC5kZWZpbml0aW9ufVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEFuc3dlciBJbnB1dCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2ZpbGxBbnN3ZXJ9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRGaWxsQW5zd2VyKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIui8uOWFpeetlOahiC4uLlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTQgcHktMyBib3JkZXItMiBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBmb2N1czpib3JkZXItcHJpbWFyeSBmb2N1czpvdXRsaW5lLW5vbmUgdGV4dC1sZ1wiXG4gICAgICAgICAgICAgICAgb25LZXlQcmVzcz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiBmaWxsQW5zd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBTdWJtaXQgQnV0dG9uICovfVxuICAgICAgICAgICAgeyFzaG93UmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGxBbnN3ZXIgJiYgc2V0U2hvd1Jlc3VsdCh0cnVlKX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWZpbGxBbnN3ZXJ9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB5LTMgYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgZm9udC1tZWRpdW0gaG92ZXI6YmctcHJpbWFyeS1ob3ZlciB0cmFuc2l0aW9uLWNvbG9ycyBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDmj5DkuqTnrZTmoYhcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7LyogUmVzdWx0IERpc3BsYXkgKi99XG4gICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgcC00IHJvdW5kZWQtbGcgJHtcbiAgICAgICAgICAgICAgICBmaWxsQW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRDYXJkLndvcmQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgPyAnYmctZ3JlZW4tNTAgYm9yZGVyLTIgYm9yZGVyLWdyZWVuLTUwMCdcbiAgICAgICAgICAgICAgICAgIDogJ2JnLXJlZC01MCBib3JkZXItMiBib3JkZXItcmVkLTUwMCdcbiAgICAgICAgICAgICAgfWB9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGZvbnQtc2VtaWJvbGQgJHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICA/ICd0ZXh0LWdyZWVuLTcwMCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICd0ZXh0LXJlZC03MDAnXG4gICAgICAgICAgICAgICAgICB9YH0+XG4gICAgICAgICAgICAgICAgICAgIHtmaWxsQW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRDYXJkLndvcmQudG9Mb3dlckNhc2UoKSA/ICfinJMg5q2j56K677yBJyA6ICfinJcg6Yyv6KqkJ31cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7ZmlsbEFuc3dlci50b0xvd2VyQ2FzZSgpICE9PSBjdXJyZW50Q2FyZC53b3JkLnRvTG93ZXJDYXNlKCkgJiYgKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg5q2j56K6562U5qGI77yaPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+e2N1cnJlbnRDYXJkLndvcmR9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgdGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgbWItMVwiPuWujOaVtOS+i+WPpe+8mjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdj57Y3VycmVudENhcmQuZXhhbXBsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMCBtdC0xXCI+e2N1cnJlbnRDYXJkLmV4YW1wbGVUcmFuc2xhdGlvbn08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBtb2RlID09PSAnbGlzdGVuaW5nJyA/IChcbiAgICAgICAgICAvKiBMaXN0ZW5pbmcgVGVzdCBNb2RlIC0g6IG95Yqb5ris6KmmICovXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgey8qIEVycm9yIFJlcG9ydCBCdXR0b24gZm9yIExpc3RlbmluZyBNb2RlICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIG1iLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFJlcG9ydGluZ0NhcmQoY3VycmVudENhcmQpXG4gICAgICAgICAgICAgICAgICBzZXRTaG93UmVwb3J0TW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDAgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLlm57loLHpjK/oqqRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICDlm57loLHpjK/oqqRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSByb3VuZGVkLTJ4bCBzaGFkb3cteGwgcC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTRcIj7ogb3pn7PpoLvvvIzpgbjmk4fmraPnorrnmoTllq7lrZc8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogQXVkaW8gUGxheSBCdXR0b24gKi99XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRBdWRpb1BsYXlpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlIGF1ZGlvIHBsYXlpbmdcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0QXVkaW9QbGF5aW5nKGZhbHNlKSwgMjAwMClcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14LWF1dG8gbWItNiBwLTggYmctZ3JheS0xMDAgcm91bmRlZC1mdWxsIGhvdmVyOmJnLWdyYXktMjAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthdWRpb1BsYXlpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctMTYgaC0xNiB0ZXh0LXByaW1hcnkgYW5pbWF0ZS1wdWxzZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTUuNTM2IDguNDY0YTUgNSAwIDAxMCA3LjA3Mm0yLjgyOC05LjlhOSA5IDAgMDEwIDEyLjcyOE01LjU4NiAxNUg0YTEgMSAwIDAxLTEtMXYtNGExIDEgMCAwMTEtMWgxLjU4Nmw0LjcwNy00LjcwN0MxMC45MjMgMy42NjMgMTIgNC4xMDkgMTIgNXYxNGMwIC44OTEtMS4wNzcgMS4zMzctMS43MDcuNzA3TDUuNTg2IDE1elwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTE2IGgtMTYgdGV4dC1ncmF5LTYwMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTQuNzUyIDExLjE2OGwtMy4xOTctMi4xMzJBMSAxIDAgMDAxMCA5Ljg3djQuMjYzYTEgMSAwIDAwMS41NTUuODMybDMuMTk3LTIuMTMyYTEgMSAwIDAwMC0xLjY2NHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+6bue5pOK5pKt5pS+5oyJ6YiV6IG955m86Z+zPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIFdvcmQgT3B0aW9ucyAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtM1wiPlxuICAgICAgICAgICAgICB7W2N1cnJlbnRDYXJkLndvcmQsICdkZXRlcm1pbmUnLCAnYWNoaWV2ZScsICdjb25zaWRlciddLm1hcCgod29yZCkgPT4gKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17d29yZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFzaG93UmVzdWx0ICYmIGhhbmRsZVF1aXpBbnN3ZXIod29yZCl9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2hvd1Jlc3VsdH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHAtNCB0ZXh0LWxnIGZvbnQtbWVkaXVtIHJvdW5kZWQtbGcgYm9yZGVyLTIgdHJhbnNpdGlvbi1hbGwgJHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd1Jlc3VsdCAmJiB3b3JkID09PSBjdXJyZW50Q2FyZC53b3JkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLWdyZWVuLTUwMCBiZy1ncmVlbi01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNob3dSZXN1bHQgJiYgd29yZCA9PT0gc2VsZWN0ZWRBbnN3ZXIgJiYgd29yZCAhPT0gY3VycmVudENhcmQud29yZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC01MCdcbiAgICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkQW5zd2VyID09PSB3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgYmctcHJpbWFyeS1saWdodCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItZ3JheS0yMDAgaG92ZXI6Ym9yZGVyLWdyYXktMzAwJ1xuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3dvcmR9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBSZXN1bHQgRGlzcGxheSAqL31cbiAgICAgICAgICAgIHtzaG93UmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IHAtNCBiZy1ncmF5LTUwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTJcIj7llq7lrZfoqbPmg4U8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZFwiPntjdXJyZW50Q2FyZC53b3JkfTwvc3Bhbj4gLSB7Y3VycmVudENhcmQudHJhbnNsYXRpb259XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+e2N1cnJlbnRDYXJkLmRlZmluaXRpb259PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTUwMCBpdGFsaWNcIj5cIntjdXJyZW50Q2FyZC5leGFtcGxlfVwiPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbW9kZSA9PT0gJ3NwZWFraW5nJyA/IChcbiAgICAgICAgICAvKiBTcGVha2luZyBUZXN0IE1vZGUgLSDlj6PoqqrmuKzoqaYgKi9cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICB7LyogRXJyb3IgUmVwb3J0IEJ1dHRvbiBmb3IgU3BlYWtpbmcgTW9kZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBtYi0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRSZXBvcnRpbmdDYXJkKGN1cnJlbnRDYXJkKVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5Zue5aCx6Yyv6KqkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAg5Zue5aCx6Yyv6KqkXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi00XCI+5b+15Ye65Lul5LiL5L6L5Y+lPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFRhcmdldCBTZW50ZW5jZSAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTYgYmctZ3JheS01MCByb3VuZGVkLWxnIG1iLTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteGwgdGV4dC1ncmF5LTgwMCBsZWFkaW5nLXJlbGF4ZWQgbWItM1wiPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRDYXJkLmV4YW1wbGV9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudENhcmQuZXhhbXBsZVRyYW5zbGF0aW9ufVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogUHJvbnVuY2lhdGlvbiBHdWlkZSAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPumHjem7nuWWruWtl+eZvOmfs++8mjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGQgdGV4dC1sZ1wiPntjdXJyZW50Q2FyZC53b3JkfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDBcIj57Y3VycmVudENhcmQucHJvbnVuY2lhdGlvbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInRleHQtcHJpbWFyeSBob3Zlcjp0ZXh0LXByaW1hcnktaG92ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1LjUzNiA4LjQ2NGE1IDUgMCAwMTAgNy4wNzJtMi44MjgtOS45YTkgOSAwIDAxMCAxMi43MjhNNS41ODYgMTVINGExIDEgMCAwMS0xLTF2LTRhMSAxIDAgMDExLTFoMS41ODZsNC43MDctNC43MDdDMTAuOTIzIDMuNjYzIDEyIDQuMTA5IDEyIDV2MTRjMCAuODkxLTEuMDc3IDEuMzM3LTEuNzA3LjcwN0w1LjU4NiAxNXpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7LyogUmVjb3JkaW5nIEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNSZWNvcmRpbmcoIWlzUmVjb3JkaW5nKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVjb3JkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgcmVjb3JkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJc1JlY29yZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dSZXN1bHQodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICB9LCAzMDAwKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcC02IHJvdW5kZWQtZnVsbCB0cmFuc2l0aW9uLWFsbCAke1xuICAgICAgICAgICAgICAgICAgICBpc1JlY29yZGluZ1xuICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLXJlZC01MDAgaG92ZXI6YmctcmVkLTYwMCBhbmltYXRlLXB1bHNlJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLXByaW1hcnkgaG92ZXI6YmctcHJpbWFyeS1ob3ZlcidcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtpc1JlY29yZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTEyIGgtMTIgdGV4dC13aGl0ZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk05IDEwYTEgMSAwIDAxMS0xaDRhMSAxIDAgMDExIDF2NGExIDEgMCAwMS0xIDFoLTRhMSAxIDAgMDEtMS0xdi00elwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTEyIGgtMTIgdGV4dC13aGl0ZVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0xOSAxMWE3IDcgMCAwMS03IDdtMCAwYTcgNyAwIDAxLTctN203IDd2NG0wIDBIOG00IDBoNG0tNC04YTMgMyAwIDAxLTMtM1Y1YTMgMyAwIDExNiAwdjZhMyAzIDAgMDEtMyAzelwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgdGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICB7aXNSZWNvcmRpbmcgPyAn6YyE6Z+z5LitLi4uIOm7nuaTiuWBnOatoicgOiAn6bue5pOK6ZaL5aeL6YyE6Z+zJ31cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlc3VsdCBEaXNwbGF5ICovfVxuICAgICAgICAgICAgICB7c2hvd1Jlc3VsdCAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IHAtNCBiZy1ncmVlbi01MCBib3JkZXItMiBib3JkZXItZ3JlZW4tNTAwIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ncmVlbi03MDAgZm9udC1zZW1pYm9sZCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIOKckyDlrozmiJDlj6Poqqrnt7Tnv5LvvIFcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAg5o+Q56S677ya5oyB57qM57e057+S5Y+v5Lul5o+Q6auY55m86Z+z5rqW56K65bqm5ZKM5rWB5pqi5bqmXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7LyogTmF2aWdhdGlvbiBCdXR0b25zICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIG10LThcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVQcmV2aW91c31cbiAgICAgICAgICAgIGRpc2FibGVkPXtjdXJyZW50Q2FyZEluZGV4ID09PSAwfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHB4LTYgcHktMyBiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy1zbSBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTUgMTlsLTctNyA3LTdcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8c3Bhbj7kuIrkuIDlgIs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVOZXh0fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2N1cnJlbnRDYXJkSW5kZXggPT09IGNhcmRzLmxlbmd0aCAtIDF9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgcHgtNiBweS0zIGJnLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdy1zbSBob3ZlcjpiZy1wcmltYXJ5LWhvdmVyIHRyYW5zaXRpb24tY29sb3JzIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj7kuIvkuIDlgIs8L3NwYW4+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTkgNWw3IDctNyA3XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogSW1hZ2UgTW9kYWwgKi99XG4gICAgICB7bW9kYWxJbWFnZSAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmxhY2sgYmctb3BhY2l0eS03NSBwLTRcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsSW1hZ2UobnVsbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBtYXgtdy00eGwgbWF4LWgtWzkwdmhdIGJnLXdoaXRlIHJvdW5kZWQtbGcgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBDbG9zZSBCdXR0b24gKi99XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vZGFsSW1hZ2UobnVsbCl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0yIHJpZ2h0LTIgei0xMCBwLTIgYmctd2hpdGUgYmctb3BhY2l0eS05MCByb3VuZGVkLWZ1bGwgaG92ZXI6Ymctb3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1hbGwgc2hhZG93LWxnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02IHRleHQtZ3JheS03MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNiAxOEwxOCA2TTYgNmwxMiAxMlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIHsvKiBJbWFnZSAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC00XCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9e21vZGFsSW1hZ2V9XG4gICAgICAgICAgICAgICAgYWx0PVwiRXhhbXBsZSBjb250ZXh0IGVubGFyZ2VkXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhIZWlnaHQ6ICdjYWxjKDkwdmggLSAycmVtKScgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBFcnJvciBSZXBvcnQgTW9kYWwgKi99XG4gICAgICB7c2hvd1JlcG9ydE1vZGFsICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjayBiZy1vcGFjaXR5LTUwIHAtNFwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LXhsIG1heC13LW1kIHctZnVsbCBwLTZcIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkXCI+5Zue5aCx6Yyv6KqkPC9oMz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXBvcnRNb2RhbChmYWxzZSl9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTQwMCBob3Zlcjp0ZXh0LWdyYXktNjAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgIOipnuWNoe+8mjxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3JlcG9ydGluZ0NhcmQ/LndvcmR9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgIOa4rOmpl+aooeW8j++8mnttb2RlID09PSAnZmxpcCcgPyAn57+75Y2h5qih5byPJyA6IG1vZGUgPT09ICdxdWl6JyA/ICfpgbjmk4fpoYwnIDogbW9kZSA9PT0gJ2ZpbGwnID8gJ+Whq+epuumhjCcgOiBtb2RlID09PSAnbGlzdGVuaW5nJyA/ICfogb3lipvmuKzoqaYnIDogJ+WPo+iqqua4rOippid9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICDpjK/oqqTljp/lm6DvvIjpgbjloavvvIlcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgdmFsdWU9e3JlcG9ydFJlYXNvbn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFJlcG9ydFJlYXNvbihlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLoq4vmj4/ov7DpjK/oqqTlhaflrrkuLi5cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBweC0zIHB5LTIgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGZvY3VzOnJpbmctcHJpbWFyeSBmb2N1czpib3JkZXItcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgcm93cz17M31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1Ym1pdCBlcnJvciByZXBvcnRcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciByZXBvcnRlZDonLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmQ6IHJlcG9ydGluZ0NhcmQsXG4gICAgICAgICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVwb3J0UmVhc29uXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0UmVhc29uKCcnKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChudWxsKVxuICAgICAgICAgICAgICAgICAgLy8gU2hvdyBzdWNjZXNzIG1lc3NhZ2UgKGNvdWxkIGFkZCBhIHRvYXN0IG5vdGlmaWNhdGlvbiBoZXJlKVxuICAgICAgICAgICAgICAgICAgYWxlcnQoJ+aEn+isneaCqOeahOWbnuWgse+8jOaIkeWAkeacg+eboeW/q+iZleeQhu+8gScpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcHgtNCBweS0yIGJnLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLWxnIGhvdmVyOmJnLXByaW1hcnktaG92ZXIgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg6YCB5Ye65Zue5aCxXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0U2hvd1JlcG9ydE1vZGFsKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0UmVhc29uKCcnKVxuICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0aW5nQ2FyZChudWxsKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHB4LTQgcHktMiBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg5Y+W5raIXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufSJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsIkxpbmsiLCJ1c2VSb3V0ZXIiLCJMZWFyblBhZ2UiLCJyb3V0ZXIiLCJjdXJyZW50Q2FyZEluZGV4Iiwic2V0Q3VycmVudENhcmRJbmRleCIsImlzRmxpcHBlZCIsInNldElzRmxpcHBlZCIsIm1vZGUiLCJzZXRNb2RlIiwic2NvcmUiLCJzZXRTY29yZSIsImNvcnJlY3QiLCJ0b3RhbCIsInNlbGVjdGVkQW5zd2VyIiwic2V0U2VsZWN0ZWRBbnN3ZXIiLCJzaG93UmVzdWx0Iiwic2V0U2hvd1Jlc3VsdCIsImZpbGxBbnN3ZXIiLCJzZXRGaWxsQW5zd2VyIiwic2hvd0hpbnQiLCJzZXRTaG93SGludCIsImlzUmVjb3JkaW5nIiwic2V0SXNSZWNvcmRpbmciLCJhdWRpb1BsYXlpbmciLCJzZXRBdWRpb1BsYXlpbmciLCJtb2RhbEltYWdlIiwic2V0TW9kYWxJbWFnZSIsInNob3dSZXBvcnRNb2RhbCIsInNldFNob3dSZXBvcnRNb2RhbCIsInJlcG9ydFJlYXNvbiIsInNldFJlcG9ydFJlYXNvbiIsInJlcG9ydGluZ0NhcmQiLCJzZXRSZXBvcnRpbmdDYXJkIiwiY2FyZHMiLCJpZCIsIndvcmQiLCJwYXJ0T2ZTcGVlY2giLCJwcm9udW5jaWF0aW9uIiwidHJhbnNsYXRpb24iLCJkZWZpbml0aW9uIiwiZXhhbXBsZSIsImV4YW1wbGVUcmFuc2xhdGlvbiIsImV4YW1wbGVJbWFnZSIsInN5bm9ueW1zIiwiZGlmZmljdWx0eSIsImN1cnJlbnRDYXJkIiwicXVpek9wdGlvbnMiLCJmaWx0ZXIiLCJfIiwiaWR4IiwibWFwIiwiY2FyZCIsInNsaWNlIiwic29ydCIsIk1hdGgiLCJyYW5kb20iLCJoYW5kbGVGbGlwIiwiaGFuZGxlTmV4dCIsImxlbmd0aCIsImhhbmRsZVByZXZpb3VzIiwiaGFuZGxlRGlmZmljdWx0eVJhdGUiLCJyYXRpbmciLCJjb25zb2xlIiwibG9nIiwiaGFuZGxlUXVpekFuc3dlciIsImFuc3dlciIsImRpdiIsImNsYXNzTmFtZSIsIm5hdiIsImhyZWYiLCJidXR0b24iLCJvbkNsaWNrIiwid2luZG93IiwibG9jYXRpb24iLCJzcGFuIiwic3R5bGUiLCJ3aWR0aCIsInRpdGxlIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwicGVyc3BlY3RpdmUiLCJ0cmFuc2Zvcm1TdHlsZSIsInRyYW5zZm9ybSIsImJhY2tmYWNlVmlzaWJpbGl0eSIsInN5biIsIm9wdGlvbiIsImRpc2FibGVkIiwiaW1nIiwic3JjIiwiYWx0IiwibWF4SGVpZ2h0Iiwib2JqZWN0Rml0Iiwic3BsaXQiLCJwYXJ0IiwiaSIsInN0cm9uZyIsImlucHV0IiwidHlwZSIsInZhbHVlIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0IiwicGxhY2Vob2xkZXIiLCJvbktleVByZXNzIiwia2V5IiwidG9Mb3dlckNhc2UiLCJzZXRUaW1lb3V0Iiwic3RvcFByb3BhZ2F0aW9uIiwiaDMiLCJsYWJlbCIsInRleHRhcmVhIiwicm93cyIsInJlYXNvbiIsImFsZXJ0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/learn/page.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js": +/*!**************************************************!*\ + !*** ./node_modules/next/dist/api/navigation.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEOztBQUVoRCIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9hcGkvbmF2aWdhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuLi9jbGllbnQvY29tcG9uZW50cy9uYXZpZ2F0aW9uJztcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmF2aWdhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/b3d5a8eb2070c334.webpack.hot-update.json b/frontend/.next/static/webpack/b3d5a8eb2070c334.webpack.hot-update.json new file mode 100644 index 0000000..5c82546 --- /dev/null +++ b/frontend/.next/static/webpack/b3d5a8eb2070c334.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/bb82a0f39a60143a.webpack.hot-update.json b/frontend/.next/static/webpack/bb82a0f39a60143a.webpack.hot-update.json new file mode 100644 index 0000000..537d7b7 --- /dev/null +++ b/frontend/.next/static/webpack/bb82a0f39a60143a.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/learn/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/cf4bfef944e80cba.webpack.hot-update.json b/frontend/.next/static/webpack/cf4bfef944e80cba.webpack.hot-update.json new file mode 100644 index 0000000..537d7b7 --- /dev/null +++ b/frontend/.next/static/webpack/cf4bfef944e80cba.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/learn/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/de9e6b61fc2e7b13.webpack.hot-update.json b/frontend/.next/static/webpack/de9e6b61fc2e7b13.webpack.hot-update.json new file mode 100644 index 0000000..5c82546 --- /dev/null +++ b/frontend/.next/static/webpack/de9e6b61fc2e7b13.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/e48e25b7e498e2f6.webpack.hot-update.json b/frontend/.next/static/webpack/e48e25b7e498e2f6.webpack.hot-update.json new file mode 100644 index 0000000..5c82546 --- /dev/null +++ b/frontend/.next/static/webpack/e48e25b7e498e2f6.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/f790d4f15ac1d1b2.webpack.hot-update.json b/frontend/.next/static/webpack/f790d4f15ac1d1b2.webpack.hot-update.json new file mode 100644 index 0000000..4732d40 --- /dev/null +++ b/frontend/.next/static/webpack/f790d4f15ac1d1b2.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","app/dashboard/page","app/flashcards/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.275f0b5725c54220.hot-update.js b/frontend/.next/static/webpack/webpack.275f0b5725c54220.hot-update.js new file mode 100644 index 0000000..c622743 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.275f0b5725c54220.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("5cc104d72f085a60") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCI1Y2MxMDRkNzJmMDg1YTYwXCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.2dfcd12cb023612a.hot-update.js b/frontend/.next/static/webpack/webpack.2dfcd12cb023612a.hot-update.js new file mode 100644 index 0000000..bd9f977 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.2dfcd12cb023612a.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("cf4bfef944e80cba") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCJjZjRiZmVmOTQ0ZTgwY2JhXCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.333dd3da52f405be.hot-update.js b/frontend/.next/static/webpack/webpack.333dd3da52f405be.hot-update.js new file mode 100644 index 0000000..6a760b9 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.333dd3da52f405be.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("e48e25b7e498e2f6") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCJlNDhlMjViN2U0OThlMmY2XCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.355918a5929c6162.hot-update.js b/frontend/.next/static/webpack/webpack.355918a5929c6162.hot-update.js new file mode 100644 index 0000000..40805fe --- /dev/null +++ b/frontend/.next/static/webpack/webpack.355918a5929c6162.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("b3d5a8eb2070c334") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCJiM2Q1YThlYjIwNzBjMzM0XCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.5b6833c08c682ad1.hot-update.js b/frontend/.next/static/webpack/webpack.5b6833c08c682ad1.hot-update.js new file mode 100644 index 0000000..0cae99f --- /dev/null +++ b/frontend/.next/static/webpack/webpack.5b6833c08c682ad1.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("355918a5929c6162") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCIzNTU5MThhNTkyOWM2MTYyXCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.74b150a5394a2a49.hot-update.js b/frontend/.next/static/webpack/webpack.74b150a5394a2a49.hot-update.js new file mode 100644 index 0000000..7c6bceb --- /dev/null +++ b/frontend/.next/static/webpack/webpack.74b150a5394a2a49.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("bb82a0f39a60143a") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCJiYjgyYTBmMzlhNjAxNDNhXCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.79203d562e0ec8e4.hot-update.js b/frontend/.next/static/webpack/webpack.79203d562e0ec8e4.hot-update.js new file mode 100644 index 0000000..60697f2 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.79203d562e0ec8e4.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("a5ed9c629ec71a9a") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCJhNWVkOWM2MjllYzcxYTlhXCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.a5ed9c629ec71a9a.hot-update.js b/frontend/.next/static/webpack/webpack.a5ed9c629ec71a9a.hot-update.js new file mode 100644 index 0000000..0c41f88 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.a5ed9c629ec71a9a.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("333dd3da52f405be") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCIzMzNkZDNkYTUyZjQwNWJlXCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.b3d5a8eb2070c334.hot-update.js b/frontend/.next/static/webpack/webpack.b3d5a8eb2070c334.hot-update.js new file mode 100644 index 0000000..4c19918 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.b3d5a8eb2070c334.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("79203d562e0ec8e4") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCI3OTIwM2Q1NjJlMGVjOGU0XCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.bb82a0f39a60143a.hot-update.js b/frontend/.next/static/webpack/webpack.bb82a0f39a60143a.hot-update.js new file mode 100644 index 0000000..f5f57d5 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.bb82a0f39a60143a.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("2dfcd12cb023612a") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCIyZGZjZDEyY2IwMjM2MTJhXCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.cf4bfef944e80cba.hot-update.js b/frontend/.next/static/webpack/webpack.cf4bfef944e80cba.hot-update.js new file mode 100644 index 0000000..d033515 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.cf4bfef944e80cba.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("de9e6b61fc2e7b13") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCJkZTllNmI2MWZjMmU3YjEzXCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.de9e6b61fc2e7b13.hot-update.js b/frontend/.next/static/webpack/webpack.de9e6b61fc2e7b13.hot-update.js new file mode 100644 index 0000000..4afbe09 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.de9e6b61fc2e7b13.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("275f0b5725c54220") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCIyNzVmMGI1NzI1YzU0MjIwXCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.e48e25b7e498e2f6.hot-update.js b/frontend/.next/static/webpack/webpack.e48e25b7e498e2f6.hot-update.js new file mode 100644 index 0000000..f8d5213 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.e48e25b7e498e2f6.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("f790d4f15ac1d1b2") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCJmNzkwZDRmMTVhYzFkMWIyXCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.f790d4f15ac1d1b2.hot-update.js b/frontend/.next/static/webpack/webpack.f790d4f15ac1d1b2.hot-update.js new file mode 100644 index 0000000..efc648f --- /dev/null +++ b/frontend/.next/static/webpack/webpack.f790d4f15ac1d1b2.hot-update.js @@ -0,0 +1,12 @@ +"use strict"; +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("74b150a5394a2a49") +/******/ })(); +/******/ +/******/ } +) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJpZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZXMiOlsid2VicGFjay1pbnRlcm5hbDovL25leHRqcy93ZWJwYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgc291cmNlIHdhcyBnZW5lcmF0ZWQgYnkgTmV4dC5qcyBiYXNlZCBvZmYgb2YgdGhlIGdlbmVyYXRlZCBXZWJwYWNrIHJ1bnRpbWUuXG4vLyBUaGUgbWFwcGluZ3MgYXJlIGluY29ycmVjdC5cbi8vIFRvIGdldCB0aGUgY29ycmVjdCBsaW5lL2NvbHVtbiBtYXBwaW5ncywgdHVybiBvZmYgc291cmNlbWFwcyBpbiB5b3VyIGRlYnVnZ2VyLlxuXG5zZWxmW1wid2VicGFja0hvdFVwZGF0ZV9OX0VcIl0oXCJ3ZWJwYWNrXCIse30sXG4vKioqKioqLyBmdW5jdGlvbihfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IC8vIHdlYnBhY2tSdW50aW1lTW9kdWxlc1xuLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2dldEZ1bGxIYXNoICovXG4vKioqKioqLyAoKCkgPT4ge1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSAoKSA9PiAoXCI3NGIxNTBhNTM5NGEyYTQ5XCIpXG4vKioqKioqLyB9KSgpO1xuLyoqKioqKi8gXG4vKioqKioqLyB9XG4pIl19 +; \ No newline at end of file diff --git a/frontend/app/learn/page.tsx b/frontend/app/learn/page.tsx index b7219b7..b3deb81 100644 --- a/frontend/app/learn/page.tsx +++ b/frontend/app/learn/page.tsx @@ -2,8 +2,11 @@ import { useState } from 'react' import Link from 'next/link' +import { useRouter } from 'next/navigation' +import { Navigation } from '@/components/Navigation' export default function LearnPage() { + const router = useRouter() const [currentCardIndex, setCurrentCardIndex] = useState(0) const [isFlipped, setIsFlipped] = useState(false) const [mode, setMode] = useState<'flip' | 'quiz' | 'fill' | 'listening' | 'speaking'>('flip') @@ -119,27 +122,10 @@ export default function LearnPage() { return (
{/* Navigation */} - + router.push('/dashboard')} + />
{/* Progress Bar */} diff --git a/frontend/components/Navigation.tsx b/frontend/components/Navigation.tsx index 68574fc..fa36bfc 100644 --- a/frontend/components/Navigation.tsx +++ b/frontend/components/Navigation.tsx @@ -4,15 +4,19 @@ import Link from 'next/link' import { usePathname } from 'next/navigation' import { useAuth } from '@/contexts/AuthContext' -export function Navigation() { +interface NavigationProps { + showExitLearning?: boolean + onExitLearning?: () => void +} + +export function Navigation({ showExitLearning = false, onExitLearning }: NavigationProps = {}) { const { user, logout } = useAuth() const pathname = usePathname() const navItems = [ { href: '/dashboard', label: '儀表板' }, { href: '/flashcards', label: '詞卡' }, - { href: '/learn', label: '學習' }, - { href: '/generate', label: 'AI 生成' }, + { href: '/learn', label: '學習' } ] return ( @@ -41,26 +45,38 @@ export function Navigation() {
- {/* 通知按鈕 */} - - - {/* 用戶資訊 */} -
-
- {user?.username?.[0]?.toUpperCase() || 'U'} -
- {user?.displayName || user?.username} + {/* 學習模式的結束學習按鈕 */} + {showExitLearning ? ( -
+ ) : ( + <> + {/* 通知按鈕 */} + + + {/* 用戶資訊 */} +
+
+ {user?.username?.[0]?.toUpperCase() || 'U'} +
+ {user?.displayName || user?.username} + +
+ + )}