PageSourceSearch

https://sixsigmafunnels.com/src/app/pages/dashboard/PayoutDetails.tsx

js sixsigmafunnels.com collected 2026-10-02 01:44:38 UTC 87,870 bytes, 811 lines download raw bytes

1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/app/pages/dashboard/PayoutDetails.tsx");if (!window.$RefreshReg$) throw new Error("React refresh preamble was not loaded. Something is wrong.");
2const prevRefreshReg = window.$RefreshReg$;
3const prevRefreshSig = window.$RefreshSig$;
4window.$RefreshReg$ = RefreshRuntime.getRefreshReg("/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx");
5window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
6
7import * as RefreshRuntime from "/@react-refresh";
8
9import __vite__cjsImport1_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=e8ce80ae"; const _jsxDEV = __vite__cjsImport1_react_jsxDevRuntime["jsxDEV"];
10var _s = $RefreshSig$();
11import __vite__cjsImport2_react from "/node_modules/.vite/deps/react.js?v=e8ce80ae"; const React = __vite__cjsImport2_react.__esModule ? __vite__cjsImport2_react.default : __vite__cjsImport2_react; const useEffect = __vite__cjsImport2_react["useEffect"]; const useState = __vite__cjsImport2_react["useState"]; const useMemo = __vite__cjsImport2_react["useMemo"]; const useRef = __vite__cjsImport2_react["useRef"];
12import axios from "/node_modules/.vite/deps/axios.js?v=e8ce80ae";
13import { useAuth } from "/src/app/modules/auth/index.ts";
14import Swal from "/node_modules/.vite/deps/sweetalert2.js?v=e8ce80ae";
15import "/src/app/pages/dashboard/css/payoutDetails.css";
16import { useNavigate } from "/node_modules/.vite/deps/react-router-dom.js?v=e8ce80ae";
17import { CUREENT_COMPANY_NAME, CREATE_STRIPE_CONNECTED_ACCOUNT, GET_ALL_STRIPE_ACCOUNTS, GET_ACCOUNT_ID, GET_STRIPE_ACCOUNT_ID, CHECK_ACCOUNT_STATUS, UPDATE_USER_STRIPE_STATUS, GET_STRIPE_ONBOARDING_LINK, PAUSE_STRIPE_CONNECTED_ACCOUNT, RESUME_STRIPE_CONNECTED_ACCOUNT, CHECK_ACCOUNT_STATUS_FROM_DB } from "/src/app/Constants.tsx";
18import { enableSplashScreen, disableSplashScreen } from "/src/app/pages/common/CommonUtilities.tsx";
19import { Content } from "/src/config/layout/components/Content.tsx";
20const PayoutDetails = ()=>{
21    _s();
22    const { currentUser } = useAuth();
23    const [accountId, setAccountId] = useState(null);
24    const [accountDetails, setAccountDetails] = useState(null);
25    const [previousAccountDetails, setPreviousAccountDetails] = useState([]);
26    const [showConfirmationModal, setShowConfirmationModal] = useState(false);
27    const [selectedAccountId, setSelectedAccountId] = useState(null);
28    const [noActiveAccount, setNoActiveAccount] = useState(false);
29    const domainUrl = window.location.origin;
30    const isRedirectingRef = useRef(false);
31    const navigate = useNavigate();
32    const checkStripeAccountFlow = async ()=>{
33        enableSplashScreen();
34        try {
35            // Step 1: Get the latest Stripe accountId of current user
36            const { data: accountResp } = await axios.get(`${GET_ACCOUNT_ID(CUREENT_COMPANY_NAME)}?userId=${currentUser?.id}`);
37            const newStripeAccountId = accountResp?.data || null;
38            //console.log("newStripeAccountId: " + newStripeAccountId);
39            if (newStripeAccountId) {
40                // Step 2: Check onboarding status
41                const statusResponse = await axios.get(CHECK_ACCOUNT_STATUS(CUREENT_COMPANY_NAME), {
42                    params: {
43                        accountId: newStripeAccountId
44                    }
45                });
46                const { data } = statusResponse.data;
47                //console.log("statusResponse: " + JSON.stringify(statusResponse))
48                const queryParams = new URLSearchParams(window.location.search);
49                const onboarding = queryParams.get("onboard");
50                if (data?.onboardingCompleted && onboarding === "true") {
51                    // Step 3: Get previous active accountId
52                    const previousAccountResponse = await axios.post(`${GET_STRIPE_ACCOUNT_ID(CUREENT_COMPANY_NAME)}?userId=${currentUser?.id}`);
53                    const previousAccountId = previousAccountResponse.data.data;
54                    //console.log("previousAccountId:", previousAccountId);
55                    // Step 4: Pause previous account
56                    if (previousAccountId && previousAccountId !== newStripeAccountId) {
57                        await axios.post(PAUSE_STRIPE_CONNECTED_ACCOUNT(CUREENT_COMPANY_NAME), null, {
58                            params: {
59                                accountId: previousAccountId
60                            }
61                        });
62                    }
63                    // Step 5: Update new account
64                    await axios.post(`${UPDATE_USER_STRIPE_STATUS(CUREENT_COMPANY_NAME)}?newStripeAccountId=${newStripeAccountId}`);
65                    await Swal.fire({
66                        title: 'All Set!',
67                        html: `
68                                <p class="swal-subtext">
69                                Your account is linked.<br />
70                                Payouts will go to your connected bank.
71                                </p>
72                            `,
73                        imageUrl: '/media/misc/Approved.png',
74                        imageWidth: 100,
75                        imageHeight: 100,
76                        confirmButtonText: 'Ok',
77                        customClass: {
78                            title: 'swal-custom-title_AllSet',
79                            // htmlContainer: 'swal-custom-html', // Uncomment if needed
80                            confirmButton: 'custom-ok-button'
81                        },
82                        buttonsStyling: false
83                    });
84                    await fetchAndSetAccountDetails();
85                }
86                // Remove the query param from the URL
87                const newUrl = new URL(window.location.href);
88                newUrl.searchParams.delete('onboard');
89                window.history.replaceState({}, '', newUrl.toString());
90            }
91            // update the account details after the flow
92            await fetchAndSetAccountDetails();
93        } catch (error) {
94            console.error("Error in Stripe account flow:", error);
95        } finally{
96            if (!isRedirectingRef.current) {
97                disableSplashScreen();
98            }
99        }
100    };
101    useEffect(()=>{
102        if (currentUser?.id && currentUser?.email) {
103            checkStripeAccountFlow();
104        }
105    }, [
106        currentUser?.id,
107        currentUser?.email
108    ]);
109    useEffect(()=>{
110        fetch("https://ipapi.co/json/").then((res)=>res.json()).then((data)=>{
111            setUserCountry(data.country); // e.g. "US" or "CA"
112        });
113    }, []);
114    const [userCountry, setUserCountry] = useState("US"); // default fallback
115    const handleProceed = async ()=>{
116        setShowConfirmationModal(false);
117        try {
118            await createConnectedAccount();
119        } catch (err) {
120            console.error("Failed during proceed:", err);
121        }
122    };
123    const createConnectedAccount = async ()=>{
124        enableSplashScreen();
125        try {
126            // Get latest Stripe account ID for current user
127            const accountResp = await axios.get(`${GET_ACCOUNT_ID(CUREENT_COMPANY_NAME)}?userId=${currentUser?.id}`);
128            const newStripeAccountId = accountResp?.data?.data;
129            if (newStripeAccountId) {
130                // Check account status in DB
131                const dbRes = await axios.get(CHECK_ACCOUNT_STATUS_FROM_DB(CUREENT_COMPANY_NAME), {
132                    params: {
133                        accountId: newStripeAccountId
134                    }
135                });
136                const dbData = dbRes.data?.data || {};
137                const isActive = dbData.isActive;
138                if (!isActive) {
139                    // Resume onboarding
140                    const onboardingLinkResponse = await axios.get(GET_STRIPE_ONBOARDING_LINK(CUREENT_COMPANY_NAME), {
141                        params: {
142                            accountId: newStripeAccountId,
143                            domainURL: domainUrl
144                        }
145                    });
146                    const { onboardingUrl } = onboardingLinkResponse.data.data;
147                    isRedirectingRef.current = true;
148                    window.location.href = onboardingUrl;
149                    return;
150                }
151            }
152            // Create a new account if none exists or it's already active
153            const createResponse = await axios.post(`${CREATE_STRIPE_CONNECTED_ACCOUNT(CUREENT_COMPANY_NAME)}?userEmail=${currentUser?.email}&domainURL=${domainUrl}&companyName=${CUREENT_COMPANY_NAME}&country=${userCountry}`);
154            const { onboardingUrl } = createResponse.data.data;
155            isRedirectingRef.current = true;
156            window.location.href = onboardingUrl;
157        } catch (err) {
158            await Swal.fire({
159                title: 'Error',
160                text: err.response?.data?.message || err.message,
161                icon: 'error'
162            });
163        } finally{
164            if (!isRedirectingRef.current) {
165                disableSplashScreen();
166            }
167        }
168    };
169    const fetchAndSetAccountDetails = async ()=>{
170        try {
171            const response = await axios.get(`${GET_ALL_STRIPE_ACCOUNTS(CUREENT_COMPANY_NAME)}?userId=${currentUser?.id}`);
172            const accountIds = response.data.data.accountIds || [];
173            const accountDetailsList = await Promise.all(accountIds.map(async (id)=>{
174                const [statusRes, dbRes] = await Promise.all([
175                    axios.get(CHECK_ACCOUNT_STATUS(CUREENT_COMPANY_NAME), {
176                        params: {
177                            accountId: id
178                        }
179                    }),
180                    axios.get(CHECK_ACCOUNT_STATUS_FROM_DB(CUREENT_COMPANY_NAME), {
181                        params: {
182                            accountId: id
183                        }
184                    })
185                ]);
186                const stripeData = statusRes.data?.data || {};
187                const dbData = dbRes.data?.data || {};
188                const onboardingDone = stripeData.onboardingCompleted === true;
189                const isActive = onboardingDone && (dbData.isActive ?? false);
190                return {
191                    accountId: id,
192                    ...stripeData,
193                    isActive
194                };
195            }));
196            const active = accountDetailsList.filter((a)=>a.isActive);
197            const inactive = accountDetailsList.filter((a)=>!a.isActive);
198            if (active.length === 0) {
199                navigate(`/${CUREENT_COMPANY_NAME}/share`);
200                return;
201            }
202            setAccountDetails(active.length > 0 ? active[0] : null);
203            setPreviousAccountDetails([
204                ...active.slice(1),
205                ...inactive
206            ]);
207            setAccountId(active.length > 0 ? active[0].accountId : null);
208            if (!selectedAccountId && active.length > 0) {
209                setSelectedAccountId(active[0].accountId);
210            }
211        } catch (error) {
212            console.error("Failed to fetch and set account details:", error);
213        }
214    };
215    const resumeConnectedAccount = async ()=>{
216        enableSplashScreen();
217        try {
218            // 1. Get the currently active account ID from backend
219            const previousAccountResponse = await axios.post(`${GET_STRIPE_ACCOUNT_ID(CUREENT_COMPANY_NAME)}?userId=${currentUser?.id}`);
220            const previousAccountId = previousAccountResponse.data.data;
221            // 2. Pause the active account if it’s different from the selected one
222            if (previousAccountId && previousAccountId !== selectedAccountId) {
223                await axios.post(PAUSE_STRIPE_CONNECTED_ACCOUNT(CUREENT_COMPANY_NAME), null, {
224                    params: {
225                        accountId: previousAccountId
226                    }
227                });
228            }
229            // 3. Resume the selected account
230            await axios.post(RESUME_STRIPE_CONNECTED_ACCOUNT(CUREENT_COMPANY_NAME), null, {
231                params: {
232                    accountId: selectedAccountId
233                }
234            });
235            await Swal.fire({
236                title: 'Account Resumed Successfully',
237                imageUrl: '/media/misc/Approved.png',
238                imageWidth: 100,
239                imageHeight: 100,
240                confirmButtonText: 'Ok',
241                customClass: {
242                    title: 'swal-custom-title',
243                    confirmButton: 'custom-ok-button'
244                },
245                buttonsStyling: false
246            });
247            // Refresh data
248            await fetchAndSetAccountDetails();
249        } catch (error) {
250            await Swal.fire({
251                title: 'Resume Failed',
252                text: error.response?.data?.data?.message || error.message,
253                icon: 'error'
254            });
255        } finally{
256            disableSplashScreen();
257        }
258    };
259    const isValidAccount = (details)=>{
260        if (!details) return false;
261        return details?.onboardingCompleted === true; // Only valid if onboarding finished
262    };
263    const AccountHeader = ()=>/*#__PURE__*/ _jsxDEV("div", {
264            className: "icon_container d-flex flex-row",
265            children: [
266                /*#__PURE__*/ _jsxDEV("img", {
267                    src: "/media/misc/dashboard-account-img.png",
268                    alt: "Profile Icon",
269                    className: "profile-icon"
270                }, void 0, false, {
271                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
272                    lineNumber: 315,
273                    columnNumber: 13
274                }, this),
275                /*#__PURE__*/ _jsxDEV("h1", {
276                    className: "account-link",
277                    children: "Account"
278                }, void 0, false, {
279                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
280                    lineNumber: 320,
281                    columnNumber: 13
282                }, this)
283            ]
284        }, void 0, true, {
285            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
286            lineNumber: 314,
287            columnNumber: 9
288        }, this);
289    const AccountDetailsBox = ({ details, status })=>{
290        const isActive = status === 'Active';
291        const isSelected = selectedAccountId === details.accountId;
292        return /*#__PURE__*/ _jsxDEV("div", {
293            className: "details-box relative flex flex-col",
294            children: [
295                /*#__PURE__*/ _jsxDEV("div", {
296                    className: "checkbox-row flex items-center mb-2.5",
297                    children: /*#__PURE__*/ _jsxDEV("input", {
298                        type: "checkbox",
299                        id: `account-${details.accountId}`,
300                        checked: isSelected,
301                        onChange: ()=>{
302                            setSelectedAccountId((prev)=>prev === details.accountId ? null : details.accountId);
303                        },
304                        className: "account-checkbox mr-3"
305                    }, void 0, false, {
306                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
307                        lineNumber: 337,
308                        columnNumber: 21
309                    }, this)
310                }, void 0, false, {
311                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
312                    lineNumber: 336,
313                    columnNumber: 17
314                }, this),
315                /*#__PURE__*/ _jsxDEV("div", {
316                    className: "detail-col",
317                    children: [
318                        /*#__PURE__*/ _jsxDEV("div", {
319                            children: /*#__PURE__*/ _jsxDEV("strong", {
320                                children: "First Name"
321                            }, void 0, false, {
322                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
323                                lineNumber: 353,
324                                columnNumber: 8
325                            }, this)
326                        }, void 0, false, {
327                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
328                            lineNumber: 353,
329                            columnNumber: 3
330                        }, this),
331                        /*#__PURE__*/ _jsxDEV("div", {
332                            title: details?.first_name || "N/A",
333                            children: details?.first_name || "N/A"
334                        }, void 0, false, {
335                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
336                            lineNumber: 354,
337                            columnNumber: 3
338                        }, this)
339                    ]
340                }, void 0, true, {
341                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
342                    lineNumber: 352,
343                    columnNumber: 17
344                }, this),
345                /*#__PURE__*/ _jsxDEV("div", {
346                    className: "detail-col",
347                    children: [
348                        /*#__PURE__*/ _jsxDEV("div", {
349                            children: /*#__PURE__*/ _jsxDEV("strong", {
350                                children: "Last Name"
351                            }, void 0, false, {
352                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
353                                lineNumber: 360,
354                                columnNumber: 26
355                            }, this)
356                        }, void 0, false, {
357                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
358                            lineNumber: 360,
359                            columnNumber: 21
360                        }, this),
361                        /*#__PURE__*/ _jsxDEV("div", {
362                            title: details?.last_name || "N/A",
363                            children: details?.last_name || "N/A"
364                        }, void 0, false, {
365                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
366                            lineNumber: 360,
367                            columnNumber: 58
368                        }, this)
369                    ]
370                }, void 0, true, {
371                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
372                    lineNumber: 359,
373                    columnNumber: 17
374                }, this),
375                /*#__PURE__*/ _jsxDEV("div", {
376                    className: "detail-col",
377                    children: [
378                        /*#__PURE__*/ _jsxDEV("div", {
379                            children: /*#__PURE__*/ _jsxDEV("strong", {
380                                children: "Email"
381                            }, void 0, false, {
382                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
383                                lineNumber: 363,
384                                columnNumber: 26
385                            }, this)
386                        }, void 0, false, {
387                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
388                            lineNumber: 363,
389                            columnNumber: 21
390                        }, this),
391                        /*#__PURE__*/ _jsxDEV("div", {
392                            title: details?.email || "N/A",
393                            children: details?.email || "N/A"
394                        }, void 0, false, {
395                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
396                            lineNumber: 363,
397                            columnNumber: 54
398                        }, this)
399                    ]
400                }, void 0, true, {
401                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
402                    lineNumber: 362,
403                    columnNumber: 17
404                }, this),
405                /*#__PURE__*/ _jsxDEV("div", {
406                    className: "detail-col",
407                    children: [
408                        /*#__PURE__*/ _jsxDEV("div", {
409                            children: /*#__PURE__*/ _jsxDEV("strong", {
410                                children: "Bank Name"
411                            }, void 0, false, {
412                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
413                                lineNumber: 366,
414                                columnNumber: 26
415                            }, this)
416                        }, void 0, false, {
417                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
418                            lineNumber: 366,
419                            columnNumber: 21
420                        }, this),
421                        /*#__PURE__*/ _jsxDEV("div", {
422                            title: details?.bank_name || "N/A",
423                            children: details?.bank_name || "N/A"
424                        }, void 0, false, {
425                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
426                            lineNumber: 366,
427                            columnNumber: 58
428                        }, this)
429                    ]
430                }, void 0, true, {
431                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
432                    lineNumber: 365,
433                    columnNumber: 17
434                }, this),
435                /*#__PURE__*/ _jsxDEV("div", {
436                    className: "detail-col",
437                    children: [
438                        /*#__PURE__*/ _jsxDEV("div", {
439                            children: /*#__PURE__*/ _jsxDEV("strong", {
440                                children: "Country"
441                            }, void 0, false, {
442                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
443                                lineNumber: 369,
444                                columnNumber: 26
445                            }, this)
446                        }, void 0, false, {
447                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
448                            lineNumber: 369,
449                            columnNumber: 21
450                        }, this),
451                        /*#__PURE__*/ _jsxDEV("div", {
452                            title: details?.country || "N/A",
453                            children: details?.country || "N/A"
454                        }, void 0, false, {
455                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
456                            lineNumber: 369,
457                            columnNumber: 56
458                        }, this)
459                    ]
460                }, void 0, true, {
461                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
462                    lineNumber: 368,
463                    columnNumber: 17
464                }, this),
465                /*#__PURE__*/ _jsxDEV("div", {
466                    className: "detail-col",
467                    children: [
468                        /*#__PURE__*/ _jsxDEV("div", {
469                            children: /*#__PURE__*/ _jsxDEV("strong", {
470                                children: "Bank Account"
471                            }, void 0, false, {
472                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
473                                lineNumber: 372,
474                                columnNumber: 26
475                            }, this)
476                        }, void 0, false, {
477                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
478                            lineNumber: 372,
479                            columnNumber: 21
480                        }, this),
481                        /*#__PURE__*/ _jsxDEV("div", {
482                            title: details?.last4 || "N/A",
483                            children: details?.last4 || "N/A"
484                        }, void 0, false, {
485                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
486                            lineNumber: 372,
487                            columnNumber: 61
488                        }, this)
489                    ]
490                }, void 0, true, {
491                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
492                    lineNumber: 371,
493                    columnNumber: 17
494                }, this),
495                /*#__PURE__*/ _jsxDEV("div", {
496                    className: `status-badge absolute top-2.5 right-2.5 ${isActive ? 'active' : 'inactive'}`,
497                    children: status
498                }, void 0, false, {
499                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
500                    lineNumber: 376,
501                    columnNumber: 17
502                }, this)
503            ]
504        }, void 0, true, {
505            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
506            lineNumber: 332,
507            columnNumber: 13
508        }, this);
509    };
510    const allAccounts = useMemo(()=>{
511        const combined = accountDetails ? [
512            accountDetails,
513            ...previousAccountDetails
514        ] : [
515            ...previousAccountDetails
516        ];
517        return combined.filter(isValidAccount).sort((a, b)=>(b.isActive ? 1 : 0) - (a.isActive ? 1 : 0));
518    }, [
519        accountDetails,
520        previousAccountDetails
521    ]);
522    const selectedDetails = useMemo(()=>{
523        return allAccounts.find((acc)=>acc.accountId === selectedAccountId);
524    }, [
525        allAccounts,
526        selectedAccountId
527    ]);
528    const selectedIsPaused = useMemo(()=>{
529        return selectedDetails && !selectedDetails.isActive;
530    }, [
531        selectedDetails
532    ]);
533    return /*#__PURE__*/ _jsxDEV(Content, {
534        children: /*#__PURE__*/ _jsxDEV("div", {
535            className: "payout-modal",
536            children: [
537                /*#__PURE__*/ _jsxDEV("div", {
538                    className: "cus_v_payout_deatils",
539                    children: [
540                        /*#__PURE__*/ _jsxDEV("h2", {
541                            className: "cus_v_b_d",
542                            children: "View Bank Details"
543                        }, void 0, false, {
544                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
545                            lineNumber: 405,
546                            columnNumber: 21
547                        }, this),
548                        /*#__PURE__*/ _jsxDEV("div", {
549                            className: "account_info",
550                            children: "Add or switch Bank accounts here. To switch, just check the account you want and click Resume."
551                        }, void 0, false, {
552                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
553                            lineNumber: 406,
554                            columnNumber: 21
555                        }, this)
556                    ]
557                }, void 0, true, {
558                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
559                    lineNumber: 404,
560                    columnNumber: 17
561                }, this),
562                /*#__PURE__*/ _jsxDEV("div", {
563                    style: {
564                        maxHeight: '460px',
565                        overflowY: 'auto',
566                        paddingRight: '8px'
567                    },
568                    className: "account-grid",
569                    children: allAccounts.map((acc, idx)=>/*#__PURE__*/ _jsxDEV(AccountDetailsBox, {
570                            details: acc,
571                            status: acc?.isActive ? "Active" : "Inactive"
572                        }, idx, false, {
573                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
574                            lineNumber: 411,
575                            columnNumber: 25
576                        }, this))
577                }, void 0, false, {
578                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
579                    lineNumber: 409,
580                    columnNumber: 17
581                }, this),
582                allAccounts.length > 0 && /*#__PURE__*/ _jsxDEV("div", {
583                    className: "button-row",
584                    children: [
585                        /*#__PURE__*/ _jsxDEV("button", {
586                            className: "deactivate-btn resume_btn_pm",
587                            onClick: resumeConnectedAccount,
588                            disabled: !selectedIsPaused || !selectedAccountId,
589                            style: {
590                                backgroundColor: !selectedIsPaused || !selectedAccountId ? '#ccc' : ''
591                            },
592                            children: "Resume"
593                        }, void 0, false, {
594                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
595                            lineNumber: 421,
596                            columnNumber: 25
597                        }, this),
598                        /*#__PURE__*/ _jsxDEV("button", {
599                            className: "deactivate-btn",
600                            onClick: ()=>setShowConfirmationModal(true),
601                            children: "Add Account"
602                        }, void 0, false, {
603                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
604                            lineNumber: 430,
605                            columnNumber: 25
606                        }, this)
607                    ]
608                }, void 0, true, {
609                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
610                    lineNumber: 420,
611                    columnNumber: 21
612                }, this),
613                showConfirmationModal && /*#__PURE__*/ _jsxDEV("div", {
614                    className: "modal-overlay",
615                    children: /*#__PURE__*/ _jsxDEV("div", {
616                        className: "confirmation-modal",
617                        children: [
618                            /*#__PURE__*/ _jsxDEV("h2", {
619                                className: "cus_bank_acc",
620                                children: "Change Your Bank Account"
621                            }, void 0, false, {
622                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
623                                lineNumber: 444,
624                                columnNumber: 29
625                            }, this),
626                            /*#__PURE__*/ _jsxDEV("span", {
627                                className: "s-1",
628                                children: "This bank account will stop receiving payouts"
629                            }, void 0, false, {
630                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
631                                lineNumber: 445,
632                                columnNumber: 29
633                            }, this),
634                            /*#__PURE__*/ _jsxDEV("br", {}, void 0, false, {
635                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
636                                lineNumber: 445,
637                                columnNumber: 103
638                            }, this),
639                            /*#__PURE__*/ _jsxDEV("span", {
640                                className: "s-2",
641                                children: " and we'll connect a new one via Stripe."
642                            }, void 0, false, {
643                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
644                                lineNumber: 446,
645                                columnNumber: 29
646                            }, this),
647                            /*#__PURE__*/ _jsxDEV("br", {}, void 0, false, {
648                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
649                                lineNumber: 446,
650                                columnNumber: 98
651                            }, this),
652                            /*#__PURE__*/ _jsxDEV("span", {
653                                className: "s-3",
654                                children: " You can switch back later if needed."
655                            }, void 0, false, {
656                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
657                                lineNumber: 447,
658                                columnNumber: 29
659                            }, this),
660                            /*#__PURE__*/ _jsxDEV("div", {
661                                className: "modal-buttons",
662                                children: [
663                                    /*#__PURE__*/ _jsxDEV("button", {
664                                        className: "cancel-btn-stripe",
665                                        onClick: ()=>setShowConfirmationModal(false),
666                                        children: "Cancel"
667                                    }, void 0, false, {
668                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
669                                        lineNumber: 450,
670                                        columnNumber: 33
671                                    }, this),
672                                    /*#__PURE__*/ _jsxDEV("button", {
673                                        className: "confirm-btn",
674                                        onClick: handleProceed,
675                                        children: "Add Account"
676                                    }, void 0, false, {
677                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
678                                        lineNumber: 451,
679                                        columnNumber: 33
680                                    }, this)
681                                ]
682                            }, void 0, true, {
683                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
684                                lineNumber: 449,
685                                columnNumber: 29
686                            }, this)
687                        ]
688                    }, void 0, true, {
689                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
690                        lineNumber: 443,
691                        columnNumber: 25
692                    }, this)
693                }, void 0, false, {
694                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
695                    lineNumber: 442,
696                    columnNumber: 21
697                }, this),
698                !isRedirectingRef.current && noActiveAccount && /*#__PURE__*/ _jsxDEV("div", {
699                    className: "upload_overlay",
700                    children: /*#__PURE__*/ _jsxDEV("div", {
701                        className: "modal_pricing",
702                        children: /*#__PURE__*/ _jsxDEV("div", {
703                            className: "cus_manage_subscription_modal",
704                            children: [
705                                /*#__PURE__*/ _jsxDEV(AccountHeader, {}, void 0, false, {
706                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
707                                    lineNumber: 461,
708                                    columnNumber: 33
709                                }, this),
710                                /*#__PURE__*/ _jsxDEV("div", {
711                                    className: "cus_modal_header",
712                                    children: [
713                                        /*#__PURE__*/ _jsxDEV("p", {
714                                            className: "cus_free_trial_text",
715                                            children: "No active payout account found. Please add a new payout account to receive transactions."
716                                        }, void 0, false, {
717                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
718                                            lineNumber: 463,
719                                            columnNumber: 37
720                                        }, this),
721                                        /*#__PURE__*/ _jsxDEV("div", {
722                                            className: "button-group-center btn_c_p_add",
723                                            children: [
724                                                /*#__PURE__*/ _jsxDEV("button", {
725                                                    className: "manage-btn cus_mng_btn",
726                                                    onClick: ()=>{
727                                                        window.location.href = `${window.location.origin}/${CUREENT_COMPANY_NAME}/share`;
728                                                    },
729                                                    children: "Cancel"
730                                                }, void 0, false, {
731                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
732                                                    lineNumber: 467,
733                                                    columnNumber: 41
734                                                }, this),
735                                                /*#__PURE__*/ _jsxDEV("button", {
736                                                    className: "manage-btn cus_mng_btn",
737                                                    onClick: ()=>{
738                                                        setNoActiveAccount(false);
739                                                        createConnectedAccount();
740                                                    },
741                                                    children: "Proceed to Add"
742                                                }, void 0, false, {
743                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
744                                                    lineNumber: 475,
745                                                    columnNumber: 41
746                                                }, this)
747                                            ]
748                                        }, void 0, true, {
749                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
750                                            lineNumber: 466,
751                                            columnNumber: 37
752                                        }, this)
753                                    ]
754                                }, void 0, true, {
755                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
756                                    lineNumber: 462,
757                                    columnNumber: 33
758                                }, this)
759                            ]
760                        }, void 0, true, {
761                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
762                            lineNumber: 460,
763                            columnNumber: 29
764                        }, this)
765                    }, void 0, false, {
766                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
767                        lineNumber: 459,
768                        columnNumber: 25
769                    }, this)
770                }, void 0, false, {
771                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
772                    lineNumber: 458,
773                    columnNumber: 21
774                }, this)
775            ]
776        }, void 0, true, {
777            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
778            lineNumber: 403,
779            columnNumber: 13
780        }, this)
781    }, void 0, false, {
782        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx",
783        lineNumber: 402,
784        columnNumber: 9
785    }, this);
786};
787_s(PayoutDetails, "QTmKSdq/7sZZoHofRZL4+7QhlJ8=", false, function() {
788    return [
789        useAuth,
790        useNavigate
791    ];
792});
793_c = PayoutDetails;
794export default PayoutDetails;
795var _c;
796$RefreshReg$(_c, "PayoutDetails");
797
798
799window.$RefreshReg$ = prevRefreshReg;
800window.$RefreshSig$ = prevRefreshSig;
801
802RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
803  RefreshRuntime.registerExportsForReactRefresh("/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx", currentExports);
804  import.meta.hot.accept((nextExports) => {
805    if (!nextExports) return;
806    const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PayoutDetails.tsx", currentExports, nextExports);
807    if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
808  });
809});
810
811//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlBheW91dERldGFpbHMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSBcIi4uLy4uL21vZHVsZXMvYXV0aFwiO1xuaW1wb3J0IFN3YWwgZnJvbSBcInN3ZWV0YWxlcnQyXCI7XG5pbXBvcnQgXCIuL2Nzcy9wYXlvdXREZXRhaWxzLmNzc1wiO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGUgfSBmcm9tIFwicmVhY3Qtcm91dGVyLWRvbVwiO1xuaW1wb3J0IHtcbiAgICBDVVJFRU5UX0NPTVBBTllfTkFNRSxcbiAgICBDUkVBVEVfU1RSSVBFX0NPTk5FQ1RFRF9BQ0NPVU5ULFxuICAgIEdFVF9BTExfU1RSSVBFX0FDQ09VTlRTLFxuICAgIEdFVF9BQ0NPVU5UX0lELFxuICAgIEdFVF9TVFJJUEVfQUNDT1VOVF9JRCxcbiAgICBDSEVDS19BQ0NPVU5UX1NUQVRVUyxcbiAgICBVUERBVEVfVVNFUl9TVFJJUEVfU1RBVFVTLFxuICAgIEdFVF9TVFJJUEVfT05CT0FSRElOR19MSU5LLFxuICAgIFBBVVNFX1NUUklQRV9DT05ORUNURURfQUNDT1VOVCxcbiAgICBSRVNVTUVfU1RSSVBFX0NPTk5FQ1RFRF9BQ0NPVU5ULFxuICAgIENIRUNLX0FDQ09VTlRfU1RBVFVTX0ZST01fREJcbn0gZnJvbSBcIi4uLy4uLy4uL2FwcC9Db25zdGFudHNcIjtcbmltcG9ydCB7IGVuYWJsZVNwbGFzaFNjcmVlbiwgZGlzYWJsZVNwbGFzaFNjcmVlbiB9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uVXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBDb250ZW50IH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9sYXlvdXQvY29tcG9uZW50cy9Db250ZW50XCI7XG5cbmNvbnN0IFBheW91dERldGFpbHM6IFJlYWN0LkZDID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZUF1dGgoKTtcbiAgICBjb25zdCBbYWNjb3VudElkLCBzZXRBY2NvdW50SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgW2FjY291bnREZXRhaWxzLCBzZXRBY2NvdW50RGV0YWlsc10gPSB1c2VTdGF0ZTxhbnk+KG51bGwpO1xuICAgIGNvbnN0IFtwcmV2aW91c0FjY291bnREZXRhaWxzLCBzZXRQcmV2aW91c0FjY291bnREZXRhaWxzXSA9IHVzZVN0YXRlPGFueVtdPihbXSk7XG4gICAgY29uc3QgW3Nob3dDb25maXJtYXRpb25Nb2RhbCwgc2V0U2hvd0NvbmZpcm1hdGlvbk1vZGFsXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRBY2NvdW50SWQsIHNldFNlbGVjdGVkQWNjb3VudElkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIGNvbnN0IFtub0FjdGl2ZUFjY291bnQsIHNldE5vQWN0aXZlQWNjb3VudF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgZG9tYWluVXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICBjb25zdCBpc1JlZGlyZWN0aW5nUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG5cbiAgICBjb25zdCBjaGVja1N0cmlwZUFjY291bnRGbG93ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBlbmFibGVTcGxhc2hTY3JlZW4oKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gU3RlcCAxOiBHZXQgdGhlIGxhdGVzdCBTdHJpcGUgYWNjb3VudElkIG9mIGN1cnJlbnQgdXNlclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBhY2NvdW50UmVzcCB9ID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgICAgIGAke0dFVF9BQ0NPVU5UX0lEKENVUkVFTlRfQ09NUEFOWV9OQU1FKX0/dXNlcklkPSR7Y3VycmVudFVzZXI/LmlkfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBuZXdTdHJpcGVBY2NvdW50SWQgPSBhY2NvdW50UmVzcD8uZGF0YSB8fCBudWxsO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm5ld1N0cmlwZUFjY291bnRJZDogXCIgKyBuZXdTdHJpcGVBY2NvdW50SWQpO1xuXG4gICAgICAgICAgICBpZiAobmV3U3RyaXBlQWNjb3VudElkKSB7XG4gICAgICAgICAgICAgICAgLy8gU3RlcCAyOiBDaGVjayBvbmJvYXJkaW5nIHN0YXR1c1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c1Jlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KENIRUNLX0FDQ09VTlRfU1RBVFVTKENVUkVFTlRfQ09NUEFOWV9OQU1FKSwge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgYWNjb3VudElkOiBuZXdTdHJpcGVBY2NvdW50SWQgfSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gc3RhdHVzUmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwic3RhdHVzUmVzcG9uc2U6IFwiICsgSlNPTi5zdHJpbmdpZnkoc3RhdHVzUmVzcG9uc2UpKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uYm9hcmRpbmcgPSBxdWVyeVBhcmFtcy5nZXQoXCJvbmJvYXJkXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGE/Lm9uYm9hcmRpbmdDb21wbGV0ZWQgJiYgb25ib2FyZGluZyA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3RlcCAzOiBHZXQgcHJldmlvdXMgYWN0aXZlIGFjY291bnRJZFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0FjY291bnRSZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtHRVRfU1RSSVBFX0FDQ09VTlRfSUQoQ1VSRUVOVF9DT01QQU5ZX05BTUUpfT91c2VySWQ9JHtjdXJyZW50VXNlcj8uaWR9YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0FjY291bnRJZCA9IHByZXZpb3VzQWNjb3VudFJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInByZX
811Zpb3VzQWNjb3VudElkOlwiLCBwcmV2aW91c0FjY291bnRJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU3RlcCA0OiBQYXVzZSBwcmV2aW91cyBhY2NvdW50XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0FjY291bnRJZCAmJiBwcmV2aW91c0FjY291bnRJZCAhPT0gbmV3U3RyaXBlQWNjb3VudElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBheGlvcy5wb3N0KFBBVVNFX1NUUklQRV9DT05ORUNURURfQUNDT1VOVChDVVJFRU5UX0NPTVBBTllfTkFNRSksIG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgYWNjb3VudElkOiBwcmV2aW91c0FjY291bnRJZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFN0ZXAgNTogVXBkYXRlIG5ldyBhY2NvdW50XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGF4aW9zLnBvc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtVUERBVEVfVVNFUl9TVFJJUEVfU1RBVFVTKENVUkVFTlRfQ09NUEFOWV9OQU1FKX0/bmV3U3RyaXBlQWNjb3VudElkPSR7bmV3U3RyaXBlQWNjb3VudElkfWBcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdBbGwgU2V0IScsXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sOiBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwic3dhbC1zdWJ0ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgYWNjb3VudCBpcyBsaW5rZWQuPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBheW91dHMgd2lsbCBnbyB0byB5b3VyIGNvbm5lY3RlZCBiYW5rLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlVXJsOiAnL21lZGlhL21pc2MvQXBwcm92ZWQucG5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlV2lkdGg6IDEwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlSGVpZ2h0OiAxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ09rJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdzd2FsLWN1c3RvbS10aXRsZV9BbGxTZXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0bWxDb250YWluZXI6ICdzd2FsLWN1c3RvbS1odG1sJywgLy8gVW5jb21tZW50IGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246ICdjdXN0b20tb2stYnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnNTdHlsaW5nOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmZXRjaEFuZFNldEFjY291bnREZXRhaWxzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBxdWVyeSBwYXJhbSBmcm9tIHRoZSBVUkxcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdVcmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgICAgICAgICBuZXdVcmwuc2VhcmNoUGFyYW1zLmRlbGV0ZSgnb25ib2FyZCcpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgJycsIG5ld1VybC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBhY2NvdW50IGRldGFpbHMgYWZ0ZXIgdGhlIGZsb3dcbiAgICAgICAgICAgIGF3YWl0IGZldGNoQW5kU2V0QWNjb3VudERldGFpbHMoKTtcblxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluIFN0cmlwZSBhY2NvdW50IGZsb3c6XCIsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmICghaXNSZWRpcmVjdGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZVNwbGFzaFNjcmVlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50VXNlcj8uaWQgJiYgY3VycmVudFVzZXI/LmVtYWlsKSB7XG4gICAgICAgICAgICBjaGVja1N0cmlwZUFjY291bnRGbG93KCk7XG4gICAgICAgIH1cbiAgICB9LCBbY3VycmVudFVzZXI/LmlkLCBjdXJyZW50VXNlcj8uZW1haWxdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGZldGNoKFwiaHR0cHM6Ly9pcGFwaS5jby9qc29uL1wiKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHJlcy5qc29uKCkpXG4gICAgICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBzZXRVc2VyQ291bnRyeShkYXRhLmNvdW50cnkpOyAgLy8gZS5nLiBcIlVTXCIgb3IgXCJDQVwiXG4gICAgICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBbdXNlckNvdW50cnksIHNldFVzZXJDb3VudHJ5XSA9IHVzZVN0YXRlKFwiVVNcIik7IC8vIGRlZmF1bHQgZmFsbGJhY2tcblxuICAgIGNvbnN0IGhhbmRsZVByb2NlZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHNldFNob3dDb25maXJtYXRpb25Nb2RhbChmYWxzZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGNyZWF0ZUNvbm5lY3RlZEFjY291bnQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIGR1cmluZyBwcm9jZWVkOlwiLCBlcnIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUNvbm5lY3RlZEFjY291bnQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGVuYWJsZVNwbGFzaFNjcmVlbigpO1xuXG4gICAgICAgI
811HRyeSB7XG4gICAgICAgICAgICAvLyBHZXQgbGF0ZXN0IFN0cmlwZSBhY2NvdW50IElEIGZvciBjdXJyZW50IHVzZXJcbiAgICAgICAgICAgIGNvbnN0IGFjY291bnRSZXNwID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgICAgIGAke0dFVF9BQ0NPVU5UX0lEKENVUkVFTlRfQ09NUEFOWV9OQU1FKX0/dXNlcklkPSR7Y3VycmVudFVzZXI/LmlkfWBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1N0cmlwZUFjY291bnRJZCA9IGFjY291bnRSZXNwPy5kYXRhPy5kYXRhO1xuXG4gICAgICAgICAgICBpZiAobmV3U3RyaXBlQWNjb3VudElkKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgYWNjb3VudCBzdGF0dXMgaW4gREJcbiAgICAgICAgICAgICAgICBjb25zdCBkYlJlcyA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfQUNDT1VOVF9TVEFUVVNfRlJPTV9EQihDVVJFRU5UX0NPTVBBTllfTkFNRSksXG4gICAgICAgICAgICAgICAgICAgIHsgcGFyYW1zOiB7IGFjY291bnRJZDogbmV3U3RyaXBlQWNjb3VudElkIH0gfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkYkRhdGEgPSBkYlJlcy5kYXRhPy5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gZGJEYXRhLmlzQWN0aXZlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXN1bWUgb25ib2FyZGluZ1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbmJvYXJkaW5nTGlua1Jlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgR0VUX1NUUklQRV9PTkJPQVJESU5HX0xJTksoQ1VSRUVOVF9DT01QQU5ZX05BTUUpLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50SWQ6IG5ld1N0cmlwZUFjY291bnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluVVJMOiBkb21haW5VcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG9uYm9hcmRpbmdVcmwgfSA9IG9uYm9hcmRpbmdMaW5rUmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICBpc1JlZGlyZWN0aW5nUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IG9uYm9hcmRpbmdVcmw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhY2NvdW50IGlmIG5vbmUgZXhpc3RzIG9yIGl0J3MgYWxyZWFkeSBhY3RpdmVcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChcbiAgICAgICAgICAgICAgICBgJHtDUkVBVEVfU1RSSVBFX0NPTk5FQ1RFRF9BQ0NPVU5UKENVUkVFTlRfQ09NUEFOWV9OQU1FKX0/dXNlckVtYWlsPSR7Y3VycmVudFVzZXI/LmVtYWlsfSZkb21haW5VUkw9JHtkb21haW5Vcmx9JmNvbXBhbnlOYW1lPSR7Q1VSRUVOVF9DT01QQU5ZX05BTUV9JmNvdW50cnk9JHt1c2VyQ291bnRyeX1gXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCB7IG9uYm9hcmRpbmdVcmwgfSA9IGNyZWF0ZVJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICAgICAgICAgIGlzUmVkaXJlY3RpbmdSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IG9uYm9hcmRpbmdVcmw7XG5cbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGF3YWl0IFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdFcnJvcicsXG4gICAgICAgICAgICAgICAgdGV4dDogZXJyLnJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlIHx8IGVyci5tZXNzYWdlLF
811xuICAgICAgICAgICAgICAgIGljb246ICdlcnJvcidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKCFpc1JlZGlyZWN0aW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlU3BsYXNoU2NyZWVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZmV0Y2hBbmRTZXRBY2NvdW50RGV0YWlscyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgICAgIGAke0dFVF9BTExfU1RSSVBFX0FDQ09VTlRTKENVUkVFTlRfQ09NUEFOWV9OQU1FKX0/dXNlcklkPSR7Y3VycmVudFVzZXI/LmlkfWBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjY291bnRJZHMgPSByZXNwb25zZS5kYXRhLmRhdGEuYWNjb3VudElkcyB8fCBbXTtcblxuICAgICAgICAgICAgY29uc3QgYWNjb3VudERldGFpbHNMaXN0ID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgYWNjb3VudElkcy5tYXAoYXN5bmMgKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3N0YXR1c1JlcywgZGJSZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3MuZ2V0KENIRUNLX0FDQ09VTlRfU1RBVFVTKENVUkVFTlRfQ09NUEFOWV9OQU1FKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBhY2NvdW50SWQ6IGlkIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aW9zLmdldChDSEVDS19BQ0NPVU5UX1NUQVRVU19GUk9NX0RCKENVUkVFTlRfQ09NUEFOWV9OQU1FKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBhY2NvdW50SWQ6IGlkIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaXBlRGF0YSA9IHN0YXR1c1Jlcy5kYXRhPy5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYkRhdGEgPSBkYlJlcy5kYXRhPy5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbmJvYXJkaW5nRG9uZSA9IHN0cmlwZURhdGEub25ib2FyZGluZ0NvbXBsZXRlZCA9PT0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBvbmJvYXJkaW5nRG9uZSAmJiAoZGJEYXRhLmlzQWN0aXZlID8/IGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudElkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0cmlwZURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gYWNjb3VudERldGFpbHNMaXN0LmZpbHRlcihhID0+IGEuaXNBY3RpdmUpO1xuICAgICAgICAgICAgY29uc3QgaW5hY3RpdmUgPSBhY2NvdW50RGV0YWlsc0xpc3QuZmlsdGVyKGEgPT4gIWEuaXNBY3RpdmUpO1xuXG4gICAgICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRlKGAvJHtDVVJFRU5UX0NPTVBBTllfTkFNRX0vc2hhcmVgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEFjY291bnREZXRhaWxzKGFjdGl2ZS5sZW5ndGggPiAwID8gYWN0aXZlWzBdIDogbnVsbCk7XG4gICAgICAgICAgICBzZXRQcmV2aW91c0FjY291bnREZXRhaWxzKFsuLi5hY3RpdmUuc2xpY2UoMSksIC4uLmluYWN0aXZlXSk7XG4gICAgICAgICAgICBzZXRBY2NvdW50SWQoYWN0aXZlLmxlbmd0aCA+IDAgPyBhY3RpdmVbMF0uYWNjb3VudElkIDogbnVsbCk7XG5cbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRBY2NvdW50SWQgJiYgYWN0aXZlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEFjY291bnRJZChhY3RpdmVbMF0uYWNjb3VudElkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBmZXRjaCBhbmQgc2V0IGFjY291bnQgZGV0YWlsczpcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VtZUNvbm5lY3RlZEFjY291bnQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGVuYWJsZVNwbGFzaFNjcmVlbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gMS4gR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGFjY291bnQgSUQgZnJvbSBiYWNrZW5kXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0FjY291bnRSZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoXG4gICAgICAgICAgICAgICAgYCR7R0VUX1NUUklQRV9BQ0NPVU5UX0lEKENVUkVFTlRfQ09NUEFOWV9OQU1FKX0/dXNlcklkPSR7Y3VycmVudFVzZXI/LmlkfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0FjY291bnRJZCA9IHByZXZpb3VzQWNjb3VudFJlc3BvbnNlLmRhdGEuZGF0YTtcblxuICAgICAgICAgICAgLy8gMi4gUGF1c2UgdGhlIGFjdGl2ZSBhY2NvdW50IGlmIGl04oCZcyBkaWZmZXJlbnQgZnJvbSB0aGUgc2VsZWN0ZWQgb25lXG4gICAgICAgICAgICBpZiAocHJldmlvdXNBY2NvdW50SWQgJiYgcHJldmlvdXNBY2NvdW50SWQgIT09IHNlbGVjdGVkQWNjb3VudElkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdChQQVVTRV9TVFJJUEVfQ09OTkVDVEVEX0FDQ09VTlQoQ1VSRUVOVF9DT01QQU5ZX05BTUUpLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBhY2NvdW50SWQ6IHByZXZpb3VzQWNjb3VudElkIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgI
811H1cblxuICAgICAgICAgICAgLy8gMy4gUmVzdW1lIHRoZSBzZWxlY3RlZCBhY2NvdW50XG4gICAgICAgICAgICBhd2FpdCBheGlvcy5wb3N0KFJFU1VNRV9TVFJJUEVfQ09OTkVDVEVEX0FDQ09VTlQoQ1VSRUVOVF9DT01QQU5ZX05BTUUpLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7IGFjY291bnRJZDogc2VsZWN0ZWRBY2NvdW50SWQgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdBY2NvdW50IFJlc3VtZWQgU3VjY2Vzc2Z1bGx5JyxcbiAgICAgICAgICAgICAgICBpbWFnZVVybDogJy9tZWRpYS9taXNjL0FwcHJvdmVkLnBuZycsXG4gICAgICAgICAgICAgICAgaW1hZ2VXaWR0aDogMTAwLFxuICAgICAgICAgICAgICAgIGltYWdlSGVpZ2h0OiAxMDAsXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdPaycsXG4gICAgICAgICAgICAgICAgY3VzdG9tQ2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdzd2FsLWN1c3RvbS10aXRsZScsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246ICdjdXN0b20tb2stYnV0dG9uJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFJlZnJlc2ggZGF0YVxuICAgICAgICAgICAgYXdhaXQgZmV0Y2hBbmRTZXRBY2NvdW50RGV0YWlscygpO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGF3YWl0IFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdSZXN1bWUgRmFpbGVkJyxcbiAgICAgICAgICAgICAgICB0ZXh0OiBlcnJvci5yZXNwb25zZT8uZGF0YT8uZGF0YT8ubWVzc2FnZSB8fCBlcnJvci5tZXNzYWdlLF
811xuICAgICAgICAgICAgICAgIGljb246ICdlcnJvcicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGRpc2FibGVTcGxhc2hTY3JlZW4oKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc1ZhbGlkQWNjb3VudCA9IChkZXRhaWxzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFkZXRhaWxzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBkZXRhaWxzPy5vbmJvYXJkaW5nQ29tcGxldGVkID09PSB0cnVlOyAvLyBPbmx5IHZhbGlkIGlmIG9uYm9hcmRpbmcgZmluaXNoZWRcbiAgICB9O1xuXG4gICAgY29uc3QgQWNjb3VudEhlYWRlciA9ICgpID0+IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpY29uX2NvbnRhaW5lciBkLWZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9XCIvbWVkaWEvbWlzYy9kYXNoYm9hcmQtYWNjb3VudC1pbWcucG5nXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJQcm9maWxlIEljb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInByb2ZpbGUtaWNvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cImFjY291bnQtbGlua1wiPkFjY291bnQ8L2gxPlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xuXG4gICAgY29uc3QgQWNjb3VudERldGFpbHNCb3g6IFJlYWN0LkZDPHtcbiAgICAgICAgZGV0YWlsczogYW55O1xuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnIHwgJ0luYWN0aXZlJztcbiAgICB9PiA9ICh7IGRldGFpbHMsIHN0YXR1cyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gc3RhdHVzID09PSAnQWN0aXZlJztcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkQWNjb3VudElkID09PSBkZXRhaWxzLmFjY291bnRJZDtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXRhaWxzLWJveCByZWxhdGl2ZSBmbGV4IGZsZXgtY29sXCI+XG5cblxuICAgICAgICAgICAgICAgIHsvKiBDaGVja2JveCBSb3cgKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjaGVja2JveC1yb3cgZmxleCBpdGVtcy1jZW50ZXIgbWItMi41XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgYWNjb3VudC0ke2RldGFpbHMuYWNjb3VudElkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEFjY291bnRJZCgocHJldikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9PT0gZGV0YWlscy5hY2NvdW50SWQgPyBudWxsIDogZGV0YWlscy5hY2NvdW50SWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFjY291bnQtY2hlY2tib3ggbXItM1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB7LyogRGV0YWlscyBHcmlkICovfVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXRhaWwtY29sXCI+XG4gIDxkaXY+PHN0cm9uZz5GaXJzdCBOYW1lPC9zdHJvbmc+PC9kaXY+XG4gIDxkaXYgdGl0bGU9e2RldGFpbHM/LmZpcnN0X25hbWUgfHwgXCJOL0FcIn0+XG4gICAge2RldGFpbHM/LmZpcnN0X25hbWUgfHwgXCJOL0FcIn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXRhaWwtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+PHN0cm9uZz5MYXN0IE5hbWU8L3N0cm9uZz48L2Rpdj48ZGl2IHRpdGxlPXtkZXRhaWxzPy5sYXN0X25hbWUgfHwgXCJOL0FcIn0+e2RldGFpbHM/Lmxhc3RfbmFtZSB8fCBcIk4vQVwifTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGV0YWlsLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzdHJvbmc+RW1haWw8L3N0cm9uZz48L2Rpdj48ZGl2IHRpdGxlPXtkZXRhaWxzPy5lbWFpbCB8fCBcIk4vQVwifT57ZGV0YWlscz8uZW1haWwgfHwgXCJOL0FcIn08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRldGFpbC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj48c3Ryb25nPkJhbmsgTmFtZTwvc3Ryb25nPjwvZGl2PjxkaXYgdGl0bGU9e2RldGFpbHM/LmJhbmtfbmFtZSB8fCBcIk4vQVwifT57ZGV0YWlscz8uYmFua19uYW1lIHx8IFwiTi9BXCJ9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXRhaWwtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+PHN0cm9uZz5Db3VudHJ5PC9zdHJvbmc+PC9kaXY+PGRpdiB0aXRsZT17ZGV0YWlscz8uY291bnRyeSB8fCBcIk4vQVwifT57ZGV0YWlscz8uY291bnRyeSB8fCBcIk4vQVwifTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGV0YWlsLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzdHJvbmc+QmFuayBBY2NvdW50PC9zdHJvbmc+PC9kaXY+PGRpdiB0aXRsZT17ZGV0YWlscz8ubGFzdDQgfHwgXCJOL0FcIn0+e2RldGFpbHM/Lmxhc3Q0IHx8IFwiTi9BXCJ9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB7LyogU3RhdHVzIEJhZGdlICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgc3RhdHVzLWJhZGdlIGFic29sdXRlIHRvcC0yLjUgcmlnaHQtMi41ICR7aXNBY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSd9YH0+XG4gICAgICAgICAgICAgICAgICAgI
811HtzdGF0dXN9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWxsQWNjb3VudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29tYmluZWQgPSBhY2NvdW50RGV0YWlsc1xuICAgICAgICAgICAgPyBbYWNjb3VudERldGFpbHMsIC4uLnByZXZpb3VzQWNjb3VudERldGFpbHNdXG4gICAgICAgICAgICA6IFsuLi5wcmV2aW91c0FjY291bnREZXRhaWxzXTtcblxuICAgICAgICByZXR1cm4gY29tYmluZWRcbiAgICAgICAgICAgIC5maWx0ZXIoaXNWYWxpZEFjY291bnQpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gKGIuaXNBY3RpdmUgPyAxIDogMCkgLSAoYS5pc0FjdGl2ZSA/IDEgOiAwKSlcbiAgICB9LCBbYWNjb3VudERldGFpbHMsIHByZXZpb3VzQWNjb3VudERldGFpbHNdKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkRGV0YWlscyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gYWxsQWNjb3VudHMuZmluZChhY2MgPT4gYWNjLmFjY291bnRJZCA9PT0gc2VsZWN0ZWRBY2NvdW50SWQpO1xuICAgIH0sIFthbGxBY2NvdW50cywgc2VsZWN0ZWRBY2NvdW50SWRdKTtcblx0XG5cdGNvbnN0IHNlbGVjdGVkSXNQYXVzZWQgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gc2VsZWN0ZWREZXRhaWxzICYmICFzZWxlY3RlZERldGFpbHMuaXNBY3RpdmU7XG5cdH0sIFtzZWxlY3RlZERldGFpbHNdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxDb250ZW50PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYXlvdXQtbW9kYWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImN1c192X3BheW91dF9kZWF0aWxzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJjdXNfdl9iX2RcIj5WaWV3IEJhbmsgRGV0YWlsczwvaDI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNjb3VudF9pbmZvXCI+QWRkIG9yIHN3aXRjaCBCYW5rIGFjY291bnRzIGhlcmUuIFRvIHN3aXRjaCwganVzdCBjaGVjayB0aGUgYWNjb3VudCB5b3Ugd2FudCBhbmQgY2xpY2sgUmVzdW1lLjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXhIZWlnaHQ6ICc0NjBweCcsIG92ZXJmbG93WTogJ2F1dG8nLCBwYWRkaW5nUmlnaHQ6ICc4cHgnIH19IGNsYXNzTmFtZT1cImFjY291bnQtZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICB7YWxsQWNjb3VudHMubWFwKChhY2MsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEFjY291bnREZXRhaWxzQm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpZHh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscz17YWNjfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz17YWNjPy5pc0FjdGl2ZSA/IFwiQWN0aXZlXCIgOiBcIkluYWN0aXZlXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIHthbGxBY2NvdW50cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidXR0b24tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGVhY3RpdmF0ZS1idG4gcmVzdW1lX2J0bl9wbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17cmVzdW1lQ29ubmVjdGVkQWNjb3VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXNlbGVjdGVkSXNQYXVzZWQgfHwgIXNlbGVjdGVkQWNjb3VudElkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogIXNlbGVjdGVkSXNQYXVzZWQgfHwgIXNlbGVjdGVkQWNjb3VudElkID8gJyNjY2MnIDogJycgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGVhY3RpdmF0ZS1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dDb25maXJtYXRpb25Nb2RhbCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkPXtzZWxlY3RlZElzUGF1c2VkIHx8ICFzZWxlY3RlZEFjY291bnRJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogc2VsZWN0ZWRJc1BhdXNlZCB8fCAhc2VsZWN0ZWRBY2NvdW50SWQgPyAnI2NjYycgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBBY2NvdW50XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHtzaG93Q29uZmlybWF0aW9uTW9kYWwgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLW92ZXJsYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uZmlybWF0aW9uLW1vZGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cImN1c19iYW5rX2FjY1wiPkNoYW5nZSBZb3VyIEJhbmsgQWNjb3VudDwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicy0xXCI+VGhpcyBiYW5rIGFjY291bnQgd2lsbCBzdG9wIHJlY2VpdmluZyBwYXlvdXRzPC9zcGFuPjxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInMtMlwiPiBhbmQgd2UnbGwgY29ubmVjdCBhIG5ldyBvbmUgdmlhIFN0cmlwZS48L3NwYW4+PGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicy0zXCI+IFlvdSBjYW4gc3dpdGNoIGJhY2sgbGF0ZXIgaWYgbmVlZGVkLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LyogPHA+PHN0cm9uZz5UaGlzIGFjY291bnQgd2lsbCBubyBsb25nZXIgYmUgdXNlZCBmb3IgdHJhbnNhY3Rpb25zLjwvc3Ryb25nPjwvcD4gKi99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiY2FuY2VsLWJ0bi1zdHJpcGVcIiBvbkNsaWNrPXsoKSA9PiBzZXRTaG93Q29uZmlybWF0aW9uTW9kYWwoZmFsc2UpfT5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJjb25maXJtLWJ0blwiIG9uQ2xpY2s9e2hhbmRsZVByb2NlZWR9PkFkZCBBY2NvdW50PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgI
811HshaXNSZWRpcmVjdGluZ1JlZi5jdXJyZW50ICYmIG5vQWN0aXZlQWNjb3VudCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXBsb2FkX292ZXJsYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWxfcHJpY2luZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY3VzX21hbmFnZV9zdWJzY3JpcHRpb25fbW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFjY291bnRIZWFkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjdXNfbW9kYWxfaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJjdXNfZnJlZV90cmlhbF90ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gYWN0aXZlIHBheW91dCBhY2NvdW50IGZvdW5kLiBQbGVhc2UgYWRkIGEgbmV3IHBheW91dCBhY2NvdW50IHRvIHJlY2VpdmUgdHJhbnNhY3Rpb25zLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidXR0b24tZ3JvdXAtY2VudGVyIGJ0bl9jX3BfYWRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYW5hZ2UtYnRuIGN1c19tbmdfYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS8ke0NVUkVFTlRfQ09NUEFOWV9OQU1FfS9zaGFyZWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIm1hbmFnZS1idG4gY3VzX21uZ19idG5cIiBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE5vQWN0aXZlQWNjb3VudChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNvbm5lY3RlZEFjY291bnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VlZCB0byBBZGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0NvbnRlbnQ+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBheW91dERldGFpbHM7Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlUmVmIiwiYXhpb3MiLCJ1c2VBdXRoIiwiU3dhbCIsInVzZU5hdmlnYXRlIiwiQ1VSRUVOVF9DT01QQU5ZX05BTUUiLCJDUkVBVEVfU1RSSVBFX0NPTk5FQ1RFRF9BQ0NPVU5UIiwiR0VUX0FMTF9TVFJJUEVfQUNDT1VOVFMiLCJHRVRfQUNDT1VOVF9JRCIsIkdFVF9TVFJJUEVfQUNDT1VOVF9JRCIsIkNIRUNLX0FDQ09VTlRfU1RBVFVTIiwiVVBEQVRFX1VTRVJfU1RSSVBFX1NUQVRVUyIsIkdFVF9TVFJJUEVfT05CT0FSRElOR19MSU5LIiwiUEFVU0VfU1RSSVBFX0NPTk5FQ1RFRF9BQ0NPVU5UIiwiUkVTVU1FX1NUUklQRV9DT05ORUNURURfQUNDT1VOVCIsIkNIRUNLX0FDQ09VTlRfU1RBVFVTX0ZST01fREIiLCJlbmFibGVTcGxhc2hTY3JlZW4iLCJkaXNhYmxlU3BsYXNoU2NyZWVuIiwiQ29udGVudCIsIlBheW91dERldGFpbHMiLCJjdXJyZW50VXNlciIsImFjY291bnRJZCIsInNldEFjY291bnRJZCIsImFjY291bnREZXRhaWxzIiwic2V0QWNjb3VudERldGFpbHMiLCJwcmV2aW91c0FjY291bnREZXRhaWxzIiwic2V0UHJldmlvdXNBY2NvdW50RGV0YWlscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsInNldFNob3dDb25maXJtYXRpb25Nb2RhbCIsInNlbGVjdGVkQWNjb3VudElkIiwic2V0U2VsZWN0ZWRBY2NvdW50SWQiLCJub0FjdGl2ZUFjY291bnQiLCJzZXROb0FjdGl2ZUFjY291bnQiLCJkb21haW5VcmwiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIm9yaWdpbiIsImlzUmVkaXJlY3RpbmdSZWYiLCJuYXZpZ2F0ZSIsImNoZWNrU3RyaXBlQWNjb3VudEZsb3ciLCJkYXRhIiwiYWNjb3VudFJlc3AiLCJnZXQiLCJpZCIsIm5ld1N0cmlwZUFjY291bnRJZCIsInN0YXR1c1Jlc3BvbnNlIiwicGFyYW1zIiwicXVlcnlQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJzZWFyY2giLCJvbmJvYXJkaW5nIiwib25ib2FyZGluZ0NvbXBsZXRlZCIsInByZXZpb3VzQWNjb3VudFJlc3BvbnNlIiwicG9zdCIsInByZXZpb3VzQWNjb3VudElkIiwiZmlyZSIsInRpdGxlIiwiaHRtbCIsImltYWdlVXJsIiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0IiwiY29uZmlybUJ1dHRvblRleHQiLCJ
811jdXN0b21DbGFzcyIsImNvbmZpcm1CdXR0b24iLCJidXR0b25zU3R5bGluZyIsImZldGNoQW5kU2V0QWNjb3VudERldGFpbHMiLCJuZXdVcmwiLCJVUkwiLCJocmVmIiwic2VhcmNoUGFyYW1zIiwiZGVsZXRlIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsInRvU3RyaW5nIiwiZXJyb3IiLCJjb25zb2xlIiwiY3VycmVudCIsImVtYWlsIiwiZmV0Y2giLCJ0aGVuIiwicmVzIiwianNvbiIsInNldFVzZXJDb3VudHJ5IiwiY291bnRyeSIsInVzZXJDb3VudHJ5IiwiaGFuZGxlUHJvY2VlZCIsImNyZWF0ZUNvbm5lY3RlZEFjY291bnQiLCJlcnIiLCJkYlJlcyIsImRiRGF0YSIsImlzQWN0aXZlIiwib25ib2FyZGluZ0xpbmtSZXNwb25zZSIsImRvbWFpblVSTCIsIm9uYm9hcmRpbmdVcmwiLCJjcmVhdGVSZXNwb25zZSIsInRleHQiLCJyZXNwb25zZSIsIm1lc3NhZ2UiLCJpY29uIiwiYWNjb3VudElkcyIsImFjY291bnREZXRhaWxzTGlzdCIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJzdGF0dXNSZXMiLCJzdHJpcGVEYXRhIiwib25ib2FyZGluZ0RvbmUiLCJhY3RpdmUiLCJmaWx0ZXIiLCJhIiwiaW5hY3RpdmUiLCJsZW5ndGgiLCJzbGljZSIsInJlc3VtZUNvbm5lY3RlZEFjY291bnQiLCJpc1ZhbGlkQWNjb3VudCIsImRldGFpbHMiLCJBY2NvdW50SGVhZGVyIiwiZGl2IiwiY2xhc3NOYW1lIiwiaW1nIiwic3JjIiwiYWx0IiwiaDEiLCJBY2NvdW50RGV0YWlsc0JveCIsInN0YXR1cyIsImlzU2VsZWN0ZWQiLCJpbnB1dCIsInR5cGUiLCJjaGVja2VkIiwib25DaGFuZ2UiLCJwcmV2Iiwic3Ryb25nIiwiZmlyc3RfbmFtZSIsImxhc3RfbmFtZSIsImJhbmtfbmFtZSIsImxhc3Q0IiwiYWxsQWNjb3VudHMiLCJjb21iaW5lZCIsInNvcnQiLCJiIiwic2VsZWN0ZWREZXRhaWxzIiwiZmluZCIsImFjYyIsInNlbGVjdGVkSXNQYXVzZWQiLCJoMiIsInN0eWxlIiwibWF4SGVpZ2h0Iiwib3ZlcmZsb3dZIiwicGFkZGluZ1JpZ2h0IiwiaWR4IiwiYnV0dG9uIiwib25DbGljayIsImRpc2FibGVkIiwiYmFja2dyb3VuZENvbG9yIiwic3BhbiIsImJyIiwicCJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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

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.