PageSourceSearch

https://doctor-aid.onrender.com/src/assets/components/SessionList.jsx

js doctor-aid.onrender.com collected 2026-10-04 11:41:05 UTC 41,765 bytes, 434 lines download raw bytes

1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/assets/components/SessionList.jsx");import __vite__cjsImport0_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=991a57be"; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"];
2import RefreshRuntime from "/@react-refresh";
3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope;
4let prevRefreshReg;
5let prevRefreshSig;
6if (import.meta.hot && !inWebWorker) {
7  if (!window.__vite_plugin_react_preamble_installed__) {
8    throw new Error("@vitejs/plugin-react can't detect preamble. Something is wrong. See https://github.com/vitejs/vite-plugin-react/pull/11#discussion_r430879201");
9  }
10  prevRefreshReg = window.$RefreshReg$;
11  prevRefreshSig = window.$RefreshSig$;
12  window.$RefreshReg$ = (type, id) => {
13    RefreshRuntime.register(type, "/doctors-dashboard/src/assets/components/SessionList.jsx " + id);
14  };
15  window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
16}
17var _s = $RefreshSig$();
18import __vite__cjsImport3_react from "/node_modules/.vite/deps/react.js?v=991a57be"; const React = __vite__cjsImport3_react.__esModule ? __vite__cjsImport3_react.default : __vite__cjsImport3_react;
19import __vite__cjsImport4_react from "/node_modules/.vite/deps/react.js?v=991a57be"; const useEffect = __vite__cjsImport4_react["useEffect"]; const useState = __vite__cjsImport4_react["useState"];
20import { getSessionsByDoctor } from "/src/assets/api/doctorsAPI.js";
21import { useUser } from "/node_modules/.vite/deps/@clerk_clerk-react.js?v=4f524b5a";
22import { Link } from "/node_modules/.vite/deps/react-router-dom.js?v=2ecb7ed9";
23import { Calendar, Clock, CheckCircle, PlusCircle, ArrowRight, ChevronRight } from "/node_modules/.vite/deps/lucide-react.js?v=78b25a04";
24const SessionList = ({ setSession }) => {
25  _s();
26  const [sessionsData, setSessionsData] = useState([]);
27  const [latestSession, setLatestSession] = useState(null);
28  const [upcomingSessions, setUpcomingSessions] = useState([]);
29  const [isLoading, setIsLoading] = useState(true);
30  const { user } = useUser();
31  const clerkId = user ? user.id : null;
32  const fetchSessions = async () => {
33    try {
34      setIsLoading(true);
35      const data = await getSessionsByDoctor(clerkId);
36      console.log("Sessions data fetched:", data);
37      setSessionsData(data);
38      setIsLoading(false);
39    } catch (error) {
40      console.error("Error fetching sessions:", error);
41      setIsLoading(false);
42    }
43  };
44  useEffect(() => {
45    fetchSessions();
46  }, [clerkId]);
47  useEffect(() => {
48    if (sessionsData.length > 0) {
49      setLatestSession(sessionsData[0]);
50      setUpcomingSessions(sessionsData.slice(1));
51      console.log("Latest session:", sessionsData[0]);
52      console.log("Upcoming sessions:", sessionsData.slice(1));
53    }
54  }, [sessionsData]);
55  const formatDate = (dateString) => {
56    if (!dateString) return "";
57    const date = new Date(dateString);
58    return date.toLocaleDateString("en-US", {
59      year: "numeric",
60      month: "short",
61      day: "numeric"
62    });
63  };
64  if (isLoading) {
65    return /* @__PURE__ */ jsxDEV("div", { className: "flex justify-center items-center h-full w-full bg-white", children: /* @__PURE__ */ jsxDEV("div", { className: "animate-spin rounded-full h-16 w-16 border-t-4 border-b-4 border-[#295567]" }, void 0, false, {
66      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
67      lineNumber: 61,
68      columnNumber: 9
69    }, this) }, void 0, false, {
70      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
71      lineNumber: 60,
72      columnNumber: 7
73    }, this);
74  }
75  return /* @__PURE__ */ jsxDEV("div", { className: "flex bg-[#FAFAF9] min-h-screen font-['Raleway',sans-serif] animate-pageTransition", children: [
76    /* @__PURE__ */ jsxDEV("div", { className: "w-2/5 flex items-center justify-center p-8", children: /* @__PURE__ */ jsxDEV("div", { className: "relative", children: [
77      /* @__PURE__ */ jsxDEV(
78        "img",
79        {
80          src: "/src/assets/images/img.png",
81          alt: "Data analyst with charts",
82          className: "w-96 h-auto"
83        },
84        void 0,
85        false,
86        {
87          fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
88          lineNumber: 71,
89          columnNumber: 11
90        },
91        this
92      ),
93      /* @__PURE__ */ jsxDEV("div", { className: "absolute -bottom-4 -right-4 bg-[#295567] text-white px-6 py-3 rounded-xl shadow-lg", children: /* @__PURE__ */ jsxDEV("p", { className: "text-sm font-medium", children: "Manage your sessions efficiently" }, void 0, false, {
94        fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
95        lineNumber: 77,
96        columnNumber: 13
97      }, this) }, void 0, false, {
98        fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
99        lineNumber: 76,
100        columnNumber: 11
101      }, this)
102    ] }, void 0, true, {
103      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
104      lineNumber: 70,
105      columnNumber: 9
106    }, this) }, void 0, false, {
107      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
108      lineNumber: 69,
109      columnNumber: 7
110    }, this),
111    /* @__PURE__ */ jsxDEV("div", { className: "w-3/5 p-10 bg-white rounded-tl-3xl shadow-md", children: /* @__PURE__ */ jsxDEV("div", { className: "max-w-2xl mx-auto", children: [
112      /* @__PURE__ */ jsxDEV("h1", { className: "text-2xl font-bold text-gray-800 mb-8 flex items-center", children: [
113        /* @__PURE__ */ jsxDEV(Calendar, { className: "mr-3 text-[#295567]", size: 24 }, void 0, false, {
114          fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
115          lineNumber: 86,
116          columnNumber: 13
117        }, this),
118        "Your Sessions"
119      ] }, void 0, true, {
120        fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
121        lineNumber: 85,
122        columnNumber: 11
123      }, this),
124      /* @__PURE__ */ jsxDEV("div", { className: "bg-[#FAFAF9] rounded-xl shadow-sm p-6", children: [
125        /* @__PURE__ */ jsxDEV("h2", { className: "text-lg font-bold text-gray-700 mb-4 flex items-center", children: [
126          /* @__PURE__ */ jsxDEV(CheckCircle, { className: "mr-2 text-[#295567]", size: 20 }, void 0, false, {
127            fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
128            lineNumber: 94,
129            columnNumber: 15
130          }, this),
131          "Latest Session"
132        ] }, void 0, true, {
133          fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
134          lineNumber: 93,
135          columnNumber: 13
136        }, this),
137        latestSession ? /* @__PURE__ */ jsxDEV("div", { className: "bg-white rounded-xl p-4 mb-6 shadow-sm border border-gray-100 transform transition-transform hover:scale-[1.01]", children: /* @__PURE__ */ jsxDEV("div", { className: "flex justify-between items-center", children: [
138          /* @__PURE__ */ jsxDEV("div", { children: [
139            /* @__PURE__ */ jsxDEV("div", { className: "flex items-center mb-2", children: /* @__PURE__ */ jsxDEV("p", { className: "text-gray-700 font-semibold", children: [
140              "Session ID: ",
141              /* @__PURE__ */ jsxDEV("span", { className: "text-[#295567]", children: [
142                "#",
143                latestSession._id ? latestSession._id.slice(-6) : ""
144              ] }, void 0, true, {
145                fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
146                lineNumber: 103,
147                columnNumber: 78
148              }, this)
149            ] }, void 0, true, {
150              fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
151              lineNumber: 103,
152              columnNumber: 23
153            }, this) }, void 0, false, {
154              fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
155              lineNumber: 102,
156              columnNumber: 21
157            }, this),
158            /* @__PURE__ */ jsxDEV("div", { className: "flex items-center text-gray-600 text-sm", children: [
159              /* @__PURE__ */ jsxDEV(Calendar, { size: 14, className: "mr-1 text-[#295567]" }, void 0, false, {
160                fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
161                lineNumber: 106,
162                columnNumber: 23
163              }, this),
164              /* @__PURE__ */ jsxDEV("span", { className: "mr-3", children: formatDate(latestSession.date) }, void 0, false, {
165                fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
166                lineNumber: 107,
167                columnNumber: 23
168              }, this),
169              /* @__PURE__ */ jsxDEV(Clock, { size: 14, className: "mr-1 text-[#295567]" }, void 0, false, {
170                fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
171                lineNumber: 108,
172                columnNumber: 23
173              }, this),
174              /* @__PURE__ */ jsxDEV("span", { children: latestSession.time || "" }, void 0, false, {
175                fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
176                lineNumber: 109,
177                columnNumber: 23
178              }, this)
179            ] }, void 0, true, {
180              fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
181              lineNumber: 105,
182              columnNumber: 21
183            }, this)
184          ] }, void 0, true, {
185            fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
186            lineNumber: 101,
187            columnNumber: 19
188          }, this),
189          /* @__PURE__ */ jsxDEV(
190            "button",
191            {
192              className: "bg-gradient-to-r from-[#295567] to-[#295567]/80 hover:from-[#295567]/90 hover:to-[#295567] text-white font-medium px-5 py-2 rounded-lg transition shadow-sm flex items-center",
193              onClick: () => setSession(latestSession._id),
194              children: [
195                /* @__PURE__ */ jsxDEV("span", { children: "Start" }, void 0, false, {
196                  fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
197                  lineNumber: 116,
198                  columnNumber: 21
199                }, this),
200                /* @__PURE__ */ jsxDEV(ArrowRight, { size: 16, className: "ml-1" }, void 0, false, {
201                  fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
202                  lineNumber: 117,
203                  columnNumber: 21
204                }, this)
205              ]
206            },
207            void 0,
208            true,
209            {
210              fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
211              lineNumber: 112,
212              columnNumber: 19
213            },
214            this
215          )
216        ] }, void 0, true, {
217          fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
218          lineNumber: 100,
219          columnNumber: 17
220        }, this) }, void 0, false, {
221          fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
222          lineNumber: 99,
223          columnNumber: 13
224        }, this) : /* @__PURE__ */ jsxDEV("div", { className: "bg-white rounded-xl p-4 mb-6 text-center text-gray-500 shadow-sm border border-gray-100", children: "No latest session available" }, void 0, false, {
225          fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
226          lineNumber: 122,
227          columnNumber: 13
228        }, this),
229        /* @__PURE__ */ jsxDEV("h2", { className: "text-lg font-bold text-gray-700 mb-4 mt-6 flex items-center", children: [
230          /* @__PURE__ */ jsxDEV(Clock, { className: "mr-2 text-[#295567]", size: 20 }, void 0, false, {
231            fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
232            lineNumber: 129,
233            columnNumber: 15
234          }, this),
235          "Upcoming Sessions"
236        ] }, void 0, true, {
237          fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
238          lineNumber: 128,
239          columnNumber: 13
240        }, this),
241        /* @__PURE__ */ jsxDEV("div", { className: "space-y-3 mb-6 max-h-64 overflow-y-auto pr-2 custom-scrollbar", children: upcomingSessions.length > 0 ? upcomingSessions.map(
242          (session, index) => /* @__PURE__ */ jsxDEV(
243            "div",
244            {
245              className: "bg-white rounded-xl p-4 shadow-sm border border-gray-100 transform transition-transform hover:scale-[1.01]",
246              style: {
247                animationName: "fadeIn",
248                animationDuration: "0.5s",
249                animationDelay: `${index * 0.05}s`,
250                animationFillMode: "both"
251              },
252              children: /* @__PURE__ */ jsxDEV("div", { className: "flex justify-between items-center", children: [
253                /* @__PURE__ */ jsxDEV("div", { children: [
254                  /* @__PURE__ */ jsxDEV("div", { className: "flex items-center mb-2", children: /* @__PURE__ */ jsxDEV("p", { className: "text-gray-700 font-semibold", children: [
255                    "Session ID: ",
256                    /* @__PURE__ */ jsxDEV("span", { className: "text-[#295567]", children: [
257                      "#",
258                      session._id ? session._id.slice(-6) : ""
259                    ] }, void 0, true, {
260                      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
261                      lineNumber: 149,
262                      columnNumber: 82
263                    }, this)
264                  ] }, void 0, true, {
265                    fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
266                    lineNumber: 149,
267                    columnNumber: 27
268                  }, this) }, void 0, false, {
269                    fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
270                    lineNumber: 148,
271                    columnNumber: 25
272                  }, this),
273                  /* @__PURE__ */ jsxDEV("div", { className: "flex items-center text-gray-600 text-sm", children: [
274                    /* @__PURE__ */ jsxDEV(Calendar, { size: 14, className: "mr-1 text-[#295567]" }, void 0, false, {
275                      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
276                      lineNumber: 152,
277                      columnNumber: 27
278                    }, this),
279                    /* @__PURE__ */ jsxDEV("span", { className: "mr-3", children: formatDate(session.date) }, void 0, false, {
280                      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
281                      lineNumber: 153,
282                      columnNumber: 27
283                    }, this),
284                    /* @__PURE__ */ jsxDEV(Clock, { size: 14, className: "mr-1 text-[#295567]" }, void 0, false, {
285                      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
286                      lineNumber: 154,
287                      columnNumber: 27
288                    }, this),
289                    /* @__PURE__ */ jsxDEV("span", { children: session.time || "" }, void 0, false, {
290                      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
291                      lineNumber: 155,
292                      columnNumber: 27
293                    }, this)
294                  ] }, void 0, true, {
295                    fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
296                    lineNumber: 151,
297                    columnNumber: 25
298                  }, this)
299                ] }, void 0, true, {
300                  fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
301                  lineNumber: 147,
302                  columnNumber: 23
303                }, this),
304                /* @__PURE__ */ jsxDEV(ChevronRight, { size: 20, className: "text-gray-400" }, void 0, false, {
305                  fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
306                  lineNumber: 158,
307                  columnNumber: 23
308                }, this)
309              ] }, void 0, true, {
310                fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
311                lineNumber: 146,
312                columnNumber: 21
313              }, this)
314            },
315            session._id,
316            false,
317            {
318              fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
319              lineNumber: 136,
320              columnNumber: 15
321            },
322            this
323          )
324        ) : /* @__PURE__ */ jsxDEV("div", { className: "bg-white rounded-xl p-4 text-center text-gray-500 shadow-sm border border-gray-100", children: "No upcoming sessions available" }, void 0, false, {
325          fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
326          lineNumber: 163,
327          columnNumber: 15
328        }, this) }, void 0, false, {
329          fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
330          lineNumber: 133,
331          columnNumber: 13
332        }, this),
333        /* @__PURE__ */ jsxDEV(Link, { to: "../schedule", className: "block mt-8", children: /* @__PURE__ */ jsxDEV(
334          "button",
335          {
336            className: "w-full bg-gradient-to-r from-[#295567] to-[#295567]/80 hover:from-[#295567]/90 hover:to-[#295567] text-white font-medium py-3 rounded-lg transition shadow-sm flex items-center justify-center",
337            children: [
338              /* @__PURE__ */ jsxDEV(PlusCircle, { size: 18, className: "mr-2" }, void 0, false, {
339                fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
340                lineNumber: 174,
341                columnNumber: 17
342              }, this),
343              "Create New Session"
344            ]
345          },
346          void 0,
347          true,
348          {
349            fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
350            lineNumber: 171,
351            columnNumber: 15
352          },
353          this
354        ) }, void 0, false, {
355          fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
356          lineNumber: 170,
357          columnNumber: 13
358        }, this)
359      ] }, void 0, true, {
360        fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
361        lineNumber: 91,
362        columnNumber: 11
363      }, this)
364    ] }, void 0, true, {
365      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
366      lineNumber: 84,
367      columnNumber: 9
368    }, this) }, void 0, false, {
369      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
370      lineNumber: 83,
371      columnNumber: 7
372    }, this),
373    /* @__PURE__ */ jsxDEV("style", { jsx: true, children: `
374        .custom-scrollbar::-webkit-scrollbar {
375          width: 6px;
376        }
377        
378        .custom-scrollbar::-webkit-scrollbar-track {
379          background: #f1f1f1;
380          border-radius: 10px;
381        }
382        
383        .custom-scrollbar::-webkit-scrollbar-thumb {
384          background: #ccc;
385          border-radius: 10px;
386        }
387        
388        .custom-scrollbar::-webkit-scrollbar-thumb:hover {
389          background: #bbb;
390        }
391        
392        @keyframes fadeIn {
393          from { opacity: 0; transform: translateY(10px); }
394          to { opacity: 1; transform: translateY(0); }
395        }
396        
397        @keyframes pageTransition {
398          0% { opacity: 0; transform: translateY(10px); }
399          100% { opacity: 1; transform: translateY(0); }
400        }
401      ` }, void 0, false, {
402      fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
403      lineNumber: 183,
404      columnNumber: 7
405    }, this)
406  ] }, void 0, true, {
407    fileName: "/doctors-dashboard/src/assets/components/SessionList.jsx",
408    lineNumber: 67,
409    columnNumber: 5
410  }, this);
411};
412_s(SessionList, "F9WEqimzy5eC2CTsmGVBI3CFm7I=", false, function() {
413  return [useUser];
414});
415_c = SessionList;
416export default SessionList;
417var _c;
418$RefreshReg$(_c, "SessionList");
419if (import.meta.hot && !inWebWorker) {
420  window.$RefreshReg$ = prevRefreshReg;
421  window.$RefreshSig$ = prevRefreshSig;
422}
423if (import.meta.hot && !inWebWorker) {
424  RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
425    RefreshRuntime.registerExportsForReactRefresh("/doctors-dashboard/src/assets/components/SessionList.jsx", currentExports);
426    import.meta.hot.accept((nextExports) => {
427      if (!nextExports) return;
428      const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/doctors-dashboard/src/assets/components/SessionList.jsx", currentExports, nextExports);
429      if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
430    });
431  });
432}
433
434//# sourceMappingURL=data:application/json;base64,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0FBQUE7QUFBQTtBQUFBLHFCQWFBO0FBQUE7QUFBQSxZQXRCS0UsUUFBUUg7QUFBQUEsWUFEZjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBd0JBO0FBQUEsUUFDRCxJQUVELHVCQUFDLFNBQUksV0FBVSxzRkFBcUYsOENBQXBHO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFFQSxLQWhDSjtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBa0NBO0FBQUEsUUFHQSx1QkFBQyxRQUFLLElBQUcsZUFBYyxXQUFVLGNBQy9CO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxXQUFVO0FBQUEsWUFFVjtBQUFBLHFDQUFDLGNBQVcsTUFBTSxJQUFJLFdBQVUsVUFBaEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFBc0M7QUFBQSxjQUFHO0FBQUE7QUFBQTtBQUFBLFVBSDNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLEtBTkY7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQU9BO0FBQUEsV0F0RkY7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQXVGQTtBQUFBLFNBOUZGO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0ErRkEsS0FoR0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQWlHQTtBQUFBLElBR0EsdUJBQUMsV0FBTSxLQUFHLE1BQUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFaO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0E0QkU7QUFBQSxPQWhKSjtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBaUpBO0FBRUo7QUFBRTNCLEdBOU1JRixhQUFXO0FBQUEsVUFNRVIsT0FBTztBQUFBO0FBQUE4QyxLQU5wQnRDO0FBZ05OLGVBQWVBO0FBQVksSUFBQXNDO0FBQUFDLGFBQUFELElBQUEiLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsImdldFNlc3Npb25zQnlEb2N0b3IiLCJ1c2VVc2VyIiwiTGluayIsIkNhbGVuZGFyIiwiQ2xvY2siLCJDaGVja0NpcmNsZSIsIlBsdXNDaXJjbGUiLCJBcnJvd1JpZ2h0IiwiQ2hldnJvblJpZ2h0IiwiU2Vzc2lvbkxpc3QiLCJzZXRTZXNzaW9uIiwiX3MiLCJzZXNzaW9uc0RhdGEiLCJzZXRTZXNzaW9uc0RhdGEiLCJsYXRlc3RTZXNzaW9uIiwic2V0TGF0ZXN0U2Vzc2lvbiIsInVwY29taW5nU2Vzc2lvbnMiLCJzZXRVcGNvbWluZ1Nlc3Npb25zIiwiaXNMb2FkaW5nIiwic2V0SXNMb2FkaW5nIiwidXNlciIsImNsZXJrSWQiLCJpZCIsImZldGNoU2Vzc2lvbnMiLCJkYXRhIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwibGVuZ3RoIiwic2xpY2UiLCJmb3JtYXREYXRlIiwiZGF0ZVN0cmluZyIsImRhdGUiLCJEYXRlIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwieWVhciIsIm1vbnRoIiwiZGF5IiwiX2lkIiwidGltZSIsIm1hcCIsInNlc3Npb24iLCJpbmRleCIsImFuaW1hdGlvbk5hbWUiLCJhbmltYXRpb25EdXJhdGlvbiIsImFuaW1hdGlvbkRlbGF5IiwiYW5pbWF0aW9uRmlsbE1vZGUiLCJfYyIsIiRSZWZyZXNoUmVnJCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJTZXNzaW9uTGlzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBnZXRTZXNzaW9uc0J5RG9jdG9yIH0gZnJvbSAnLi4vYXBpL2RvY3RvcnNBUEknO1xyXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSBcIkBjbGVyay9jbGVyay1yZWFjdFwiO1xyXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XHJcbmltcG9ydCB7
434IENhbGVuZGFyLCBDbG9jaywgQ2hlY2tDaXJjbGUsIFBsdXNDaXJjbGUsIEFycm93UmlnaHQsIENoZXZyb25SaWdodCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XHJcblxyXG5jb25zdCBTZXNzaW9uTGlzdCA9ICh7IHNldFNlc3Npb24gfSkgPT4ge1xyXG4gIGNvbnN0IFtzZXNzaW9uc0RhdGEsIHNldFNlc3Npb25zRGF0YV0gPSB1c2VTdGF0ZShbXSk7XHJcbiAgY29uc3QgW2xhdGVzdFNlc3Npb24sIHNldExhdGVzdFNlc3Npb25dID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgY29uc3QgW3VwY29taW5nU2Vzc2lvbnMsIHNldFVwY29taW5nU2Vzc2lvbnNdID0gdXNlU3RhdGUoW10pO1xyXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcclxuICBcclxuICBjb25zdCB7IHVzZXIgfSA9IHVzZVVzZXIoKTtcclxuICBjb25zdCBjbGVya0lkID0gdXNlciA/IHVzZXIuaWQgOiBudWxsO1xyXG4gICBcclxuICBjb25zdCBmZXRjaFNlc3Npb25zID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xyXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0U2Vzc2lvbnNCeURvY3RvcihjbGVya0lkKTtcclxuICAgICAgY29uc29sZS5sb2coXCJTZXNzaW9ucyBkYXRhIGZldGNoZWQ6XCIsIGRhdGEpO1xyXG4gICAgICBzZXRTZXNzaW9uc0RhdGEoZGF0YSk7XHJcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBzZXNzaW9uczonLCBlcnJvcik7XHJcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgZmV0Y2hTZXNzaW9ucygpO1xyXG4gIH0sIFtjbGVya0lkXSk7XHJcbiAgXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmIChzZXNzaW9uc0RhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBTZXQgbGF0ZXN0IHNlc3Npb24gdG8gdGhlIGZpcnN0IG9uZVxyXG4gICAgICBzZXRMYXRlc3RTZXNzaW9uKHNlc3Npb25zRGF0YVswXSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBTZXQgdXBjb21pbmcgc2Vzc2lvbnMgdG8gYWxsIGV4Y2VwdCB0aGUgZmlyc3Qgb25lXHJcbiAgICAgIHNldFVwY29taW5nU2Vzc2lvbnMoc2Vzc2lvbnNEYXRhLnNsaWNlKDEpKTtcclxuICAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiTGF0ZXN0IHNlc3Npb246XCIsIHNlc3Npb25zRGF0YVswXSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiVXBjb21pbmcgc2Vzc2lvbnM6XCIsIHNlc3Npb25zRGF0YS5zbGljZSgxKSk7XHJcbiAgICB9XHJcbiAgfSwgW3Nlc3Npb25zRGF0YV0pO1xyXG5cclxuICAvLyBGb3JtYXQgZGF0ZSBmdW5jdGlvblxyXG4gIGNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZVN0cmluZykgPT4ge1xyXG4gICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gXCJcIjtcclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcclxuICAgIHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IFxyXG4gICAgICB5ZWFyOiAnbnVtZXJpYycsXHJcbiAgICAgIG1vbnRoOiAnc2hvcnQnLCBcclxuICAgICAgZGF5OiAnbnVtZXJpYycgXHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIGgtZnVsbCB3LWZ1bGwgYmctd2hpdGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgaC0xNiB3LTE2IGJvcmRlci10LTQgYm9yZGVyLWItNCBib3JkZXItWyMyOTU1NjddXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBiZy1bI0ZBRkFGOV0gbWluLWgtc2NyZWVuIGZvbnQtWydSYWxld2F5JyxzYW5zLXNlcmlmXSBhbmltYXRlLXBhZ2VUcmFuc2l0aW9uXCI+XHJcbiAgICAgIHsvKiBMZWZ0IHNpZGUgd2l0aCBpbGx1c3RyYXRpb24gKi99XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0yLzUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC04XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICBzcmM9XCIvc3JjL2Fzc2V0cy9pbWFnZXMvaW1nLnBuZ1wiXHJcbiAgICAgICAgICAgIGFsdD1cIkRhdGEgYW5hbHlzdCB3aXRoIGNoYXJ0c1wiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctOTYgaC1hdXRvXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIC1ib3R0b20tNCAtcmlnaHQtNCBiZy1bIzI5NTU2N10gdGV4dC13aGl0ZSBweC02IHB5LTMgcm91bmRlZC14bCBzaGFkb3ctbGdcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPk1hbmFnZSB5b3VyIHNlc3Npb25zIGVmZmljaWVudGx5PC9wPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgey8qIFJpZ2h0IHNpZGUgd2l0aCBzZXNzaW9ucyBpbmZvcm1hdGlvbiAqL31cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMvNSBwLTEwIGJnLXdoaXRlIHJvdW5kZWQtdGwtM3hsIHNoYWRvdy1tZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctMnhsIG14LWF1dG9cIj5cclxuICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ncmF5LTgwMCBtYi04IGZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxDYWxlbmRhciBjbGFzc05hbWU9XCJtci0zIHRleHQtWyMyOTU1NjddXCIgc2l6ZT17MjR9IC8+XHJcbiAgICAgICAgICAgIFlvdXIgU2Vzc2lvbnNcclxuICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgI
434HsvKiBXaGl0ZSBjb250YWluZXIgKi99XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLVsjRkFGQUY5XSByb3VuZGVkLXhsIHNoYWRvdy1zbSBwLTZcIj5cclxuICAgICAgICAgICAgey8qIExhdGVzdCBTZXNzaW9uIFNlY3Rpb24gKi99XHJcbiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtYm9sZCB0ZXh0LWdyYXktNzAwIG1iLTQgZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8Q2hlY2tDaXJjbGUgY2xhc3NOYW1lPVwibXItMiB0ZXh0LVsjMjk1NTY3XVwiIHNpemU9ezIwfSAvPlxyXG4gICAgICAgICAgICAgIExhdGVzdCBTZXNzaW9uXHJcbiAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB7bGF0ZXN0U2Vzc2lvbiA/IChcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQteGwgcC00IG1iLTYgc2hhZG93LXNtIGJvcmRlciBib3JkZXItZ3JheS0xMDAgdHJhbnNmb3JtIHRyYW5zaXRpb24tdHJhbnNmb3JtIGhvdmVyOnNjYWxlLVsxLjAxXVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtZ3JheS03MDAgZm9udC1zZW1pYm9sZFwiPlNlc3Npb24gSUQ6IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtWyMyOTU1NjddXCI+I3tsYXRlc3RTZXNzaW9uLl9pZCA/IGxhdGVzdFNlc3Npb24uX2lkLnNsaWNlKC02KSA6IFwiXCJ9PC9zcGFuPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHRleHQtZ3JheS02MDAgdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPENhbGVuZGFyIHNpemU9ezE0fSBjbGFzc05hbWU9XCJtci0xIHRleHQtWyMyOTU1NjddXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1yLTNcIj57Zm9ybWF0RGF0ZShsYXRlc3RTZXNzaW9uLmRhdGUpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxDbG9jayBzaXplPXsxNH0gY2xhc3NOYW1lPVwibXItMSB0ZXh0LVsjMjk1NTY3XVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57bGF0ZXN0U2Vzc2lvbi50aW1lIHx8IFwiXCJ9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1ncmFkaWVudC10by1yIGZyb20tWyMyOTU1NjddIHRvLVsjMjk1NTY3XS84MCBob3Zlcjpmcm9tLVsjMjk1NTY3XS85MCBob3Zlcjp0by1bIzI5NTU2N10gdGV4dC13aGl0ZSBmb250LW1lZGl1bSBweC01IHB5LTIgcm91bmRlZC1sZyB0cmFuc2l0aW9uIHNoYWRvdy1zbSBmbGV4IGl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2Vzc2lvbiggbGF0ZXN0U2Vzc2lvbi5faWQgKX1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlN0YXJ0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxBcnJvd1JpZ2h0IHNpemU9ezE2fSBjbGFzc05hbWU9XCJtbC0xXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQteGwgcC00IG1iLTYgdGV4dC1jZW50ZXIgdGV4dC1ncmF5LTUwMCBzaGFkb3ctc20gYm9yZGVyIGJvcmRlci1ncmF5LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgTm8gbGF0ZXN0IHNlc3Npb24gYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB7LyogVXBjb21pbmcgU2Vzc2lvbnMgU2VjdGlvbiAqL31cclxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1ib2xkIHRleHQtZ3JheS03MDAgbWItNCBtdC02IGZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPENsb2NrIGNsYXNzTmFtZT1cIm1yLTIgdGV4dC1bIzI5NTU2N11cIiBzaXplPXsyMH0gLz5cclxuICAgICAgICAgICAgICBVcGNvbWluZyBTZXNzaW9uc1xyXG4gICAgICAgICAgICA8L2gyPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTMgbWItNiBtYXgtaC02NCBvdmVyZmxvdy15LWF1dG8gcHItMiBjdXN0b20tc2Nyb2xsYmFyXCI+XHJcbiAgICAgICAgICAgICAge3VwY29taW5nU2Vzc2lvbnMubGVuZ3RoID4gMCA/IChcclxuICAgICAgICAgICAgICAgIHVwY29taW5nU2Vzc2lvbnMubWFwKChzZXNzaW9uLCBpbmRleCkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgIGtleT17c2Vzc2lvbi5faWR9IFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQteGwgcC00IHNoYWRvdy1zbSBib3JkZXIgYm9yZGVyLWdyYXktMTAwIHRyYW5zZm9ybSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBob3ZlcjpzY2FsZS1bMS4wMV1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lOiAnZmFkZUluJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMC41cycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25EZWxheTogYCR7aW5kZXggKiAwLjA1fXNgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xyXG4gICAgICAgICAgICAgICAgICAgI
434H19XHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTcwMCBmb250LXNlbWlib2xkXCI+U2Vzc2lvbiBJRDogPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1bIzI5NTU2N11cIj4je3Nlc3Npb24uX2lkID8gc2Vzc2lvbi5faWQuc2xpY2UoLTYpIDogXCJcIn08L3NwYW4+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWdyYXktNjAwIHRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FsZW5kYXIgc2l6ZT17MTR9IGNsYXNzTmFtZT1cIm1yLTEgdGV4dC1bIzI5NTU2N11cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1yLTNcIj57Zm9ybWF0RGF0ZShzZXNzaW9uLmRhdGUpfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2xvY2sgc2l6ZT17MTR9IGNsYXNzTmFtZT1cIm1yLTEgdGV4dC1bIzI5NTU2N11cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntzZXNzaW9uLnRpbWUgfHwgXCJcIn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Q2hldnJvblJpZ2h0IHNpemU9ezIwfSBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNDAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApKVxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQteGwgcC00IHRleHQtY2VudGVyIHRleHQtZ3JheS01MDAgc2hhZG93LXNtIGJvcmRlciBib3JkZXItZ3JheS0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgTm8gdXBjb21pbmcgc2Vzc2lvbnMgYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHsvKiBDcmVhdGUgTmV3IFNlc3Npb24gQnV0dG9uICovfVxyXG4gICAgICAgICAgICA8TGluayB0bz0nLi4vc2NoZWR1bGUnIGNsYXNzTmFtZT1cImJsb2NrIG10LThcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLWdyYWRpZW50LXRvLXIgZnJvbS1bIzI5NTU2N10gdG8tWyMyOTU1NjddLzgwIGhvdmVyOmZyb20tWyMyOTU1NjddLzkwIGhvdmVyOnRvLVsjMjk1NTY3XSB0ZXh0LXdoaXRlIGZvbnQtbWVkaXVtIHB5LTMgcm91bmRlZC1sZyB0cmFuc2l0aW9uIHNoYWRvdy1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPFBsdXNDaXJjbGUgc2l6ZT17MTh9IGNsYXNzTmFtZT1cIm1yLTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgQ3JlYXRlIE5ldyBTZXNzaW9uXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvTGluaz4gIFxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgey8qIEN1c3RvbSBTY3JvbGxiYXIgYW5kIEFuaW1hdGlvbnMgKi99XHJcbiAgICAgIDxzdHlsZSBqc3g+e2BcclxuICAgICAgICAuY3VzdG9tLXNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xyXG4gICAgICAgICAgd2lkdGg6IDZweDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLmN1c3RvbS1zY3JvbGxiYXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcclxuICAgICAgICAgIGJhY2tncm91bmQ6ICNmMWYxZjE7XHJcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAuY3VzdG9tLXNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogI2NjYztcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC5jdXN0b20tc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAjYmJiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7XHJcbiAgICAgICAgICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOyB9XHJcbiAgICAgICAgICB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBAa2V5ZnJhbWVzIHBhZ2VUcmFuc2l0aW9uIHtcclxuICAgICAgICAgIDAlIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOyB9XHJcbiAgICAgICAgICAxMDAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XHJcbiAgICAgICAgfVxyXG4gICAgICBgfTwvc3R5bGU+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2Vzc2lvbkxpc3Q7Il0sImZpbGUiOiIvZG9jdG9ycy1kYXNoYm9hcmQvc3JjL2Fzc2V0cy9jb21wb25lbnRzL1Nlc3Npb25MaXN0LmpzeCJ9

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.