PageSourceSearch

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

js sixsigmafunnels.com collected 2026-10-02 01:44:36 UTC 172,542 bytes, 1,469 lines download raw bytes

1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/app/pages/dashboard/PaymentGateway.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/PaymentGateway.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"]; const _Fragment = __vite__cjsImport1_react_jsxDevRuntime["Fragment"];
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 useState = __vite__cjsImport2_react["useState"]; const useEffect = __vite__cjsImport2_react["useEffect"];
12import { useLocation, useSearchParams } from "/node_modules/.vite/deps/react-router-dom.js?v=e8ce80ae";
13import { Content } from "/src/config/layout/components/Content.tsx";
14import PaymentGateWayMonth from "/src/app/pages/dashboard/components/PaymentGateWayMonth.tsx";
15import PaymentGateWayYear from "/src/app/pages/dashboard/components/PaymentGateWayYear.tsx";
16import "/src/app/pages/dashboard/css/paymentGateway.css";
17import { toAbsoluteUrl } from "/src/config/helpers/index.ts";
18import { CUREENT_COMPANY_NAME, GET_ALL_SUBSCRIPTIONPLANS, GET_ALL_USERADDRESS, GET_ORDER, POST_CREATE_CHECKOUT_SESSION, POST_CREATE_USER_ADDRESS, REGEX_NO_NUMBER_OR_SPECIAL, REGEX_NO_SPACES, REGEX_EMAIL } from "/src/app/Constants.tsx";
19import axios from "/node_modules/.vite/deps/axios.js?v=e8ce80ae";
20import { disablePaymentSplashScreen, disableSplashScreen, enablePaymentSplashScreen, enableSplashScreen } from "/src/app/pages/common/CommonUtilities.tsx";
21import { useAuth } from "/src/app/modules/auth/index.ts";
22import Swal from "/node_modules/.vite/deps/sweetalert2.js?v=e8ce80ae";
23const initialFormData = {
24    firstName: "",
25    lastName: "",
26    email: "",
27    country: "",
28    state: "",
29    city: "",
30    zipCode: "",
31    addressLine1: "",
32    addressLine2: ""
33};
34const PaymentGateway = ()=>{
35    _s();
36    const [step, setStep] = useState(3);
37    const [availableStates, setAvailableStates] = useState([]);
38    const [availableCities, setAvailableCities] = useState([]);
39    const [savedEmail, setSavedEmail] = useState("");
40    const [errors, setErrors] = useState({});
41    const [visitedSteps, setVisitedSteps] = useState([
42        1
43    ]);
44    const [searchParams] = useSearchParams();
45    const [choosedPlan, setChoosedPlan] = useState(false);
46    const [seletedPlan_, setSeletedPlan_] = useState("");
47    const { currentUser, setCurrentUser } = useAuth();
48    const [orderId, setOrderId] = useState(null);
49    const [UserCartDetails, setUserCartDetails] = useState(null);
50    const [priceId, setPriceId] = useState(null);
51    const [status, setStatus] = useState(null);
52    const location = useLocation();
53    const [flag, setFlag] = useState(false);
54    const state = location.state;
55    const [couponCode, setCouponCode] = useState(null);
56    let portalUrl = window.location.origin;
57    const [subscriptionPlanDetails, setSubscriptionPlanDetails] = useState([]);
58    const [monthlyPlan, setMonthlyPlan] = useState(null);
59    const [yearlyPlan, setYearlyPlan] = useState(null);
60    const [countries, setCountries] = useState([]);
61    const [states, setStates] = useState([]);
62    const [cities, setCities] = useState([]);
63    const [selectedCountry, setSelectedCountry] = useState(null);
64    const [OpenBill, setOpenBill] = useState(false);
65    const [selectedState, setSelectedState] = useState(null);
66    const [selectedCity, setSelectedCity] = useState(null);
67    const [isCountryFocused, setIsCountryFocused] = useState(false);
68    const [isStateFocused, setIsStateFocused] = useState(false);
69    const [isCityFocused, setIsCityFocused] = useState(false);
70    const [userAddress, setUserAddress] = useState([]);
71    const [selectedAddressIndex, setSelectedAddressIndex] = useState("");
72    const [lastSelectedAddressIndex, setLastSelectedAddressIndex] = useState("");
73    const [backBtnFlag, setBackBtnFlag] = useState(false);
74    const [OpenBillForm, setOpenBillForm] = useState(true);
75    const [openform, setopenform] = useState(false);
76    const [formData, setFormData] = useState(initialFormData);
77    useEffect(()=>{
78        //const location = useLocation();
79        const queryParams = new URLSearchParams(location.search);
80        const selectedPlan = queryParams.get("plan");
81        const planType = queryParams.get("planType");
82        setOrderId(queryParams.get("orderId"));
83        setPriceId(queryParams.get("priceId"));
84        setSeletedPlan_(selectedPlan ? selectedPlan : "");
85        setStatus(queryParams.get("status"));
86        if (planType === "multiple") {
87            setChoosedPlan(true);
88        }
89        //collecting the types of subscription plans
90        getSubscriptionPlanDetails();
91    }, []);
92    useEffect(()=>{
93        console.log("Collecting the yearly & Monthly plan only");
94        getPlanDetailsBySellPrice(subscriptionPlanDetails);
95    }, [
96        subscriptionPlanDetails
97    ]);
98    // useEffect(() => {
99    // //After checkout page.
100    // const queryParams = new URLSearchParams(location.search);
101    // setStatus(queryParams.get("status"));
102    // }, []);
103    // useEffect(() => {
104    //   console.log("Received state in PaymentGateway: ", state);
105    //   console.log(state?.orderId, state?.priceId, state?.plan);
106    //   if (state) {
107    //     setSeletedPlan_(state?.plan);
108    //     setOrderId(state?.orderId);
109    //     setPriceId(state?.priceId);
110    //   }
111    //   if(state?.plan_type==="multiple"){
112    //     setChoosedPlan(true);
113    //   }
114    // }, [state]);
115    async function getSubscriptionPlanDetails() {
116        try {
117            const response = await axios.get(GET_ALL_SUBSCRIPTIONPLANS(CUREENT_COMPANY_NAME));
118            console.log("respnse status code .." + response.status);
119            if (response.status == 200) {
120                setSubscriptionPlanDetails(response.data);
121            }
122        } catch (e) {
123            console.error("Error ..." + e);
124        }
125    }
126    // Fetch countries from restcountries.com API
127    //   useEffect(() => {
128    //   const fetchCountries = async () => {
129    //     // enableSplashScreen(); // Show splash/loading indicator
130    //     try {
131    //       const response = await axios.get("https://countriesnow.space/api/v0.1/countries/positions");
132    //         const countryOptions = response.data.data.map((country: any) => ({
133    //           label: country.name,
134    //         value: country.name,
135    //         }));
136    //         setCountries(countryOptions);
137    //     } catch (error) {
138    //       console.error("Error fetching countries:", error);
139    //     } finally {
140    //       // disableSplashScreen(); // Hide splash/loading indicator
141    //     }
142    //   };
143    //   fetchCountries();
144    // }, []);
145    //Filtering the yearly & monthly plans only
146    const getPlanDetailsBySellPrice = (plans)=>{
147        const matchedMonthlyPlan = plans.find((plan)=>plan.name.toLowerCase().includes("offer"));
148        if (matchedMonthlyPlan) {
149            console.log("Monthly plan found...");
150            setMonthlyPlan(matchedMonthlyPlan);
151        } else {
152            console.log("No Monthly Plan matched the given conditions.");
153        }
154        const matchedYearlyPlan = plans.find((plan)=>plan.name.toLowerCase().includes("yearly"));
155        if (matchedYearlyPlan) {
156            console.log("Yearly plan found...");
157            setYearlyPlan(matchedYearlyPlan);
158        } else {
159            console.log("No Yearly Plan matched the given conditions.");
160        }
161    };
162    useEffect(()=>{
163        if (orderId) {
164            getOrderwithPlan(parseInt(orderId));
165        }
166    }, [
167        orderId
168    ]);
169    useEffect(()=>{
170        if (status?.includes("success")) {
171            const sessionOrderId = sessionStorage.getItem("orderId");
172            console.log("Status received..." + sessionOrderId);
173            if (sessionOrderId) {
174                getOrderwithPlan(parseInt(sessionOrderId));
175                setStep(3);
176            // createSubscription();
177            }
178        }
179    }, [
180        status
181    ]);
182    //collect the current Order details
183    // async function createSubscription() {
184    //   console.log("calling...createSubscription");
185    //   try {
186    //     const response = await axios.post(
187    //       CREATE_SUBSCRIPTION(CUREENT_COMPANY_NAME),
188    //       {
189    //         orderId: sessionStorage.getItem("orderId"),
190    //         status: "ACTIVE",
191    //         DiscountRate: 0.0,
192    //       }
193    //     );
194    //     console.log("response ...." + response);
195    //     if (response.status == 200) {
196    //     }
197    //   } catch (e) {
198    //     console.log("Error...." + e);
199    //   } finally {
200    //     sessionStorage.removeItem("orderId");
201    //   }
202    // }
203    //collect the current Order details
204    async function getOrderwithPlan(orderId) {
205        console.log("calling...getOrderwithPlan" + orderId);
206        try {
207            const response = await axios.post(GET_ORDER(CUREENT_COMPANY_NAME) + "?orderId=" + orderId);
208            console.log("response ...." + response);
209            if (response.status == 200) {
210                setUserCartDetails(response.data);
211            }
212        } catch (e) {
213            console.log("Error...." + e);
214        }
215    }
216    //
217    const handleChange = (e)=>{
218        const { name, value } = e.target;
219        if (name === "zipCode" && !/^\d*$/.test(value)) {
220            setErrors((prevErrors)=>({
221                    ...prevErrors,
222                    zipCode: "Only numeric values are allowed for Zip Code"
223                }));
224            return;
224 // Prevent updating the state if the value is invalid
225        } else {
226            // Clear the error if the value is valid
227            setErrors((prevErrors)=>({
228                    ...prevErrors,
229                    zipCode: ""
230                }));
231        }
232        setFormData((prev)=>({
233                ...prev,
234                [name]: value
235            }));
236        if (name === "plan") {
237            setSeletedPlan_(value);
238        }
239        setErrors((prevErrors)=>{
240            const newErrors = {
241                ...prevErrors
242            };
243            delete newErrors[name];
244            return newErrors;
245        });
246    // if (name === 'country') {
247    //   const country = value as keyof typeof locationData;
248    //   setAvailableStates(Object.keys(locationData[country] || {})); // ✅ Add this line
249    //   setAvailableCities([]);
250    //   setFormData(prev => ({ ...prev, state: '', city: '' }));
251    // }
252    // if (name === 'state') {
253    //   const country = formData.country as keyof typeof locationData;
254    //   const state = value as keyof (typeof locationData)[typeof country];
255    //   setAvailableCities(locationData[country]?.[state] || []);
256    //   setFormData(prev => ({ ...prev, city: '' }));
257    // }
258    // validateStep1();
259    };
260    const validateStep1 = ()=>{
261        let newErrors = {};
262        // First Name Validation
263        if (!formData.firstName.trim()) {
264            newErrors.firstName = "First name is required";
265        } else if (REGEX_NO_NUMBER_OR_SPECIAL.test(formData.firstName)) {
266            newErrors.firstName = "First name must start with a letter";
267        } else if (formData.firstName.length < 3 || formData.firstName.length > 15) {
268            newErrors.firstName = "First name must be between 3 and 15 characters";
269        } else if (!REGEX_NO_SPACES.test(formData.firstName)) {
270            newErrors.firstName = "The first three characters cannot be spaces";
271        }
272        // Last Name Validation
273        if (!formData.lastName.trim()) {
274            newErrors.lastName = "Last name is required";
275        } else if (REGEX_NO_NUMBER_OR_SPECIAL.test(formData.lastName)) {
276            newErrors.lastName = "Last name must start with a letter";
277        } else if (formData.lastName.length < 3 || formData.lastName.length > 15) {
278            newErrors.lastName = "Last name must be between 3 and 15 characters";
279        } else if (!REGEX_NO_SPACES.test(formData.lastName)) {
280            newErrors.lastName = "The last three characters cannot be spaces";
281        }
282        // Email Validation
283        if (!formData.email.trim()) {
284            newErrors.email = "Email is required";
285        } else if (!REGEX_EMAIL.test(formData.email)) {
286            newErrors.email = "Enter a valid email";
287        }
288        if (!formData.addressLine1.trim()) {
289            newErrors.addressLine1 = "Address Line1 is required";
290        }
291        if (!formData.zipCode.trim()) {
292            newErrors.zipCode = "Zip Code is required";
293        }
294        if (!selectedCountry) {
295            newErrors.country = "Country is required";
296        }
297        if (!selectedState) {
298            newErrors.state = "State is required";
299        }
300        if (!selectedCity) {
301            newErrors.city = "City is required";
302        }
303        setErrors(newErrors);
304        return Object.keys(newErrors).length === 0;
305    };
306    // useEffect(()=>{
307    //  validateStep1() 
308    // },[formData])
309    useEffect(()=>{
310        console.error("lastSelectedAddressIndex :: " + lastSelectedAddressIndex);
311    }, [
312        lastSelectedAddressIndex
313    ]);
314    useEffect(()=>{
315        if (userAddress.length === 0) return;
316        console.error("backbuttonflag :: " + backBtnFlag);
317        console.error("lastSelectedAddressIndex :: " + lastSelectedAddressIndex);
318        // Default behavior: select the latest address
319        if (backBtnFlag) {
320            // Restore previously selected address
321            console.error("executed if block");
322            if (lastSelectedAddressIndex === "") {
323                setSelectedAddressIndex(userAddress[userAddress.length - 1].addressId);
324            } else {
325                setSelectedAddressIndex(lastSelectedAddressIndex);
326            }
327        } else {
328            console.error("executed else block");
329            if (step === 1) {
330                const latestAddressId = userAddress[userAddress.length - 1].addressId;
331                setSelectedAddressIndex(latestAddressId);
332                setLastSelectedAddressIndex(latestAddressId);
333            }
334        }
335    }, [
336        userAddress,
337        backBtnFlag
338    ]);
339    const handleNext = async ()=>{
340        if (step === 1 && selectedAddressIndex) {
341            setStep(step + 1);
342            return;
343        }
344        if (step === 1 && !validateStep1()) {
345            return;
346        }
347        // if (step === 2) {
348        //   // Determine pricing and product info
349        //   const isMonthly = formData.plan === "monthly";
350        //   const productName = isMonthly
351        //     ? 'SIX SIGMA FUNNEL “MONTHLY PLAN”'
352        //     : 'SIX SIGMA FUNNEL “YEARLY PLAN”';
353        //   const productPrice = isMonthly ? 9700 : 116400; // Stripe accepts price in cents
354        //   const quantity = 1;
355        //   const currency = "usd";
356        //   const email = savedEmail;
357        //   const domainUrl = window.location.origin;
358        //   const companyName = CUREENT_COMPANY_NAME;
359        //   try {
360        //     const response = await axios.post<StripeResponse>(
361        //       POST_CREATE_CHECKOUT_SESSION(CUREENT_COMPANY_NAME),
362        //       {
363        //         productName,
364        //         productPrice,
365        //         quantity,
366        //         currency,
367        //         email,
368        //         domainUrl,
369        //         companyName
370        //       }
371        //     );
372        //     if (response.data.status === "SUCCESS" && response.data.sessionUrl) {
373        //       localStorage.removeItem("trialExpired");
374        //       window.location.href = response.data.sessionUrl;
375        //     } else {
376        //       console.error("Checkout session failed:", response.data.message);
377        //       alert("Something went wrong during checkout. Please try again.");
378        //     }
379        //   } catch (error) {
380        //     console.error("Error calling checkout session API:", error);
381        //     alert("Error connecting to checkout. Please try again later.");
382        //   }
383        //   return; // Prevent moving to step 3 — wait for Stripe redirect
384        // }
385        // const nextStep = step + 1;
386        // setStep(nextStep);
387        // setVisitedSteps((prev) => [...new Set([...prev, nextStep])]);
388        //after validation call the createUserAddress to store it.
389        setStep(step + 1);
390        setLastSelectedAddressIndex("");
391        createUserAddress();
392    };
393    const handlePlanChange = async (priceId, planType)=>{
394        console.log("price id .." + priceId, "plan type .." + planType);
395        if (planType && priceId) {
396            setSeletedPlan_(planType);
397            setPriceId(priceId);
398        }
399        try {
400            const orderResponse = await axios.post(GET_ORDER(CUREENT_COMPANY_NAME), null, {
401                params: {
402                    orderId: orderId,
403                    priceId: priceId,
404                    planType: planType
405                }
406            });
407            console.log("orderResponse.status .." + orderResponse.status);
408            if (orderResponse.status === 200) {
409                setUserCartDetails(orderResponse.data);
410            }
411        } catch (error) {
412            console.error("Failed to switch plan:", error);
413        } finally{
414            //To update the URL in Back case
415            const queryParams = new URLSearchParams(window.location.search);
416            if (planType) {
417                queryParams.set("plan", planType); // Update or add the plan param
418            }
419            const newUrl = window.location.pathname + "?" + queryParams.toString();
420            // Update the URL without reloading
421            window.history.replaceState(null, "", newUrl);
422        }
423    };
424    const handlePayment = async ()=>{
425        // const quantity = 1;
426        const currency = "usd";
427        const email = savedEmail;
428        const domainUrl = window.location.origin;
429        const companyName = CUREENT_COMPANY_NAME;
430        try {
431            //enableSplashScreen();
432            enablePaymentSplashScreen();
433            const response = await axios.post(POST_CREATE_CHECKOUT_SESSION(CUREENT_COMPANY_NAME), {
434                // productName,
435                priceId,
436                // quantity,
437                currency,
438                orderId,
439                // email,
440                domainUrl,
441                companyName,
442                couponCode
443            });
444            if (response.data.status === "SUCCESS" && response.data.sessionUrl) {
445                localStorage.removeItem("trialExpired");
446                window.location.href = response.data.sessionUrl;
447            } else {
448                console.error("Checkout session failed:", response.data.message);
449                disablePaymentSplashScreen();
450                Swal.fire({
451                    imageUrl: "/media/misc/remove.png",
452                    imageWidth: 60,
453                    imageHeight: 60,
454                    title: "<span style='color: red; font-weight: bold;'>Error!</span>",
455                    html: `<strong>${response.data.message}</strong>`,
456                    confirmButtonText: "OK",
457                    confirmButtonColor: "#f79c3a"
458                });
459            //alert("Something went wrong during checkout. Please try again.");
460            }
461        } catch (error) {
462            console.error("Error calling checkout session API:", error);
463            alert("Error connecting to checkout. Please try again later.");
464        } finally{
465        //disableSplashScreen();
466        }
467        return; // Prevent moving to step 3 — wait for Stripe redirect
468    };
469    async function getcurrentdata() {
470        try {
471            const response = await axios.get(GET_ALL_USERADDRESS(CUREENT_COMPANY_NAME));
472            const rawData = response.data;
473            if (response.status === 200) {
474                const simplified = rawData.map((addr)=>({
475                        addressLine1: addr.line1,
476                        addressLine2: addr.line2,
477                        country: addr.country,
478                        phone: addr.phone,
479                        contactName: addr.contactName,
480                        postalCode: addr.postalCode,
481                        addressId: addr.addressId,
482                        state: addr.state,
483                        city: addr.city
484                    }));
485                setOpenBill(true);
486                setUserAddress(simplified);
487                setOpenBillForm(false);
488            }
489        } catch (error) {
490            console.error("Error fetching user addresses:", error);
491            throw error; // Optional: rethrow if caller needs to handle it
492        }
493    }
494    useEffect(()=>{
495        getcurrentdata();
496    }, [
497        step
498    ]);
499    function handleopenform() {
500        setopenform(true);
501        console.log("this is the " + openform);
502    }
503    function handlelink() {
504        setFormData(initialFormData);
505        // Reset dropdown selections
506        setSelectedState(null);
507        setSelectedCity(null);
508        setSelectedCountry(null);
509    }
510    const handleBack = ()=>{
511        if (step > 1) {
512            setBackBtnFlag(true);
513            setStep(step - 1);
514        }
515    };
516    async function createUserAddress() {
517        try {
518            const response = await axios.post(POST_CREATE_USER_ADDRESS(CUREENT_COMPANY_NAME), {
519                contactName: formData.firstName + " " + formData.lastName,
520                line1: formData.addressLine1,
521                line2: formData.addressLine2,
522                city: selectedCity,
523                state: selectedState,
524                postalCode: formData.zipCode,
525                addressType: "BILLING",
526                phone: "000-000-0000",
527                country: selectedCountry
528            });
529            if (response.status == 200) {
530                console.log("user address added susccessfully");
531            }
532            console.log("Address created successfully:", response.data);
533            return response.data;
534        } catch (e) {
535            console.error("Error creating address:", e);
536        // Optionally, throw or handle error appropriately
537        }
538    }
539    // Field definitions (label and name)
540    const fields = [
541        {
542            label: "First Name*",
543            name: "firstName"
544        },
545        {
546            label: "Last Name*",
547            name: "lastName"
548        },
549        {
550            label: "Email*",
551            name: "email"
552        },
553        {
554            label: "Address Line1",
555            name: "addressLine1"
556        },
557        {
558            label: "Address Line2",
559            name: "addressLine2"
560        },
561        {
562            label: "Zip Code",
563            name: "zipCode"
564        }
565    ];
566    // Handle country change and fetch states
567    const handleCountryChange = (e)=>{
568        const countryCode = e.target.value;
569        setSelectedCountry(countryCode);
570        setSelectedState(null);
571        setStates([]);
572        // Clear validation error
573        if (errors.country) {
574            setErrors((prev)=>({
575                    ...prev,
576                    country: ""
577                }));
578        }
579        // Toggle filled class based on value
580        const parent = e.target.closest(".input-container");
581        if (parent) {
582            if (countryCode) {
583                parent.classList.add("filled");
584            } else {
585                parent.classList.remove("filled");
586            }
587        }
588        // Fetch states if a country is selected
589        if (countryCode) {
590            enableSplashScreen(); // Show loading indicator
591            axios.post("https://countriesnow.space/api/v0.1/countries/states", {
592                country: countryCode
593            }).then((response)=>{
594                const stateOptions = response.data.data.states.map((state)=>({
595                        label: state.name,
596                        value: state.name
597                    }));
598                setStates(stateOptions);
599            }).catch((error)=>{
600                console.error("Error fetching states:", error);
601            }).finally(()=>{
602                disableSplashScreen(); // Hide loading indicator
603            });
604        }
605    };
606    const handleStateChange = (e)=>{
607        const stateCode = e.target.value;
608        setSelectedState(stateCode);
609        setSelectedCity(null); // Reset city selection
610        // Clear state error if any
611        if (errors.state) {
612            setErrors((prev)=>({
613                    ...prev,
614                    state: ""
615                }));
616        }
617        // Toggle 'filled' class for floating label
618        const parent = e.target.closest(".input-container");
619        if (parent) {
620            if (stateCode) {
621                parent.classList.add("filled");
622            } else {
623                parent.classList.remove("filled");
624            }
625        }
626        // Fetch cities if both state and country are selected
627        if (stateCode && selectedCountry) {
628            enableSplashScreen(); // Show loading indicator
629            axios.post("https://countriesnow.space/api/v0.1/countries/state/cities", {
630                country: selectedCountry,
631                state: stateCode
632            }).then((response)=>{
633                const cityOptions = response.data.data.map((city)=>({
634                        label: city,
635                        value: city
636                    }));
637                setCities(cityOptions);
638            }).catch((error)=>{
639                console.error("Error fetching cities:", error);
640            }).finally(()=>{
641                disableSplashScreen(); // Hide loading indicator
642            });
643        } else {
644            setCities([]);
645        }
646    };
647    const handleCityChange = (e)=>{
648        const selectedOption = e.target.value;
649        setSelectedCity(selectedOption);
650        enableSplashScreen();
651        // Clear city error if present
652        if (errors.city) {
653            setErrors((prev)=>({
654                    ...p
654rev,
655                    city: ""
656                }));
657        }
658        // Toggle 'filled' class for floating label
659        const parent = e.target.closest(".input-container");
660        if (parent) {
661            if (selectedOption) {
662                parent.classList.add("filled");
663            } else {
664                parent.classList.remove("filled");
665            }
666        }
667        disableSplashScreen();
668    };
669    useEffect(()=>{
670        setVisitedSteps((prev)=>prev.includes(step) ? prev : [
671                ...prev,
672                step
673            ]);
674    }, [
675        step
676    ]);
677    const stepLabels = [
678        "Invoice Address",
679        "Purchase Overview",
680        "Purchase Confirmation"
681    ];
682    return /*#__PURE__*/ _jsxDEV(_Fragment, {
683        children: /*#__PURE__*/ _jsxDEV(Content, {
684            children: /*#__PURE__*/ _jsxDEV("div", {
685                style: {
686                    width: "80%",
687                    margin: "0 auto",
688                    padding: 20
689                },
690                children: [
691                    /*#__PURE__*/ _jsxDEV("div", {
692                        className: "stepper"
693                    }, void 0, false, {
694                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
695                        lineNumber: 857,
696                        columnNumber: 11
697                    }, this),
698                    step === 1 && OpenBill && /*#__PURE__*/ _jsxDEV("div", {
699                        style: {
700                            margin: "auto",
701                            width: "100%"
702                        },
703                        children: [
704                            /*#__PURE__*/ _jsxDEV("h2", {
705                                children: "Choose a Billing Address"
706                            }, void 0, false, {
707                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
708                                lineNumber: 911,
709                                columnNumber: 15
710                            }, this),
711                            /*#__PURE__*/ _jsxDEV("div", {
712                                style: {
713                                    overflowY: "auto",
714                                    border: "1px solid #ddd",
715                                    borderRadius: "5px",
716                                    padding: "20px",
717                                    width: "100%",
718                                    maxHeight: "200px"
719                                },
720                                children: [
721                                    /*#__PURE__*/ _jsxDEV("h4", {
722                                        children: "Your addresses"
723                                    }, void 0, false, {
724                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
725                                        lineNumber: 923,
726                                        columnNumber: 17
727                                    }, this),
728                                    userAddress.map((address, index)=>/*#__PURE__*/ _jsxDEV("label", {
729                                            style: {
730                                                display: "block",
731                                                marginBottom: "10px",
732                                                cursor: "pointer",
733                                                fontWeight: selectedAddressIndex === address.addressId ? "bold" : "normal"
734                                            },
735                                            onClick: ()=>{
736                                                setOpenBillForm(false);
737                                                setErrors({});
738                                            },
739                                            children: [
740                                                /*#__PURE__*/ _jsxDEV("input", {
741                                                    type: "radio",
742                                                    name: "billingAddress",
743                                                    checked: selectedAddressIndex === address.addressId,
744                                                    onChange: ()=>{
745                                                        setSelectedAddressIndex(address.addressId);
746                                                        setLastSelectedAddressIndex(address.addressId);
747                                                    },
748                                                    style: {
749                                                        marginRight: "8px"
750                                                    }
751                                                }, void 0, false, {
752                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
753                                                    lineNumber: 940,
754                                                    columnNumber: 21
755                                                }, this),
756                                                address.contactName,
757                                                ",  ",
758                                                address.country,
759                                                ", ",
760                                                address.state,
761                                                ", ",
762                                                address.city,
763                                                ", ",
764                                                address.postalCode
765                                            ]
766                                        }, index, true, {
767                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
768                                            lineNumber: 926,
769                                            columnNumber: 19
770                                        }, this)),
771                                    /*#__PURE__*/ _jsxDEV("a", {
772                                        href: "#",
773                                        style: {
774                                            color: "#007bff",
775                                            textDecoration: "none",
776                                            display: "inline-block",
777                                            marginTop: "10px"
778                                        },
779                                        onClick: (e)=>{
780                                            e.preventDefault();
781                                            setSelectedAddressIndex("");
782                                            setOpenBillForm(true);
783                                            handlelink();
784                                            setErrors({});
785                                        },
786                                        children: "+Add New Billing Address"
787                                    }, void 0, false, {
788                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
789                                        lineNumber: 955,
790                                        columnNumber: 17
791                                    }, this)
792                                ]
793                            }, void 0, true, {
794                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
795                                lineNumber: 912,
796                                columnNumber: 15
797                            }, this)
798                        ]
799                    }, void 0, true, {
800                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
801                        lineNumber: 910,
802                        columnNumber: 13
803                    }, this),
804                    step === 1 && OpenBillForm && /*#__PURE__*/ _jsxDEV("div", {
805                        children: /*#__PURE__*/ _jsxDEV("div", {
806                            style: {
807                                display: "flex",
808                                flexWrap: "wrap",
809                                gap: "20px"
810                            },
811                            children: [
812                                fields.filter((field)=>field.name !== "zipCode").map((field)=>/*#__PURE__*/ _jsxDEV("div", {
813                                        className: `input-container ${formData[field.name] ? "filled" : ""}`,
814                                        style: {
815                                            flex: "1 0 30%",
816                                            minWidth: "200px",
817                                            position: "relative"
818                                        },
819                                        children: [
820                                            /*#__PURE__*/ _jsxDEV("input", {
821                                                type: field.name === "email" ? "email" : "text",
822                                                name: field.name,
823                                                value: formData[field.name],
824                                                onChange: handleChange,
825                                                onFocus: (e)=>e.currentTarget.parentElement?.classList.add("focused"),
826                                                onBlur: (e)=>{
827                                                    if (!e.currentTarget.value) {
828                                                        e.currentTarget.parentElement?.classList.remove("focused");
829                                                    }
830                                                },
831                                                className: "floating-input",
832                                                style: {
833                                                    width: "100%",
834                                                    padding: "12px 8px 4px 8px"
835                                                },
836                                                maxLength: [
837                                                    "firstName",
838                                                    "lastName"
839                                                ].includes(field.name) ? 15 : field.name === "addressLine1" ? 100 : undefined
840                                            }, void 0, false, {
841                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
842                                                lineNumber: 997,
843                                                columnNumber: 23
844                                            }, this),
845                                            /*#__PURE__*/ _jsxDEV("label", {
846                                                className: "floating-label",
847                                                children: [
848                                                    field.label.replace("*", ""),
849                                                    [
850                                                        "firstName",
851                                                        "lastName",
852                                                        "email",
853                                                        "addressLine1",
854                                                        "zipCode"
855                                                    ].includes(field.name) && /*#__PURE__*/ _jsxDEV("span", {
856                                                        style: {
857                                                            color: "red"
858                                                        },
859                                                        children: "*"
860                                                    }, void 0, false, {
861                                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
862                                                        lineNumber: 1034,
863                                                        columnNumber: 27
864                                                    }, this)
865                                                ]
866                                            }, void 0, true, {
867                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
868                                                lineNumber: 1025,
869                                                columnNumber: 23
870                                            }, this),
871                                            errors[field.name] && /*#__PURE__*/ _jsxDEV("p", {
872                                                style: {
873                                                    color: "red",
874                                                    margin: 0
875                                                },
876                                                children: errors[field.name]
877                                            }, void 0, false, {
878                                                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
879                                                lineNumber: 1039,
880                                                columnNumber: 25
881                                            }, this)
882                                        ]
883                                    }, field.name, true, {
884                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
885                                        lineNumber: 984,
886                                        columnNumber: 21
887                                    }, this)),
888                                /*#__PURE__*/ _jsxDEV("div", {
889                                    style: {
890                                        flex: "1 0 30%",
891                                        minWidth: "200px"
892                                    },
893                                    className: `input-container country ${selectedCountry ? "focused" : ""}`,
894                                    children: [
895                                        /*#__PURE__*/ _jsxDEV("select", {
896                                            name: "country",
897                                            value: selectedCountry,
898                                            onChange: handleCountryChange,
899                                            onFocus: (e)=>{
900                                                setIsCountryFocused(true);
901                                                e.currentTarget.parentElement?.classList.add("focused");
902                                            },
903                                            onBlur: (e)=>{
904                                                setIsCountryFocused(false);
905                                                if (!e.currentTarget.value) {
906                                                    e.currentTarget.parentElement?.classList.remove("focused");
907                                                }
908                                            },
909                                            children: [
910                                                /*#__PURE__*/ _jsxDEV("option", {
911                                                    value: "",
912                                                    style: {
913                                                        display: "none"
914                                                    }
915                                                }, void 0, false, {
916                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
917                                                    lineNumber: 1069,
918                                                    columnNumber: 21
919                                                }, this),
920                                                isCountryFocused && /*#__PURE__*/ _jsxDEV("option", {
921                                                    value: "",
922                                                    disabled
922: true,
923                                                    children: "Select Country"
924                                                }, void 0, false, {
925                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
926                                                    lineNumber: 1071,
927                                                    columnNumber: 23
928                                                }, this),
929                                                countries.map((country)=>/*#__PURE__*/ _jsxDEV("option", {
930                                                        value: country.value,
931                                                        children: country.label
932                                                    }, country.value, false, {
933                                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
934                                                        lineNumber: 1076,
935                                                        columnNumber: 23
936                                                    }, this))
937                                            ]
938                                        }, void 0, true, {
939                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
940                                            lineNumber: 1052,
941                                            columnNumber: 19
942                                        }, this),
943                                        /*#__PURE__*/ _jsxDEV("label", {
944                                            className: "floating-label-dd",
945                                            children: [
946                                                "Select Country",
947                                                /*#__PURE__*/ _jsxDEV("span", {
948                                                    style: {
949                                                        color: "red"
950                                                    },
951                                                    children: "*"
952                                                }, void 0, false, {
953                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
954                                                    lineNumber: 1082,
955                                                    columnNumber: 35
956                                                }, this)
957                                            ]
958                                        }, void 0, true, {
959                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
960                                            lineNumber: 1081,
961                                            columnNumber: 19
962                                        }, this),
963                                        errors.country && /*#__PURE__*/ _jsxDEV("p", {
964                                            style: {
965                                                color: "red",
966                                                margin: 0
967                                            },
968                                            children: errors.country
969                                        }, void 0, false, {
970                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
971                                            lineNumber: 1085,
972                                            columnNumber: 21
973                                        }, this)
974                                    ]
975                                }, void 0, true, {
976                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
977                                    lineNumber: 1046,
978                                    columnNumber: 17
979                                }, this),
980                                /*#__PURE__*/ _jsxDEV("div", {
981                                    style: {
982                                        flex: "1 0 30%",
983                                        minWidth: "200px"
984                                    },
985                                    className: `input-container ${selectedState ? "focused" : ""}`,
986                                    children: [
987                                        /*#__PURE__*/ _jsxDEV("select", {
988                                            name: "state",
989                                            value: selectedState,
990                                            onChange: handleStateChange,
991                                            onFocus: (e)=>{
992                                                setIsStateFocused(true);
993                                                e.currentTarget.parentElement?.classList.add("focused");
994                                            },
995                                            onBlur: (e)=>{
996                                                setIsStateFocused(false);
997                                                if (!e.currentTarget.value) {
998                                                    e.currentTarget.parentElement?.classList.remove("focused");
999                                                }
1000                                            },
1001                                            children: [
1002                                                /*#__PURE__*/ _jsxDEV("option", {
1003                                                    value: "",
1004                                                    style: {
1005                                                        display: "none"
1006                                                    }
1007                                                }, void 0, false, {
1008                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1009                                                    lineNumber: 1113,
1010                                                    columnNumber: 21
1011                                                }, this),
1012                                                isStateFocused && /*#__PURE__*/ _jsxDEV("option", {
1013                                                    value: "",
1014                                                    disabled: true,
1015                                                    children: "Select State"
1016                                                }, void 0, false, {
1017                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1018                                                    lineNumber: 1115,
1019                                                    columnNumber: 23
1020                                                }, this),
1021                                                states.map((state)=>/*#__PURE__*/ _jsxDEV("option", {
1022                                                        value: state.value,
1023                                                        children: state.label
1024                                                    }, state.value, false, {
1025                                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1026                                                        lineNumber: 1120,
1027                                                        columnNumber: 23
1028                                                    }, this))
1029                                            ]
1030                                        }, void 0, true, {
1031                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1032                                            lineNumber: 1096,
1033                                            columnNumber: 19
1034                                        }, this),
1035                                        /*#__PURE__*/ _jsxDEV("label", {
1036                                            className: "floating-label-dd",
1037                                            children: [
1038                                                "Select State",
1039                                                /*#__PURE__*/ _jsxDEV("span", {
1040                                                    style: {
1041                                                        color: "red"
1042                                                    },
1043                                                    children: "*"
1044                                                }, void 0, false, {
1045                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1046                                                    lineNumber: 1126,
1047                                                    columnNumber: 33
1048                                                }, this)
1049                                            ]
1050                                        }, void 0, true, {
1051                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1052                                            lineNumber: 1125,
1053                                            columnNumber: 19
1054                                        }, this),
1055                                        errors.state && /*#__PURE__*/ _jsxDEV("p", {
1056                                            style: {
1057                                                color: "red",
1058                                                margin: 0
1059                                            },
1060                                            children: errors.state
1061                                        }, void 0, false, {
1062                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1063                                            lineNumber: 1129,
1064                                            columnNumber: 21
1065                                        }, this)
1066                                    ]
1067                                }, void 0, true, {
1068                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1069                                    lineNumber: 1090,
1070                                    columnNumber: 17
1071                                }, this),
1072                                /*#__PURE__*/ _jsxDEV("div", {
1073                                    style: {
1074                                        flex: "1 0 30%",
1075                                        minWidth: "200px"
1076                                    },
1077                                    className: `input-container ${selectedCity ? "focused" : ""}`,
1078                                    children: [
1079                                        /*#__PURE__*/ _jsxDEV("select", {
1080                                            name: "city",
1081                                            value: selectedCity,
1082                                            onChange: handleCityChange,
1083                                            onFocus: (e)=>{
1084                                                setIsCityFocused(true);
1085                                                e.currentTarget.parentElement?.classList.add("focused");
1086                                            },
1087                                            onBlur: (e)=>{
1088                                                setIsCityFocused(false);
1089                                                if (!e.currentTarget.value) {
1090                                                    e.currentTarget.parentElement?.classList.remove("focused");
1091                                                }
1092                                            },
1093                                            children: [
1094                                                /*#__PURE__*/ _jsxDEV("option", {
1095                                                    value: "",
1096                                                    style: {
1097                                                        display: "none"
1098                                                    }
1099                                                }, void 0, false, {
1100                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1101                                                    lineNumber: 1155,
1102                                                    columnNumber: 21
1103                                                }, this),
1104                                                isCityFocused && /*#__PURE__*/ _jsxDEV("option", {
1105                                                    value: "",
1106                                                    disabled: true,
1107                                                    children: "Select City"
1108                                                }, void 0, false, {
1109                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1110                                                    lineNumber: 1157,
1111                                                    columnNumber: 23
1112                                                }, this),
1113                                                cities.map((city)=>/*#__PURE__*/ _jsxDEV("option", {
1114                                                        value: city.value,
1115                                                        children: city.label
1116                                                    }, city.value, false, {
1117                                                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1118                                                        lineNumber: 1162,
1119                                                        columnNumber: 23
1120                                                    }, this))
1121                                            ]
1122                                        }, void 0, true, {
1123                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1124                                            lineNumber: 1138,
1125                                            columnNumber: 19
1126                                        }, this),
1127                                        /*#__PURE__*/ _jsxDEV("label", {
1128                                            className: "floating-label-dd",
1129                                            children: [
1130                                                "Select City",
1131                                                /*#__PURE__*/ _jsxDEV("span", {
1132                                                    style: {
1133                                                        color: "red"
1134                                                    },
1135                                                    children: "*"
1136                                                }, void 0, false, {
1137                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1138                                                    lineNumber: 1168,
1139                                                    columnNumber: 32
1140                                                }, this)
1141                                            ]
1142                                        }, void 0, true, {
1143                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1144                                            lineNumber: 1167,
1145                                            columnNumber: 19
1146                                        }, this),
1147                                        errors.city && /*#__PURE__*/ _jsxDEV("p", {
1148                                            style: {
1149                                                color: "red",
1150                                                margin: 0
1151                                            },
1152                                            children: errors.city
1153                                        }, void 0, false, {
1154                              
1154              fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1155                                            lineNumber: 1171,
1156                                            columnNumber: 21
1157                                        }, this)
1158                                    ]
1159                                }, void 0, true, {
1160                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1161                                    lineNumber: 1134,
1162                                    columnNumber: 17
1163                                }, this),
1164                                /*#__PURE__*/ _jsxDEV("div", {
1165                                    style: {
1166                                        flex: "1 0 30%",
1167                                        minWidth: "200px"
1168                                    },
1169                                    className: `input-container ${formData.zipCode ? "filled" : ""}`,
1170                                    children: [
1171                                        /*#__PURE__*/ _jsxDEV("input", {
1172                                            type: "text",
1173                                            name: "zipCode",
1174                                            value: formData.zipCode,
1175                                            onChange: handleChange,
1176                                            onFocus: (e)=>e.currentTarget.parentElement?.classList.add("focused"),
1177                                            onBlur: (e)=>{
1178                                                if (!e.currentTarget.value) {
1179                                                    e.currentTarget.parentElement?.classList.remove("focused");
1180                                                }
1181                                            },
1182                                            className: "floating-input",
1183                                            style: {
1184                                                width: "100%",
1185                                                padding: "12px 8px 4px 8px"
1186                                            },
1187                                            maxLength: 15
1188                                        }, void 0, false, {
1189                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1190                                            lineNumber: 1182,
1191                                            columnNumber: 19
1192                                        }, this),
1193                                        /*#__PURE__*/ _jsxDEV("label", {
1194                                            className: "floating-label",
1195                                            children: [
1196                                                "Zip Code",
1197                                                /*#__PURE__*/ _jsxDEV("span", {
1198                                                    style: {
1199                                                        color: "red"
1200                                                    },
1201                                                    children: "*"
1202                                                }, void 0, false, {
1203                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1204                                                    lineNumber: 1202,
1205                                                    columnNumber: 29
1206                                                }, this)
1207                                            ]
1208                                        }, void 0, true, {
1209                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1210                                            lineNumber: 1201,
1211                                            columnNumber: 19
1212                                        }, this),
1213                                        errors.zipCode && /*#__PURE__*/ _jsxDEV("p", {
1214                                            style: {
1215                                                color: "red",
1216                                                margin: 0
1217                                            },
1218                                            children: errors.zipCode
1219                                        }, void 0, false, {
1220                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1221                                            lineNumber: 1205,
1222                                            columnNumber: 21
1223                                        }, this)
1224                                    ]
1225                                }, void 0, true, {
1226                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1227                                    lineNumber: 1176,
1228                                    columnNumber: 17
1229                                }, this)
1230                            ]
1231                        }, void 0, true, {
1232                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1233                            lineNumber: 979,
1234                            columnNumber: 15
1235                        }, this)
1236                    }, void 0, false, {
1237                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1238                        lineNumber: 978,
1239                        columnNumber: 13
1240                    }, this),
1241                    step === 1 && (OpenBill || OpenBillForm) && /*#__PURE__*/ _jsxDEV("div", {
1242                        className: "cus_btns_set my-3",
1243                        children: /*#__PURE__*/ _jsxDEV("button", {
1244                            onClick: handleNext,
1245                            className: "cus_continue_btn_s",
1246                            children: OpenBillForm ? 'Save And Continue' : 'Continue'
1247                        }, void 0, false, {
1248                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1249                            lineNumber: 1214,
1250                            columnNumber: 17
1251                        }, this)
1252                    }, void 0, false, {
1253                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1254                        lineNumber: 1213,
1255                        columnNumber: 13
1256                    }, this),
1257                    step === 2 && /*#__PURE__*/ _jsxDEV(_Fragment, {
1258                        children: /*#__PURE__*/ _jsxDEV("div", {
1259                            children: [
1260                                choosedPlan && /*#__PURE__*/ _jsxDEV("div", {
1261                                    className: "cus_m_yearly_labels",
1262                                    children: [
1263                                        /*#__PURE__*/ _jsxDEV("label", {
1264                                            children: [
1265                                                /*#__PURE__*/ _jsxDEV("input", {
1266                                                    type: "radio",
1267                                                    name: "plan",
1268                                                    value: "monthly",
1269                                                    checked: seletedPlan_ === "monthly",
1270                                                    onChange: ()=>handlePlanChange(monthlyPlan?.priceId, "monthly")
1271                                                }, void 0, false, {
1272                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1273                                                    lineNumber: 1226,
1274                                                    columnNumber: 23
1275                                                }, this),
1276                                                " ",
1277                                                "Monthly"
1278                                            ]
1279                                        }, void 0, true, {
1280                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1281                                            lineNumber: 1225,
1282                                            columnNumber: 21
1283                                        }, this),
1284                                        /*#__PURE__*/ _jsxDEV("br", {}, void 0, false, {
1285                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1286                                            lineNumber: 1237,
1287                                            columnNumber: 21
1288                                        }, this),
1289                                        /*#__PURE__*/ _jsxDEV("label", {
1290                                            children: [
1291                                                /*#__PURE__*/ _jsxDEV("input", {
1292                                                    type: "radio",
1293                                                    name: "plan",
1294                                                    value: "yearly",
1295                                                    checked: seletedPlan_ === "yearly",
1296                                                    onChange: ()=>handlePlanChange(yearlyPlan?.priceId, "yearly")
1297                                                }, void 0, false, {
1298                                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1299                                                    lineNumber: 1239,
1300                                                    columnNumber: 23
1301                                                }, this),
1302                                                " ",
1303                                                "Yearly"
1304                                            ]
1305                                        }, void 0, true, {
1306                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1307                                            lineNumber: 1238,
1308                                            columnNumber: 21
1309                                        }, this)
1310                                    ]
1311                                }, void 0, true, {
1312                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1313                                    lineNumber: 1224,
1314                                    columnNumber: 19
1315                                }, this),
1316                                seletedPlan_ === "monthly" && /*#__PURE__*/ _jsxDEV(PaymentGateWayMonth, {
1317                                    userCartDetails: UserCartDetails
1318                                }, void 0, false, {
1319                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1320                                    lineNumber: 1254,
1321                                    columnNumber: 19
1322                                }, this),
1323                                seletedPlan_ === "yearly" && /*#__PURE__*/ _jsxDEV(PaymentGateWayYear, {
1324                                    userCartDetails: UserCartDetails
1325                                }, void 0, false, {
1326                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1327                                    lineNumber: 1257,
1328                                    columnNumber: 19
1329                                }, this),
1330                                /*#__PURE__*/ _jsxDEV("div", {
1331                                    className: "cus_btns_set",
1332                                    children: [
1333                                        /*#__PURE__*/ _jsxDEV("button", {
1334                                            onClick: handleBack,
1335                                            className: "back_btn_pg",
1336                                            children: "Back"
1337                                        }, void 0, false, {
1338                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1339                                            lineNumber: 1261,
1340                                            columnNumber: 19
1341                                        }, this),
1342                                        /*#__PURE__*/ _jsxDEV("button", {
1343                                            onClick: handlePayment,
1344                                            style: {
1345                                                marginLeft: 10
1346                                            },
1347                                            className: "cus_continue_btn_s",
1348                                            children: "Continue"
1349                                        }, void 0, false, {
1350                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1351                                            lineNumber: 1264,
1352                                            columnNumber: 19
1353                                        }, this)
1354                                    ]
1355                                }, void 0, true, {
1356                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1357                                    lineNumber: 1260,
1358                                    columnNumber: 17
1359                                }, this)
1360                            ]
1361                        }, void 0, true, {
1362                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1363                            lineNumber: 1222,
1364                            columnNumber: 15
1365                        }, this)
1366                    }, void 0, false),
1367                    step === 3 && /*#__PURE__*/ _jsxDEV("div", {
1368                        children: /*#__PURE__*/ _jsxDEV("div", {
1369                            className: "card cus_success_card",
1370                            children: [
1371                                /*#__PURE__*/ _jsxDEV("p", {
1372                                    className: "py-success-head",
1373                                    children: "Payment Successful"
1374                                }, void 0, false, {
1375                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1376                                    lineNumber: 1278,
1377                                    columnNumber: 17
1378                                }, this),
1379                                /*#__PURE__*/ _jsxDEV("img", {
1380                                    alt: "cookie",
1381                                    src: toAbsoluteUrl("media/misc/paymentsuccess.png"),
1382                                    className: "ssf-msg-to-jim-tick_c"
1383                                }, void 0, false, {
1384                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1385                                    lineNumber: 1279,
1386                                    columnNumber: 17
1387                                }, this),
1388                                /*#__PURE__*/ _jsxDEV("div", {
1389                                    className: "cus_msg_pc_info",
1390                                    children: [
1391                                        /*#__PURE__*/ _jsxDEV("div", {
1392                                            children: "Your Six Sigma Funnels"
1393                                        }, void 0, false, {
1394                                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1395                                            lineNumber: 1294,
1396                                            columnNumber: 17
1397                                        }, this),
1398                                        /*#__PURE__*/ _jsxDEV("div", {
1399                                            children: "Subscription is Now Active."
1400                                        }, void 0, false, {
1401                                            fileName: "/data/sixsig
1401ma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1402                                            lineNumber: 1295,
1403                                            columnNumber: 17
1404                                        }, this)
1405                                    ]
1406                                }, void 0, true, {
1407                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1408                                    lineNumber: 1293,
1409                                    columnNumber: 17
1410                                }, this),
1411                                /*#__PURE__*/ _jsxDEV("a", {
1412                                    href: portalUrl + `/${CUREENT_COMPANY_NAME}/checklist`,
1413                                    className: "view_dashboard_btn",
1414                                    children: "Start Connecting"
1415                                }, void 0, false, {
1416                                    fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1417                                    lineNumber: 1300,
1418                                    columnNumber: 17
1419                                }, this)
1420                            ]
1421                        }, void 0, true, {
1422                            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1423                            lineNumber: 1277,
1424                            columnNumber: 15
1425                        }, this)
1426                    }, void 0, false, {
1427                        fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1428                        lineNumber: 1276,
1429                        columnNumber: 13
1430                    }, this)
1431                ]
1432            }, void 0, true, {
1433                fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1434                lineNumber: 856,
1435                columnNumber: 9
1436            }, this)
1437        }, void 0, false, {
1438            fileName: "/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx",
1439            lineNumber: 855,
1440            columnNumber: 7
1441        }, this)
1442    }, void 0, false);
1443};
1444_s(PaymentGateway, "mpGtqy3EBqTQEHlwHMEWKMJWzYY=", false, function() {
1445    return [
1446        useSearchParams,
1447        useAuth,
1448        useLocation
1449    ];
1450});
1451_c = PaymentGateway;
1452export default PaymentGateway;
1453var _c;
1454$RefreshReg$(_c, "PaymentGateway");
1455
1456
1457window.$RefreshReg$ = prevRefreshReg;
1458window.$RefreshSig$ = prevRefreshSig;
1459
1460RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
1461  RefreshRuntime.registerExportsForReactRefresh("/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx", currentExports);
1462  import.meta.hot.accept((nextExports) => {
1463    if (!nextExports) return;
1464    const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/data/sixsigma/six-sigma-ui/src/app/pages/dashboard/PaymentGateway.tsx", currentExports, nextExports);
1465    if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
1466  });
1467});
1468
1469//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlBheW1lbnRHYXRld2F5LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlTG9jYXRpb24sIHVzZVNlYXJjaFBhcmFtcyB9IGZyb20gXCJyZWFjdC1yb3V0ZXItZG9tXCI7XG5pbXBvcnQgeyBDb250ZW50IH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9sYXlvdXQvY29tcG9uZW50cy9Db250ZW50XCI7XG5pbXBvcnQgUGF5bWVudEdhdGVXYXlNb250aCBmcm9tIFwiLi9jb21wb25lbnRzL1BheW1lbnRHYXRlV2F5TW9udGhcIjtcbmltcG9ydCBQYXltZW50R2F0ZVdheVllYXIgZnJvbSBcIi4vY29tcG9uZW50cy9QYXltZW50R2F0ZVdheVllYXJcIjtcbmltcG9ydCBcIi4vY3NzL3BheW1lbnRHYXRld2F5LmNzc1wiO1xuaW1wb3J0IHsgbG9jYXRpb25EYXRhIH0gZnJvbSBcIi4vbG9jYXRpb25EYXRhXCI7XG5pbXBvcnQgeyB0b0Fic29sdXRlVXJsIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9oZWxwZXJzXCI7XG5pbXBvcnQge1xuICBDUkVBVEVfU1VCU0NSSVBUSU9OLFxuICBDVVJFRU5UX0NPTVBBTllfTkFNRSxcbiAgR0VUX0FMTF9TVUJTQ1JJUFRJT05QTEFOUyxcbiAgR0VUX0FMTF9VU0VSQUREUkVTUyxcbiAgR0VUX09SREVSLFxuICBQT1NUX0NSRUFURV9DSEVDS09VVF9TRVNTSU9OLFxuICBQT1NUX0NSRUFURV9VU0VSX0FERFJFU1MsXG4gIFJFR0VYX05PX05VTUJFUl9PUl9TUEVDSUFMLFxuICBSRUdFWF9OT19TUEFDRVMsXG4gIFJFR0VYX0VNQUlMXG59IGZyb20gXCIuLi8uLi9Db25zdGFudHNcIjtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7
1469IG51bWJlciB9IGZyb20gXCJ5dXBcIjtcbmltcG9ydCB7XG4gIGRpc2FibGVQYXltZW50U3BsYXNoU2NyZWVuLFxuICBkaXNhYmxlU3BsYXNoU2NyZWVuLFxuICBlbmFibGVQYXltZW50U3BsYXNoU2NyZWVuLFxuICBlbmFibGVTcGxhc2hTY3JlZW4sXG59IGZyb20gXCIuLi9jb21tb24vQ29tbW9uVXRpbGl0aWVzXCI7XG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSBcIi4uLy4uL21vZHVsZXMvYXV0aFwiO1xuaW1wb3J0IHsganNvbiB9IGZyb20gXCJzdHJlYW0vY29uc3VtZXJzXCI7XG5pbXBvcnQgU3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcblxudHlwZSBGb3JtRGF0YVR5cGUgPSB7XG4gIGZpcnN0TmFtZTogc3RyaW5nO1xuICBsYXN0TmFtZTogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBjb3VudHJ5OiBzdHJpbmc7XG4gIHN0YXRlOiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgemlwQ29kZTogc3RyaW5nO1xuICBhZGRyZXNzTGluZTE6IHN0cmluZztcbiAgYWRkcmVzc0xpbmUyOiBzdHJpbmc7XG59O1xuXG5pbnRlcmZhY2UgU3RyaXBlUmVzcG9uc2Uge1xuICBzdGF0dXM6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHNlc3Npb25Vcmw/OiBzdHJpbmc7XG4gIHN1YnNjcmlwdGlvbklkPzogc3RyaW5nO1xufVxuXG4vL09yZGVyXG5pbnRlcmZhY2UgVXNlckNhcnREZXRhaWxzIHtcbiAgb3JkZXJJZDogbnVtYmVyO1xuICB1c2VySWQ6IG51bWJlcjtcbiAgaXRlbUlkOiBudW1iZXI7XG4gIHBsYW5JZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHBsYW5UeXBlOiBzdHJpbmc7XG4gIGJpbGxpbmdQZXJpb2Q6IHN0cmluZztcbiAgYmlsbGluZ0ludGVydmFsOiBudW1iZXI7XG4gIHJlbmV3YWxQZXJpb2Q6IG51bWJlcjtcbiAgcmVuZXdhbFVuaXQ6IHN0cmluZztcbiAgYmFzZVByaWNlOiBudW1iZXI7XG4gIHNlbGxQcmljZTogbnVtYmVyO1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIGZlYXR1cmVzOiBzdHJpbmc7XG59XG5cbi8vcGF5bWVudCBTdGF0ZSBSZWxhdGVkIGRhdGEuXG50eXBlIFBheW1lbnRTdGF0ZSA9IHtcbiAgb3JkZXJJZDogc3RyaW5nO1xuICBwcmljZUlkOiBzdHJpbmc7XG4gIHBsYW46IHN0cmluZztcbiAgcGxhbl90eXBlOiBzdHJpbmc7XG59O1xuXG4vL3N1YnNjcmlwdGlvblxuaW50ZXJmYWNlIFN1YnNjcmlwdGlvblBsYW5EZXRhaWxzIHtcbiAgaWQ6IG51bWJlcjtcbiAgdXVJZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGJpbGxpbmdJbnRlcnZhbDogbnVtYmVyO1xuICBiYXNlUHJpY2U6IHN0cmluZztcbiAgc2VsbFByaWNlOiBudW1iZXI7XG4gIGZlYXR1cmVzOiBzdHJpbmc7XG4gIHByb2R1Y3RJZDogc3RyaW5nO1xuICBwcmljZUlkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSB1c2VyQWRkcmVzc2RhdGEge1xuICBhZGRyZXNzTGluZTE6IHN0cmluZztcbiAgYWRkcmVzc0xpbmUyOiBzdHJpbmc7XG4gIGNvdW50cnk6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbiAgY29udGFjdE5hbWU6IHN0cmluZztcbiAgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBhZGRyZXNzSWQ6IHN0cmluZztcbiAgc3RhdGU6c3RyaW5nO1xuICBjaXR5OnN0cmluZztcbn1cbmNvbnN0IGluaXRpYWxGb3JtRGF0YTogRm9ybURhdGFUeXBlID0ge1xuICBmaXJzdE5hbWU6IFwiXCIsXG4gIGxhc3ROYW1lOiBcIlwiLFxuICBlbWFpbDogXCJcIixcbiAgY291bnRyeTogXCJcIixcbiAgc3RhdGU6IFwiXCIsXG4gIGNpdHk6IFwiXCIsXG4gIHppcENvZGU6IFwiXCIsXG4gIGFkZHJlc3NMaW5lMTogXCJcIixcbiAgYWRkcmVzc0xpbmUyOiBcIlwiLFxufTtcblxudHlwZSBFcnJvclR5cGUgPSBQYXJ0aWFsPFJlY29yZDxrZXlvZiBGb3JtRGF0YVR5cGUsIHN0cmluZz4+O1xuXG5jb25zdCBQYXltZW50R2F0ZXdheTogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IHVzZVN0YXRlPG51bWJlcj4oMyk7XG4gIGNvbnN0IFthdmFpbGFibGVTdGF0ZXMsIHNldEF2YWlsYWJsZVN0YXRlc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oW10pO1xuICBjb25zdCBbYXZhaWxhYmxlQ2l0aWVzLCBzZXRBdmFpbGFibGVDaXRpZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW3NhdmVkRW1haWwsIHNldFNhdmVkRW1haWxdID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcbiAgY29uc3QgW2Vycm9ycywgc2V0RXJyb3JzXSA9IHVzZVN0YXRlPEVycm9yVHlwZT4oe30pO1xuICBjb25zdCBbdmlzaXRlZFN0ZXBzLCBzZXRWaXNpdGVkU3RlcHNdID0gdXNlU3RhdGU8bnVtYmVyW10+KFsxXSk7XG4gIGNvbnN0IFtzZWFyY2hQYXJhbXNdID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IFtjaG9vc2VkUGxhbiwgc2V0Q2hvb3NlZFBsYW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2VsZXRlZFBsYW5fLCBzZXRTZWxldGVkUGxhbl9dID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcbiAgY29uc3QgeyBjdXJyZW50VXNlciwgc2V0Q3VycmVudFVzZXIgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgW29yZGVySWQsIHNldE9yZGVySWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtVc2VyQ2FydERldGFpbHMsIHNldFVzZXJDYXJ0RGV0YWlsc10gPVxuICAgIHVzZVN0YXRlPFVzZXJDYXJ0RGV0YWlscyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcHJpY2VJZCwgc2V0UHJpY2VJZF0gPSB1c2VTdGF0ZTxTdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3N0YXR1cywgc2V0U3RhdHVzXSA9IHVzZVN0YXRlPFN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IFtmbGFnLHNldEZsYWddPXVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3Qgc3RhdGUgPSBsb2NhdGlvbi5zdGF0ZSBhcyBQYXltZW50U3RhdGU7XG4gIGNvbnN0IFtjb3Vwb25Db2RlLHNldENvdXBvbkNvZGVdPXVzZVN0YXRlPHN0cmluZ3xudWxsPihudWxsKTtcblxuICBsZXQgcG9ydGFsVXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcblxuICBjb25zdCBbc3Vic2NyaXB0aW9uUGxhbkRldGFpbHMsIHNldFN1YnNjcmlwdGlvblBsYW5EZXRhaWxzXSA9IHVzZVN0YXRlPFxuICAgIFN1YnNjcmlwdGlvblBsYW5EZXRhaWxzW11cbiAgPihbXSk7XG4gIGNvbnN0IFttb250aGx5UGxhbiwgc2V0TW9udGhseVBsYW5dID1cbiAgICB1c2VTdGF0ZTxTdWJzY3JpcHRpb25QbGFuRGV0YWlscyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbeWVhcmx5UGxhbiwgc2V0WWVhcmx5UGxhbl0gPSB1c2VTdGF0ZTxTdWJzY3JpcHRpb25QbGFuRGV0YWlscyB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcblxuXG4gIGNvbnN0IFtjb3VudHJpZXMsIHNldENvdW50cmllc10gPSB1c2VTdGF0ZTxcbiAgICB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdXG4gID4oW10pO1xuICBjb25zdCBbc3RhdGVzLCBzZXRTdGF0ZXNdID0gdXNlU3RhdGU8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXT4oW10pO1xuICBjb25zdCBbY2l0aWVzLCBzZXR
1469DaXRpZXNdID0gdXNlU3RhdGU8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXT4oW10pO1xuICBjb25zdCBbc2VsZWN0ZWRDb3VudHJ5LCBzZXRTZWxlY3RlZENvdW50cnldID0gdXNlU3RhdGU8YW55PihudWxsKTtcbiAgY29uc3QgW09wZW5CaWxsLCBzZXRPcGVuQmlsbF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgW3NlbGVjdGVkU3RhdGUsIHNldFNlbGVjdGVkU3RhdGVdID0gdXNlU3RhdGU8YW55PihudWxsKTtcbiAgY29uc3QgW3NlbGVjdGVkQ2l0eSwgc2V0U2VsZWN0ZWRDaXR5XSA9IHVzZVN0YXRlPGFueT4obnVsbCk7XG5cbiAgY29uc3QgW2lzQ291bnRyeUZvY3VzZWQsIHNldElzQ291bnRyeUZvY3VzZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbaXNTdGF0ZUZvY3VzZWQsIHNldElzU3RhdGVGb2N1c2VkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2lzQ2l0eUZvY3VzZWQsIHNldElzQ2l0eUZvY3VzZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0IFt1c2VyQWRkcmVzcywgc2V0VXNlckFkZHJlc3NdID0gdXNlU3RhdGU8dXNlckFkZHJlc3NkYXRhW10+KFtdKTtcbiAgY29uc3QgW3NlbGVjdGVkQWRkcmVzc0luZGV4LCBzZXRTZWxlY3RlZEFkZHJlc3NJbmRleF0gPSB1c2VTdGF0ZTxcbiAgICBzdHJpbmcgfCBudWxsXG4gID4oXCJcIik7XG4gIGNvbnN0IFtsYXN0U2VsZWN0ZWRBZGRyZXNzSW5kZXgsIHNldExhc3RTZWxlY3RlZEFkZHJlc3NJbmRleF0gPSB1c2VTdGF0ZTxcbiAgICBzdHJpbmcgfCBudWxsXG4gID4oXCJcIik7XG4gICBjb25zdCBbYmFja0J0bkZsYWcsIHNldEJhY2tCdG5GbGFnXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW09wZW5CaWxsRm9ybSwgc2V0T3BlbkJpbGxGb3JtXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gXG5cbiAgY29uc3QgW29wZW5mb3JtLCBzZXRvcGVuZm9ybV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5jb25zdCBbZm9ybURhdGEsIHNldEZvcm1EYXRhXSA9IHVzZVN0YXRlPEZvcm1EYXRhVHlwZT4oaW5pdGlhbEZvcm1EYXRhKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpO1xuICAgIGNvbnN0IHNlbGVjdGVkUGxhbiA9IHF1ZXJ5UGFyYW1zLmdldChcInBsYW5cIik7XG4gICAgY29uc3QgcGxhblR5cGUgPSBxdWVyeVBhcmFtcy5nZXQoXCJwbGFuVHlwZVwiKTtcbiAgICBzZXRPcmRlcklkKHF1ZXJ5UGFyYW1zLmdldChcIm9yZGVySWRcIikpO1xuICAgIHNldFByaWNlSWQocXVlcnlQYXJhbXMuZ2V0KFwicHJpY2VJZFwiKSk7XG4gICAgc2V0U2VsZXRlZFBsYW5fKHNlbGVjdGVkUGxhbiA/IHNlbGVjdGVkUGxhbiA6IFwiXCIpO1xuXG4gICAgc2V0U3RhdHVzKHF1ZXJ5UGFyYW1zLmdldChcInN0YXR1c1wiKSk7XG4gICAgaWYgKHBsYW5UeXBlID09PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgIHNldENob29zZWRQbGFuKHRydWUpO1xuICAgIH1cblxuICAgIC8vY29sbGVjdGluZyB0aGUgdHlwZXMgb2Ygc3Vic2NyaXB0aW9uIHBsYW5zXG4gICAgZ2V0U3Vic2NyaXB0aW9uUGxhbkRldGFpbHMoKTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJDb2xsZWN0aW5nIHRoZSB5ZWFybHkgJiBNb250aGx5IHBsYW4gb25seVwiKTtcbiAgICBnZXRQbGFuRGV0YWlsc0J5U2VsbFByaWNlKHN1YnNjcmlwdGlvblBsYW5EZXRhaWxzKTtcbiAgfSwgW3N1YnNjcmlwdGlvblBsYW5EZXRhaWxzXSk7XG5cbiAgLy8gdXNlRWZmZWN0KCgpID0+IHtcbiAgLy8gLy9BZnRlciBjaGVja291dCBwYWdlLlxuICAvLyBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKTtcbiAgLy8gc2V0U3RhdHVzKHF1ZXJ5UGFyYW1zLmdldChcInN0YXR1c1wiKSk7XG5cbiAgLy8gfSwgW10pO1xuXG4gIC8vIHVzZUVmZmVjdCgoKSA9PiB7XG4gIC8vICAgY29uc29sZS5sb2coXCJSZWNlaXZlZCBzdGF0ZSBpbiBQYXltZW50R2F0ZXdheTogXCIsIHN0YXRlKTtcbiAgLy8gICBjb25zb2xlLmxvZyhzdGF0ZT8ub3JkZXJJZCwgc3RhdGU/LnByaWNlSWQsIHN0YXRlPy5wbGFuKTtcblxuICAvLyAgIGlmIChzdGF0ZSkge1xuICAvLyAgICAgc2V0U2VsZXRlZFBsYW5fKHN0YXRlPy5wbGFuKTtcbiAgLy8gICAgIHNldE9yZGVySWQoc3RhdGU/Lm9yZGVySWQpO1xuICAvLyAgICAgc2V0UHJpY2VJZChzdGF0ZT8ucHJpY2VJZCk7XG4gIC8vICAgfVxuXG4gIC8vICAgaWYoc3RhdGU/LnBsYW5fdHlwZT09PVwibXVsdGlwbGVcIil7XG4gIC8vICAgICBzZXRDaG9vc2VkUGxhbih0cnVlKTtcbiAgLy8gICB9XG5cbiAgLy8gfSwgW3N0YXRlXSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0U3Vic2NyaXB0aW9uUGxhbkRldGFpbHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICBHRVRfQUxMX1NVQlNDUklQVElPTlBMQU5TKENVUkVFTlRfQ09NUEFOWV9OQU1FKVxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFwicmVzcG5zZSBzdGF0dXMgY29kZSAuLlwiICsgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgIHNldFN1YnNjcmlwdGlvblBsYW5EZXRhaWxzKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciAuLi5cIiArIGUpO1xuICAgIH1cbiAgfVxuICAgLy8gRmV0Y2ggY291bnRyaWVzIGZyb20gcmVzdGNvdW50cmllcy5jb20gQVBJXG4vLyAgIHVzZUVmZmVjdCgoKSA9PiB7XG4vLyAgIGNvbnN0IGZldGNoQ291bnRyaWVzID0gYXN5bmMgKCkgPT4ge1xuLy8gICAgIC8vIGVuYWJsZVNwbGFzaFNjcmVlbigpOyAvLyBTaG93IHNwbGFzaC9sb2FkaW5nIGluZGljYXRvclxuXG4vLyAgICAgdHJ5IHtcbi8vICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFwiaHR0cHM6Ly9jb3VudHJpZXNub3cuc3BhY2UvYXBpL3YwLjEvY291bnRyaWVzL3Bvc2l0aW9uc1wiKTtcbi8vICAgICAgICAgY29uc3QgY291bnRyeU9wdGlvbnMgPSByZXNwb25zZS5kYXRhLmRhdGEubWFwKChjb3VudHJ5OiBhbnkpID0+ICh7XG4vLyAgICAgICAgICAgbGFiZWw6IGNvdW50cnkubmFtZSxcbi8vICAgICAgICAgdmFsdWU6IGNvdW50cnkubmFtZSxcbi8vICAgICAgICAgfSkpO1xuLy8gICAgICAgICBzZXRDb3VudHJpZXMoY291bnRyeU9wdGlvbnMpO1xuLy8gICAgI
1469H0gY2F0Y2ggKGVycm9yKSB7XG4vLyAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgY291bnRyaWVzOlwiLCBlcnJvcik7XG4vLyAgICAgfSBmaW5hbGx5IHtcbi8vICAgICAgIC8vIGRpc2FibGVTcGxhc2hTY3JlZW4oKTsgLy8gSGlkZSBzcGxhc2gvbG9hZGluZyBpbmRpY2F0b3Jcbi8vICAgICB9XG4vLyAgIH07XG5cbi8vICAgZmV0Y2hDb3VudHJpZXMoKTtcbi8vIH0sIFtdKTtcblxuICAvL0ZpbHRlcmluZyB0aGUgeWVhcmx5ICYgbW9udGhseSBwbGFucyBvbmx5XG4gIGNvbnN0IGdldFBsYW5EZXRhaWxzQnlTZWxsUHJpY2UgPSAocGxhbnM6IFN1YnNjcmlwdGlvblBsYW5EZXRhaWxzW10pID0+IHtcbiAgICBjb25zdCBtYXRjaGVkTW9udGhseVBsYW4gPSBwbGFucy5maW5kKChwbGFuKSA9PlxuICAgICAgcGxhbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJvZmZlclwiKVxuICAgICk7XG5cbiAgICBpZiAobWF0Y2hlZE1vbnRobHlQbGFuKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk1vbnRobHkgcGxhbiBmb3VuZC4uLlwiKTtcbiAgICAgIHNldE1vbnRobHlQbGFuKG1hdGNoZWRNb250aGx5UGxhbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiTm8gTW9udGhseSBQbGFuIG1hdGNoZWQgdGhlIGdpdmVuIGNvbmRpdGlvbnMuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoZWRZZWFybHlQbGFuID0gcGxhbnMuZmluZCgocGxhbikgPT5cbiAgICAgIHBsYW4ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwieWVhcmx5XCIpXG4gICAgKTtcblxuICAgIGlmIChtYXRjaGVkWWVhcmx5UGxhbikge1xuICAgICAgY29uc29sZS5sb2coXCJZZWFybHkgcGxhbiBmb3VuZC4uLlwiKTtcbiAgICAgIHNldFllYXJseVBsYW4obWF0Y2hlZFllYXJseVBsYW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk5vIFllYXJseSBQbGFuIG1hdGNoZWQgdGhlIGdpdmVuIGNvbmRpdGlvbnMuXCIpO1xuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcmRlcklkKSB7XG4gICAgICBnZXRPcmRlcndpdGhQbGFuKHBhcnNlSW50KG9yZGVySWQpKTtcbiAgICB9XG4gIH0sIFtvcmRlcklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RhdHVzPy5pbmNsdWRlcyhcInN1Y2Nlc3NcIikpIHtcbiAgICAgIGNvbnN0IHNlc3Npb25PcmRlcklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcIm9yZGVySWRcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlN0YXR1cyByZWNlaXZlZC4uLlwiICsgc2Vzc2lvbk9yZGVySWQpO1xuICAgICAgaWYgKHNlc3Npb25PcmRlcklkKSB7XG4gICAgICAgIGdldE9yZGVyd2l0aFBsYW4ocGFyc2VJbnQoc2Vzc2lvbk9yZGVySWQpKTtcbiAgICAgICAgc2V0U3RlcCgzKTtcbiAgICAgICAvLyBjcmVhdGVTdWJzY3JpcHRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzdGF0dXNdKTtcblxuICAvL2NvbGxlY3QgdGhlIGN1cnJlbnQgT3JkZXIgZGV0YWlsc1xuICAvLyBhc3luYyBmdW5jdGlvbiBjcmVhdGVTdWJzY3JpcHRpb24oKSB7XG4gIC8vICAgY29uc29sZS5sb2coXCJjYWxsaW5nLi4uY3JlYXRlU3Vic2NyaXB0aW9uXCIpO1xuICAvLyAgIHRyeSB7XG4gIC8vICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoXG4gIC8vICAgICAgIENSRUFURV9TVUJTQ1JJUFRJT04oQ1VSRUVOVF9DT01QQU5ZX05BTUUpLFxuICAvLyAgICAgICB7XG4gIC8vICAgICAgICAgb3JkZXJJZDogc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcIm9yZGVySWRcIiksXG4gIC8vICAgICAgICAgc3RhdHVzOiBcIkFDVElWRVwiLFxuICAvLyAgICAgICAgIERpc2NvdW50UmF0ZTogMC4wLFxuICAvLyAgICAgICB9XG4gIC8vICAgICApO1xuICAvLyAgICAgY29uc29sZS5sb2coXCJyZXNwb25zZSAuLi4uXCIgKyByZXNwb25zZSk7XG4gIC8vICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDIwMCkge1xuICAvLyAgICAgfVxuICAvLyAgIH0gY2F0Y2ggKGUpIHtcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwiRXJyb3IuLi4uXCIgKyBlKTtcbiAgLy8gICB9IGZpbmFsbHkge1xuICAvLyAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcIm9yZGVySWRcIik7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgLy9jb2xsZWN0IHRoZSBjdXJyZW50IE9yZGVyIGRldGFpbHNcbiAgYXN5bmMgZnVuY3Rpb24gZ2V0T3JkZXJ3aXRoUGxhbihvcmRlcklkOiBudW1iZXIpIHtcbiAgICBjb25zb2xlLmxvZyhcImNhbGxpbmcuLi5nZXRPcmRlcndpdGhQbGFuXCIgKyBvcmRlcklkKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgICBHRVRfT1JERVIoQ1VSRUVOVF9DT01QQU5ZX05BTUUpICsgXCI/b3JkZXJJZD1cIiArIG9yZGVySWRcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZyhcInJlc3BvbnNlIC4uLi5cIiArIHJlc3BvbnNlKTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgIHNldFVzZXJDYXJ0RGV0YWlscyhyZXNwb25zZS5kYXRhKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkVycm9yLi4uLlwiICsgZSk7XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKFxuICAgIGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudD5cbiAgKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCB2YWx1ZSB9ID0gZS50YXJnZXQ7XG5cbiAgICAgaWYgKG5hbWUgPT09IFwiemlwQ29kZVwiICYmICEvXlxcZCokLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgc2V0RXJyb3JzKChwcmV2RXJyb3JzKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnByZXZFcnJvcnMsXG4gICAgICAgICAgICAgICAgemlwQ29kZTogXCJPbmx5IG51bWVyaWMgdmFsdWVzIGFyZSBhbGxvd2VkIGZvciBaaXAgQ29kZVwiLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBQcmV2ZW50IHVwZGF0aW5nIHRoZSBzdGF0ZSBpZiB0aGUgdmFsdWUgaXMgaW52YWxpZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGVycm9yIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZFxuICAgICAgICAgICAgc2V0RXJyb3JzKChwcmV2RXJyb3JzKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnByZXZFcnJvcnMsXG4gICAgICAgICAgICAgICAgemlwQ29kZTogXCJcIixcbiAgICAgICAgICAgI
1469H0pKTtcbiAgICAgICAgfVxuICAgIHNldEZvcm1EYXRhKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbbmFtZV06IHZhbHVlIH0pKTtcbiAgICBpZiAobmFtZSA9PT0gXCJwbGFuXCIpIHtcbiAgICAgIHNldFNlbGV0ZWRQbGFuXyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0RXJyb3JzKChwcmV2RXJyb3JzKSA9PiB7XG4gICAgY29uc3QgbmV3RXJyb3JzID0geyAuLi5wcmV2RXJyb3JzIH07XG4gICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lIGFzIGtleW9mIEZvcm1EYXRhVHlwZV07XG4gICAgcmV0dXJuIG5ld0Vycm9ycztcbiAgfSk7XG5cbiAgICAvLyBpZiAobmFtZSA9PT0gJ2NvdW50cnknKSB7XG4gICAgLy8gICBjb25zdCBjb3VudHJ5ID0gdmFsdWUgYXMga2V5b2YgdHlwZW9mIGxvY2F0aW9uRGF0YTtcbiAgICAvLyAgIHNldEF2YWlsYWJsZVN0YXRlcyhPYmplY3Qua2V5cyhsb2NhdGlvbkRhdGFbY291bnRyeV0gfHwge30pKTsgLy8g4pyFIEFkZCB0aGlzIGxpbmVcbiAgICAvLyAgIHNldEF2YWlsYWJsZUNpdGllcyhbXSk7XG4gICAgLy8gICBzZXRGb3JtRGF0YShwcmV2ID0+ICh7IC4uLnByZXYsIHN0YXRlOiAnJywgY2l0eTogJycgfSkpO1xuICAgIC8vIH1cblxuICAgIC8vIGlmIChuYW1lID09PSAnc3RhdGUnKSB7XG4gICAgLy8gICBjb25zdCBjb3VudHJ5ID0gZm9ybURhdGEuY291bnRyeSBhcyBrZXlvZiB0eXBlb2YgbG9jYXRpb25EYXRhO1xuICAgIC8vICAgY29uc3Qgc3RhdGUgPSB2YWx1ZSBhcyBrZXlvZiAodHlwZW9mIGxvY2F0aW9uRGF0YSlbdHlwZW9mIGNvdW50cnldO1xuICAgIC8vICAgc2V0QXZhaWxhYmxlQ2l0aWVzKGxvY2F0aW9uRGF0YVtjb3VudHJ5XT8uW3N0YXRlXSB8fCBbXSk7XG4gICAgLy8gICBzZXRGb3JtRGF0YShwcmV2ID0+ICh7IC4uLnByZXYsIGNpdHk6ICcnIH0pKTtcbiAgICAvLyB9XG4gICAgLy8gdmFsaWRhdGVTdGVwMSgpO1xuICAgIFxuICB9O1xuXG4gIGNvbnN0IHZhbGlkYXRlU3RlcDEgPSAoKSA9PiB7XG4gICAgbGV0IG5ld0Vycm9yczogRXJyb3JUeXBlID0ge307XG5cbiAgICAvLyBGaXJzdCBOYW1lIFZhbGlkYXRpb25cbiAgICBpZiAoIWZvcm1EYXRhLmZpcnN0TmFtZS50cmltKCkpIHtcbiAgICAgIG5ld0Vycm9ycy5maXJzdE5hbWUgPSBcIkZpcnN0IG5hbWUgaXMgcmVxdWlyZWRcIjtcbiAgICB9IGVsc2UgaWYgKFJFR0VYX05PX05VTUJFUl9PUl9TUEVDSUFMLnRlc3QoZm9ybURhdGEuZmlyc3ROYW1lKSkge1xuICAgICAgbmV3RXJyb3JzLmZpcnN0TmFtZSA9IFwiRmlyc3QgbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXJcIjtcbiAgICB9IGVsc2UgaWYgKGZvcm1EYXRhLmZpcnN0TmFtZS5sZW5ndGggPCAzIHx8IGZvcm1EYXRhLmZpcnN0TmFtZS5sZW5ndGggPiAxNSkge1xuICAgICAgbmV3RXJyb3JzLmZpcnN0TmFtZSA9IFwiRmlyc3QgbmFtZSBtdXN0IGJlIGJldHdlZW4gMyBhbmQgMTUgY2hhcmFjdGVyc1wiO1xuICAgIH0gZWxzZSBpZiAoIVJFR0VYX05PX1NQQUNFUy50ZXN0KGZvcm1EYXRhLmZpcnN0TmFtZSkpIHtcbiAgICAgIG5ld0Vycm9ycy5maXJzdE5hbWUgPSBcIlRoZSBmaXJzdCB0aHJlZSBjaGFyYWN0ZXJzIGNhbm5vdCBiZSBzcGFjZXNcIjtcbiAgICB9XG5cbiAgICAvLyBMYXN0IE5hbWUgVmFsaWRhdGlvblxuICAgIGlmICghZm9ybURhdGEubGFzdE5hbWUudHJpbSgpKSB7XG4gICAgICBuZXdFcnJvcnMubGFzdE5hbWUgPSBcIkxhc3QgbmFtZSBpcyByZXF1aXJlZFwiO1xuICAgIH0gZWxzZSBpZiAoUkVHRVhfTk9fTlVNQkVSX09SX1NQRUNJQUwudGVzdChmb3JtRGF0YS5sYXN0TmFtZSkpIHtcbiAgICAgIG5ld0Vycm9ycy5sYXN0TmFtZSA9IFwiTGFzdCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlclwiO1xuICAgIH0gZWxzZSBpZiAoZm9ybURhdGEubGFzdE5hbWUubGVuZ3RoIDwgMyB8fCBmb3JtRGF0YS5sYXN0TmFtZS5sZW5ndGggPiAxNSkge1xuICAgICAgbmV3RXJyb3JzLmxhc3ROYW1lID0gXCJMYXN0IG5hbWUgbXVzdCBiZSBiZXR3ZWVuIDMgYW5kIDE1IGNoYXJhY3RlcnNcIjtcbiAgICB9IGVsc2UgaWYgKCFSRUdFWF9OT19TUEFDRVMudGVzdChmb3JtRGF0YS5sYXN0TmFtZSkpIHtcbiAgICAgIG5ld0Vycm9ycy5sYXN0TmFtZSA9IFwiVGhlIGxhc3QgdGhyZWUgY2hhcmFjdGVycyBjYW5ub3QgYmUgc3BhY2VzXCI7XG4gICAgfVxuXG4gICAgLy8gRW1haWwgVmFsaWRhdGlvblxuICAgIGlmICghZm9ybURhdGEuZW1haWwudHJpbSgpKSB7XG4gICAgICBuZXdFcnJvcnMuZW1haWwgPSBcIkVtYWlsIGlzIHJlcXVpcmVkXCI7XG4gICAgfSBlbHNlIGlmICghUkVHRVhfRU1BSUwudGVzdChmb3JtRGF0YS5lbWFpbCkpIHtcbiAgICAgIG5ld0Vycm9ycy5lbWFpbCA9IFwiRW50ZXIgYSB2YWxpZCBlbWFpbFwiO1xuICAgIH1cblxuICAgIGlmICghZm9ybURhdGEuYWRkcmVzc0xpbmUxLnRyaW0oKSkge1xuICAgICAgbmV3RXJyb3JzLmFkZHJlc3NMaW5lMSA9IFwiQWRkcmVzcyBMaW5lMSBpcyByZXF1aXJlZFwiO1xuICAgIH1cblxuICAgIGlmICghZm9ybURhdGEuemlwQ29kZS50cmltKCkpIHtcbiAgICAgIG5ld0Vycm9ycy56aXBDb2RlID0gXCJaaXAgQ29kZSBpcyByZXF1aXJlZFwiO1xuICAgIH1cblxuICAgIGlmICghc2VsZWN0ZWRDb3VudHJ5KSB7XG4gICAgICBuZXdFcnJvcnMuY291bnRyeSA9IFwiQ291bnRyeSBpcyByZXF1aXJlZFwiO1xuICAgIH1cblxuICAgIGlmICghc2VsZWN0ZWRTdGF0ZSkge1xuICAgICAgbmV3RXJyb3JzLnN0YXRlID0gXCJTdGF0ZSBpcyByZXF1aXJlZFwiO1xuICAgIH1cblxuICAgIGlmICghc2VsZWN0ZWRDaXR5KSB7XG4gICAgICBuZXdFcnJvcnMuY2l0eSA9IFwiQ2l0eSBpcyByZXF1aXJlZFwiO1xuICAgIH1cblxuICAgIHNldEVycm9ycyhuZXdFcnJvcnMpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhuZXdFcnJvcnMpLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICBcbiAgLy8gdXNlRWZmZWN0KCgpPT57XG4gIC8vICB2YWxpZGF0ZVN0ZXAxKCkgXG4gIC8vIH0sW2Zvcm1EYXRhXSlcbiAgXG4gICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJsYXN0U2VsZWN0ZWRBZGRyZXNzSW5kZXggOjogXCIrbGFzdFNlbGVjdGVkQWRkcmVzc0luZGV4KTtcbiAgfSwgW2xhc3RTZWxlY3RlZEFkZHJl
1469c3NJbmRleF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHVzZXJBZGRyZXNzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc29sZS5lcnJvcihcImJhY2tidXR0b25mbGFnIDo6IFwiK2JhY2tCdG5GbGFnKTtcbiAgICBjb25zb2xlLmVycm9yKFwibGFzdFNlbGVjdGVkQWRkcmVzc0luZGV4IDo6IFwiK2xhc3RTZWxlY3RlZEFkZHJlc3NJbmRleCk7XG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvcjogc2VsZWN0IHRoZSBsYXRlc3QgYWRkcmVzc1xuICAgIGlmIChiYWNrQnRuRmxhZykge1xuICAgICAgLy8gUmVzdG9yZSBwcmV2aW91c2x5IHNlbGVjdGVkIGFkZHJlc3NcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJleGVjdXRlZCBpZiBibG9ja1wiKTtcbiAgICAgIGlmKGxhc3RTZWxlY3RlZEFkZHJlc3NJbmRleCA9PT0gXCJcIikge1xuICAgICAgICBzZXRTZWxlY3RlZEFkZHJlc3NJbmRleCggdXNlckFkZHJlc3NbdXNlckFkZHJlc3MubGVuZ3RoIC0gMV0uYWRkcmVzc0lkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNlbGVjdGVkQWRkcmVzc0luZGV4KGxhc3RTZWxlY3RlZEFkZHJlc3NJbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJleGVjdXRlZCBlbHNlIGJsb2NrXCIpO1xuICAgICAgaWYoc3RlcCA9PT0gMSkge1xuICAgICAgICBjb25zdCBsYXRlc3RBZGRyZXNzSWQgPSB1c2VyQWRkcmVzc1t1c2VyQWRkcmVzcy5sZW5ndGggLSAxXS5hZGRyZXNzSWQ7XG4gICAgICAgIHNldFNlbGVjdGVkQWRkcmVzc0luZGV4KGxhdGVzdEFkZHJlc3NJZCk7XG4gICAgICAgIHNldExhc3RTZWxlY3RlZEFkZHJlc3NJbmRleChsYXRlc3RBZGRyZXNzSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3VzZXJBZGRyZXNzLCBiYWNrQnRuRmxhZ10pO1xuXG4gIGNvbnN0IGhhbmRsZU5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgc3RlcCA9PT0gMSAmJlxuICAgICAgc2VsZWN0ZWRBZGRyZXNzSW5kZXhcbiAgICApIHtcbiAgICAgIHNldFN0ZXAoc3RlcCArIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RlcCA9PT0gMSAmJiAhdmFsaWRhdGVTdGVwMSgpKXsgXG4gICAgICByZXR1cm59O1xuICAgIC8vIGlmIChzdGVwID09PSAyKSB7XG4gICAgLy8gICAvLyBEZXRlcm1pbmUgcHJpY2luZyBhbmQgcHJvZHVjdCBpbmZvXG4gICAgLy8gICBjb25zdCBpc01vbnRobHkgPSBmb3JtRGF0YS5wbGFuID09PSBcIm1vbnRobHlcIjtcbiAgICAvLyAgIGNvbnN0IHByb2R1Y3ROYW1lID0gaXNNb250aGx5XG4gICAgLy8gICAgID8gJ1NJWCBTSUdNQSBGVU5ORUwg4oCcTU9OVEhMWSBQTEFO4oCdJ1xuICAgIC8vICAgICA6ICdTSVggU0lHTUEgRlVOTkVMIOKAnFlFQVJMWSBQTEFO4oCdJztcbiAgICAvLyAgIGNvbnN0IHByb2R1Y3RQcmljZSA9IGlzTW9udGhseSA/IDk3MDAgOiAxMTY0MDA7IC8vIFN0cmlwZSBhY2NlcHRzIHByaWNlIGluIGNlbnRzXG4gICAgLy8gICBjb25zdCBxdWFudGl0eSA9IDE7XG4gICAgLy8gICBjb25zdCBjdXJyZW5jeSA9I
1469FwidXNkXCI7XG4gICAgLy8gICBjb25zdCBlbWFpbCA9IHNhdmVkRW1haWw7XG4gICAgLy8gICBjb25zdCBkb21haW5VcmwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgIC8vICAgY29uc3QgY29tcGFueU5hbWUgPSBDVVJFRU5UX0NPTVBBTllfTkFNRTtcblxuICAgIC8vICAgdHJ5IHtcbiAgICAvLyAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0PFN0cmlwZVJlc3BvbnNlPihcbiAgICAvLyAgICAgICBQT1NUX0NSRUFURV9DSEVDS09VVF9TRVNTSU9OKENVUkVFTlRfQ09NUEFOWV9OQU1FKSxcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBwcm9kdWN0TmFtZSxcbiAgICAvLyAgICAgICAgIHByb2R1Y3RQcmljZSxcbiAgICAvLyAgICAgICAgIHF1YW50aXR5LFxuICAgIC8vICAgICAgICAgY3VycmVuY3ksXG4gICAgLy8gICAgICAgICBlbWFpbCxcbiAgICAvLyAgICAgICAgIGRvbWFpblVybCxcbiAgICAvLyAgICAgICAgIGNvbXBhbnlOYW1lXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICApO1xuXG4gICAgLy8gICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXR1cyA9PT0gXCJTVUNDRVNTXCIgJiYgcmVzcG9uc2UuZGF0YS5zZXNzaW9uVXJsKSB7XG4gICAgLy8gICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJ0cmlhbEV4cGlyZWRcIik7XG4gICAgLy8gICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZS5kYXRhLnNlc3Npb25Vcmw7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgY29uc29sZS5lcnJvcihcIkNoZWNrb3V0IHNlc3Npb24gZmFpbGVkOlwiLCByZXNwb25zZS5kYXRhLm1lc3NhZ2UpO1xuICAgIC8vICAgICAgIGFsZXJ0KFwiU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIGNoZWNrb3V0LiBQbGVhc2UgdHJ5IGFnYWluLlwiKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNhbGxpbmcgY2hlY2tvdXQgc2Vzc2lvbiBBUEk6XCIsIGVycm9yKTtcbiAgICAvLyAgICAgYWxlcnQoXCJFcnJvciBjb25uZWN0aW5nIHRvIGNoZWNrb3V0LiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwiKTtcbiAgICAvLyAgIH1cblxuICAgIC8vICAgcmV0dXJuOyAvLyBQcmV2ZW50IG1vdmluZyB0byBzdGVwIDMg4oCUIHdhaXQgZm9yIFN0cmlwZSByZWRpcmVjdFxuICAgIC8vIH1cblxuICAgIC8vIGNvbnN0IG5leHRTdGVwID0gc3RlcCArIDE7XG4gICAgLy8gc2V0U3RlcChuZXh0U3RlcCk7XG4gICAgLy8gc2V0VmlzaXRlZFN0ZXBzKChwcmV2KSA9PiBbLi4ubmV3IFNldChbLi4ucHJldiwgbmV4dFN0ZXBdKV0pO1xuXG4gICAgLy9hZnRlciB2YWxpZGF0aW9uIGNhbGwgdGhlIGNyZWF0ZVVzZXJBZGRyZXNzIHRvIHN0b3JlIGl0LlxuICAgIHNldFN0ZXAoc3RlcCArIDEpO1xuICAgIHNldExhc3RTZWxlY3RlZEFkZHJlc3NJbmRleChcIlwiKTtcbiAgICBjcmVhdGVVc2VyQWRkcmVzcygpO1xuICAgIFxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVBsYW5DaGFuZ2UgPSBhc3luYyAocHJpY2VJZD86IHN0cmluZywgcGxhblR5cGU/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcInByaWNlIGlkIC4uXCIgKyBwcmljZUlkLCBcInBsYW4gdHlwZSAuLlwiICsgcGxhblR5cGUpO1xuXG4gICAgaWYgKHBsYW5UeXBlICYmIHByaWNlSWQpIHtcbiAgICAgIHNldFNlbGV0ZWRQbGFuXyhwbGFuVHlwZSk7XG4gICAgICBzZXRQcmljZUlkKHByaWNlSWQpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3JkZXJSZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoXG4gICAgICAgIEdFVF9PUkRFUihDVVJFRU5UX0NPTVBBTllfTkFNRSksXG4gICAgICAgIG51bGwsXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIG9yZGVySWQ6IG9yZGVySWQsXG4gICAgICAgICAgICBwcmljZUlkOiBwcmljZUlkLFxuICAgICAgICAgICAgcGxhblR5cGU6IHBsYW5UeXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZyhcIm9yZGVyUmVzcG9uc2Uuc3RhdHVzIC4uXCIgKyBvcmRlclJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICBpZiAob3JkZXJSZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBzZXRVc2VyQ2FydERldGFpbHMob3JkZXJSZXNwb25zZS5kYXRhKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBzd2l0Y2ggcGxhbjpcIiwgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvL1RvIHVwZGF0ZSB0aGUgVVJMIGluIEJhY2sgY2FzZVxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgaWYgKHBsYW5UeXBlKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLnNldChcInBsYW5cIiwgcGxhblR5cGUpOyAvLyBVcGRhdGUgb3IgYWRkIHRoZSBwbGFuIHBhcmFtXG4gICAgICB9XG4gICAgICBjb25zdCBuZXdVcmwgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyBcIj9cIiArIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgICAvLyBVcGRhdGUgdGhlIFVSTCB3aXRob3V0IHJlbG9hZGluZ1xuICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIFwiXCIsIG5ld1VybCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVBheW1lbnQgPSBhc3luYyAoKSA9PiB7XG4gICAgLy8gY29uc3QgcXVhbnRpdHkgPSAxO1xuICAgIGNvbnN0IGN1cnJlbmN5ID0gXCJ1c2RcIjtcbiAgICBjb25zdCBlbWFpbCA9IHNhdmVkRW1haWw7XG4gICAgY29uc3QgZG9tYWluVXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICBjb25zdCBjb21wYW55TmFtZSA9IENVUkVFTlRfQ09NUEFOWV9OQU1FO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vZW5hYmxlU3BsYXNoU2NyZWVuKCk7XG4gICAgICBlbmFibGVQYXltZW50U3BsYXNoU2NyZWVuKCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8U3RyaXBlUmVzcG9uc2U+KFxuICAgICAgICBQT1NUX0NSRUFURV9DSEVDS09VVF9TRVNTSU9OKENVUkVFTlRfQ09NUEFOWV9OQU1FKSxcbiAgICAgICAge1xuICAgICAgICAgIC8vIHByb2R1Y3ROYW1lLFxuICAgICAgICAgI
1469HByaWNlSWQsXG4gICAgICAgICAgLy8gcXVhbnRpdHksXG4gICAgICAgICAgY3VycmVuY3ksXG4gICAgICAgICAgb3JkZXJJZCxcbiAgICAgICAgICAvLyBlbWFpbCxcbiAgICAgICAgICBkb21haW5VcmwsXG4gICAgICAgICAgY29tcGFueU5hbWUsXG4gICAgICAgICAgY291cG9uQ29kZVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0dXMgPT09IFwiU1VDQ0VTU1wiICYmIHJlc3BvbnNlLmRhdGEuc2Vzc2lvblVybCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInRyaWFsRXhwaXJlZFwiKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZS5kYXRhLnNlc3Npb25Vcmw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQ2hlY2tvdXQgc2Vzc2lvbiBmYWlsZWQ6XCIsIHJlc3BvbnNlLmRhdGEubWVzc2FnZSk7XG4gICAgICAgIGRpc2FibGVQYXltZW50U3BsYXNoU2NyZWVuKCk7XG4gICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgaW1hZ2VVcmw6IFwiL21lZGlhL21pc2MvcmVtb3ZlLnBuZ1wiLFxuICAgICAgICAgIGltYWdlV2lkdGg6IDYwLFxuICAgICAgICAgIGltYWdlSGVpZ2h0OiA2MCxcbiAgICAgICAgICB0aXRsZTogXCI8c3BhbiBzdHlsZT0nY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz5FcnJvciE8L3NwYW4+XCIsXG4gICAgICAgICAgaHRtbDogYDxzdHJvbmc+JHtyZXNwb25zZS5kYXRhLm1lc3NhZ2V9PC9zdHJvbmc+YCxcbiAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJPS1wiLFxuICAgICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjZjc5YzNhXCIsXG4gICAgICAgIH0pO1xuICAgICAgICAvL2FsZXJ0KFwiU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIGNoZWNrb3V0LiBQbGVhc2UgdHJ5IGFnYWluLlwiKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNhbGxpbmcgY2hlY2tvdXQgc2Vzc2lvbiBBUEk6XCIsIGVycm9yKTtcbiAgICAgIGFsZXJ0KFwiRXJyb3IgY29ubmVjdGluZyB0byBjaGVja291dC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vZGlzYWJsZVNwbGFzaFNjcmVlbigpO1xuICAgIH1cblxuICAgIHJldHVybjsgLy8gUHJldmVudCBtb3ZpbmcgdG8gc3RlcCAzIOKAlCB3YWl0IGZvciBTdHJpcGUgcmVkaXJlY3RcbiAgfTtcblxuICBhc3luYyBmdW5jdGlvbiBnZXRjdXJyZW50ZGF0YSgpIHtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgICAgR0VUX0FMTF9VU0VSQUREUkVTUyhDVVJFRU5UX0NPTVBBTllfTkFNRSlcbiAgICAgICk7XG4gICAgICBjb25zdCByYXdEYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICBjb25zdCBzaW1wbGlmaWVkOiB1c2VyQWRkcmVzc2RhdGFbXSA9IHJhd0RhdGEubWFwKChhZGRyOiBhbnkpID0+ICh7XG4gICAgICAgICAgYWRkcmVzc0xpbmUxOiBhZGRyLmxpbmUxLFxuICAgICAgICAgIGFkZHJlc3NMaW5lMjogYWRkci5saW5lMixcbiAgICAgICAgICBjb3VudHJ5OiBhZGRyLmNvdW50cnksXG4gICAgICAgICAgcGhvbmU6IGFkZHIucGhvbmUsXG4gICAgICAgICAgY29udGFjdE5hbWU6IGFkZHIuY29udGFjdE5hbWUsXG4gICAgICAgICAgcG9zdGFsQ29kZTogYWRkci5wb3N0YWxDb2RlLFxuICAgICAgICAgIGFkZHJlc3NJZDogYWRkci5hZGRyZXNzSWQsXG4gICAgICAgICAgc3RhdGU6YWRkci5zdGF0ZSxcbiAgICAgICAgICBjaXR5OmFkZHIuY2l0eVxuICAgICAgICB9KSk7XG4gICAgICAgIHNldE9wZW5CaWxsKHRydWUpO1xuICAgICAgICBzZXRVc2VyQWRkcmVzcyhzaW1wbGlmaWVkKTtcbiAgICAgICAgc2V0T3BlbkJpbGxGb3JtKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHVzZXIgYWRkcmVzc2VzOlwiLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjsgLy8gT3B0aW9uYWw6IHJldGhyb3cgaWYgY2FsbGVyIG5lZWRzIHRvIGhhbmRsZSBpdFxuICAgIH1cbiAgfVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgXG4gICAgZ2V0Y3VycmVudGRhdGEoKTtcbiAgfSwgW3N0ZXBdKTtcblxuICBmdW5jdGlvbiBoYW5kbGVvcGVuZm9ybSgpIHtcbiAgICBzZXRvcGVuZm9ybSh0cnVlKTtcbiAgICBjb25zb2xlLmxvZyhcInRoaXMgaXMgdGhlIFwiICsgb3BlbmZvcm0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlbGluaygpXG4gIHtcbnNldEZvcm1EYXRhKGluaXRpYWxGb3JtRGF0YSk7XG5cbiAgICAvLyBSZXNldCBkcm9wZG93biBzZWxlY3Rpb25zXG4gICAgc2V0U2VsZWN0ZWRTdGF0ZShudWxsKTtcbiAgICBzZXRTZWxlY3RlZENpdHkobnVsbCk7XG4gICAgc2V0U2VsZWN0ZWRDb3VudHJ5KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVCYWNrID0gKCkgPT4ge1xuICAgIGlmIChzdGVwID4gMSkge1xuICAgICAgc2V0QmFja0J0bkZsYWcodHJ1ZSk7XG4gICAgICBzZXRTdGVwKHN0ZXAgLSAxKTtcbiAgICB9XG4gIH07XG5cbiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVXNlckFkZHJlc3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChcbiAgICAgICAgUE9TVF9DUkVBVEVfVVNFUl9BRERSRVNTKENVUkVFTlRfQ09NUEFOWV9OQU1FKSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhY3ROYW1lOiBmb3JtRGF0YS5maXJzdE5hbWUgKyBcIiBcIiArIGZvcm1EYXRhLmxhc3ROYW1lLFxuICAgICAgICAgIGxpbmUxOiBmb3JtRGF0YS5hZGRyZXNzTGluZTEsXG4gICAgICAgICAgbGluZTI6IGZvcm1EYXRhLmFkZHJlc3NMaW5lMixcbiAgICAgICAgICBjaXR5OiBzZWxlY3RlZENpdHksXG4gICAgICAgICAgc3RhdGU6IHNlbGVjdGVkU3RhdGUsXG4gICAgICAgICAgcG9zdGFsQ29kZTogZm9ybURhdGEuemlwQ29kZSxcbiAgICAgICAgICBhZGRyZXNzVHlwZTogXCJCSUxMSU5HXCIsXG4gICAgICAgICAgcGhvbmU6IFwiMDAwLTAwMC0wMDAwXCIsXG4gICAgICAgICAgY291bnRyeTogc2VsZWN0ZWRDb3VudHJ5LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDIwMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcInVzZXIgYWRkcmVzcyBhZGRlZCBzdXNjY2Vzc2Z1bGx5XCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhcIkFkZHJl
1469c3MgY3JlYXRlZCBzdWNjZXNzZnVsbHk6XCIsIHJlc3BvbnNlLmRhdGEpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNyZWF0aW5nIGFkZHJlc3M6XCIsIGUpO1xuICAgICAgLy8gT3B0aW9uYWxseSwgdGhyb3cgb3IgaGFuZGxlIGVycm9yIGFwcHJvcHJpYXRlbHlcbiAgICB9XG4gIH1cblxuICAvLyBGaWVsZCBkZWZpbml0aW9ucyAobGFiZWwgYW5kIG5hbWUpXG4gIGNvbnN0IGZpZWxkcyA9IFtcbiAgICB7IGxhYmVsOiBcIkZpcnN0IE5hbWUqXCIsIG5hbWU6IFwiZmlyc3ROYW1lXCIgfSxcbiAgICB7IGxhYmVsOiBcIkxhc3QgTmFtZSpcIiwgbmFtZTogXCJsYXN0TmFtZVwiIH0sXG4gICAgeyBsYWJlbDogXCJFbWFpbCpcIiwgbmFtZTogXCJlbWFpbFwiIH0sXG4gICAgeyBsYWJlbDogXCJBZGRyZXNzIExpbmUxXCIsIG5hbWU6IFwiYWRkcmVzc0xpbmUxXCIgfSxcbiAgICB7IGxhYmVsOiBcIkFkZHJlc3MgTGluZTJcIiwgbmFtZTogXCJhZGRyZXNzTGluZTJcIiB9LFxuICAgIHsgbGFiZWw6IFwiWmlwIENvZGVcIiwgbmFtZTogXCJ6aXBDb2RlXCIgfSxcbiAgXTtcbiAgLy8gSGFuZGxlIGNvdW50cnkgY2hhbmdlIGFuZCBmZXRjaCBzdGF0ZXNcbiAgY29uc3QgaGFuZGxlQ291bnRyeUNoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MU2VsZWN0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBjb3VudHJ5Q29kZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIHNldFNlbGVjdGVkQ291bnRyeShjb3VudHJ5Q29kZSk7XG4gICAgc2V0U2VsZWN0ZWRTdGF0ZShudWxsKTtcbiAgICBzZXRTdGF0ZXMoW10pO1xuXG4gICAgLy8gQ2xlYXIgdmFsaWRhdGlvbiBlcnJvclxuICAgIGlmIChlcnJvcnMuY291bnRyeSkge1xuICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBjb3VudHJ5OiBcIlwiIH0pKTtcbiAgICB9XG5cbiAgICAvLyBUb2dnbGUgZmlsbGVkIGNsYXNzIGJhc2VkIG9uIHZhbHVlXG4gICAgY29uc3QgcGFyZW50ID0gZS50YXJnZXQuY2xvc2VzdChcIi5pbnB1dC1jb250YWluZXJcIik7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgaWYgKGNvdW50cnlDb2RlKSB7XG4gICAgICAgIHBhcmVudC5jbGFzc0xpc3QuYWRkKFwiZmlsbGVkXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJmaWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggc3RhdGVzIGlmIGEgY291bnRyeSBpcyBzZWxlY3RlZFxuICAgIGlmIChjb3VudHJ5Q29kZSkge1xuICAgZW5hYmxlU3BsYXNoU2NyZWVuKCk7IC8vIFNob3cgbG9hZGluZyBpbmRpY2F0b3JcblxuICAgICAgYXhpb3NcbiAgICAgICAgLnBvc3QoXCJodHRwczovL2NvdW50cmllc25vdy5zcGFjZS9hcGkvdjAuMS9jb3VudHJpZXMvc3RhdGVzXCIsIHtcbiAgICAgICAgICBjb3VudHJ5OiBjb3VudHJ5Q29kZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVPcHRpb25zID0gcmVzcG9uc2UuZGF0YS5kYXRhLnN0YXRlcy5tYXAoKHN0YXRlOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBsYWJlbDogc3RhdGUubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBzdGF0ZS5uYW1lLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBzZXRTdGF0ZXMoc3RhdGVPcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc3RhdGVzOlwiLCBlcnJvcik7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgZGlzYWJsZVNwbGFzaFNjcmVlbigpOyAvLyBIaWRlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgfSk7XG59XG5cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdGF0ZUNoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MU2VsZWN0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBzdGF0ZUNvZGUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICBzZXRTZWxlY3RlZFN0YXRlKHN0YXRlQ29kZSk7XG4gICAgc2V0U2VsZWN0ZWRDaXR5KG51bGwpOyAvLyBSZXNldCBjaXR5IHNlbGVjdGlvblxuXG4gICAgLy8gQ2xlYXIgc3RhdGUgZXJyb3IgaWYgYW55XG4gICAgaWYgKGVycm9ycy5zdGF0ZSkge1xuICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBzdGF0ZTogXCJcIiB9KSk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlICdmaWxsZWQnIGNsYXNzIGZvciBmbG9hdGluZyBsYWJlbFxuICAgIGNvbnN0IHBhcmVudCA9IGUudGFyZ2V0LmNsb3Nlc3QoXCIuaW5wdXQtY29udGFpbmVyXCIpO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGlmIChzdGF0ZUNvZGUpIHtcbiAgICAgICAgcGFyZW50LmNsYXNzTGlzdC5hZGQoXCJmaWxsZWRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJlbnQuY2xhc3NMaXN0LnJlbW92ZShcImZpbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGZXRjaCBjaXRpZXMgaWYgYm90aCBzdGF0ZSBhbmQgY291bnRyeSBhcmUgc2VsZWN0ZWRcbiAgICBpZiAoc3RhdGVDb2RlICYmIHNlbGVjdGVkQ291bnRyeSkge1xuICAgIGVuYWJsZVNwbGFzaFNjcmVlbigpOyAvLyBTaG93IGxvYWRpbmcgaW5kaWNhdG9yXG5cbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KFwiaHR0cHM6Ly9jb3VudHJpZXNub3cuc3BhY2UvYXBpL3YwLjEvY291bnRyaWVzL3N0YXRlL2NpdGllc1wiLCB7XG4gICAgICAgICAgY291bnRyeTogc2VsZWN0ZWRDb3VudHJ5LFxuICAgICAgICAgIHN0YXRlOiBzdGF0ZUNvZGUsXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNpdHlPcHRpb25zID0gcmVzcG9uc2UuZGF0YS5kYXRhLm1hcCgoY2l0eTogYW55KSA9PiAoe1xuICAgICAgICAgICAgbGFiZWw6IGNpdHksXG4gICAgICAgICAgICB2YWx1ZTogY2l0eSxcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgc2V0Q2l0aWVzKGNpdHlPcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgY2l0aWVzOlwiLCBlcnJvcik7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICBkaXNhYmxlU3BsYXNoU2NyZWVuKCk7IC8vIEhpZGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICB9KTtcbn0gZWxzZSB7XG4gICAgICBzZXRDaXRpZXMoW10pO1xufVxuXG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2l0eUNoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MU2VsZWN0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIHNldFNlbGVjdGVkQ2l0eShzZWxlY3RlZE9wdGlvbik7XG5lbmFibGVTcGxhc2hTY3JlZW4oKTtcblxuICAgIC8vIENsZWFyIGNpdHkgZXJyb3IgaWYgcHJlc2VudFxuICAgIGlmIChlcnJvcnMuY2l0eSkge1xuICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBjaXR5OiBcIlwiIH0pKTtcbiAgICB9XG5cbiAgICAvLyBUb2dnbGUgJ2ZpbGxlZCcgY2xhc3MgZm9yIGZsb2F0aW5nIGxhYmVsXG4gICAgY29uc3QgcGFyZW50ID0gZS50YXJnZXQuY2xvc2VzdChcIi5pbnB1dC1jb250YWluZXJcIik7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgI
1469HBhcmVudC5jbGFzc0xpc3QuYWRkKFwiZmlsbGVkXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJmaWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGRpc2FibGVTcGxhc2hTY3JlZW4oKTtcbiAgICBcbiAgfTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgc2V0VmlzaXRlZFN0ZXBzKChwcmV2KSA9PlxuICAgIHByZXYuaW5jbHVkZXMoc3RlcCkgPyBwcmV2IDogWy4uLnByZXYsIHN0ZXBdXG4gICk7XG59LCBbc3RlcF0pO1xuXG5jb25zdCBzdGVwTGFiZWxzID0gW1xuICAgIFwiSW52b2ljZSBBZGRyZXNzXCIsXG4gICAgXCJQdXJjaGFzZSBPdmVydmlld1wiLFxuICAgIFwiUHVyY2hhc2UgQ29uZmlybWF0aW9uXCIsXG4gIF07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPENvbnRlbnQ+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IFwiODAlXCIsIG1hcmdpbjogXCIwIGF1dG9cIiwgcGFkZGluZzogMjAgfX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdGVwcGVyXCI+XG4gICAgICAgICAgICB7Lyoge3N0ZXBMYWJlbHMubWFwKChsYWJlbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcE51bSA9IGluZGV4ICsgMTtcbiAgICAgICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBzdGVwID09PSBzdGVwTnVtO1xuICAgICAgICAgICAgICBjb25zdCBpc0NvbXBsZXRlT3JBY3RpdmUgPSBzdGVwTnVtIDw9IHN0ZXA7XG4gICAgICAgICAgICAgIC8vIGNvbnN0IGlzQ29tcGxldGVPckFjdGl2ZSA9IGlzQWN0aXZlIHx8IGlzQ29tcGxldGU7XG4gICAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGlzQ29tcGxldGVPckFjdGl2ZSA/IFwiIzAwNzNCN1wiIDogXCIjZmZmXCI7XG4gICAgICAgICAgICAgIGNvbnN0IHRleHRDb2xvciA9IGlzQ29tcGxldGVPckFjdGl2ZSA/IFwiI2ZmZlwiIDogXCIjQUJCN0MyXCI7XG4gICAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHN0ZXBOdW0gPD0gc3RlcCA/IFwi4pyUXCIgOiBgMCR7c3RlcE51bX1gO1xuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN0ZXBwZXJfX2l0ZW1cIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiNnB4XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMTVweFwiLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IGlzQWN0aXZlID8gXCJib2xkXCIgOiBcIm5vcm1hbFwiLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5SaWdodDogOCB9fSBjbGFzc05hbWU9XCJwcmVmaXhfdWlcIj5cbiAgICAgICAgICAgICAgICAgICAge3ByZWZpeH1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgICAgICAgKi99XG4gICAgICAgICAgICAgICAgICB7IC8qIFJpZ2h0IGFycm93IChleGNlcHQgZm9yIGxhc3Qgc3RlcCkgKi99XG4gICAgICAgICAgICAgICAgIHsgLyoge3N0ZXBOdW0gPCAzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IFwiLTIwcHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyVG9wOiBcIjMwcHggc29saWQgdHJhbnNwYXJlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogXCIzMHB4IHNvbGlkIHRyYW5zcGFyZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJMZWZ0OiBgMjBweCBzb2xpZCAke2JhY2tncm91bmRDb2xvcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9ICovfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAge3N0ZXAgPT09IDEgJiYgT3BlbkJpbGwgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW46IFwiYXV0b1wiLCB3aWR0aDogXCIxMDAlXCIgfX0+XG4gICAgICAgICAgICAgIDxoMj5DaG9vc2UgYSBCaWxsaW5nIEFkZHJlc3M8L2gyPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93WTogXCJhdXRvXCIsIFxuICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjZGRkXCIsXG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiNXB4XCIsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjIwcHhcIixcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBcIjIwMHB4XCJcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aDQ+WW91ciBhZGRyZXNzZXM8L2g0PlxuXG4gICAgICAgICAgICAgICAge3VzZXJBZGRyZXNzLm1hcCgoYWRkcmVzcywgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IFwiMTBweFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDpcbiAgICAgICAgICAgICAgICAgICAgICAgI
1469HNlbGVjdGVkQWRkcmVzc0luZGV4ID09PSBhZGRyZXNzLmFkZHJlc3NJZCA/IFwiYm9sZFwiIDogXCJub3JtYWxcIixcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldE9wZW5CaWxsRm9ybShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JzKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYmlsbGluZ0FkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyBzZWxlY3RlZEFkZHJlc3NJbmRleCA9PT0gYWRkcmVzcy5hZGRyZXNzSWQgfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEFkZHJlc3NJbmRleChhZGRyZXNzLmFkZHJlc3NJZCk7IFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TGFzdFNlbGVjdGVkQWRkcmVzc0luZGV4KGFkZHJlc3MuYWRkcmVzc0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiBcIjhweFwiIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAge2FkZHJlc3MuY29udGFjdE5hbWV9LCAge2FkZHJlc3MuY291bnRyeX0sIHthZGRyZXNzLnN0YXRlfSwge2FkZHJlc3MuY2l0eX0sIHthZGRyZXNzLnBvc3RhbENvZGV9XG4gICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICkpfVxuXG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiMwMDdiZmZcIixcbiAgICAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb246IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiMTBweFwiLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRBZGRyZXNzSW5kZXgoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIHNldE9wZW5CaWxsRm9ybSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlbGluaygpO1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcnMoe30pO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICArQWRkIE5ldyBCaWxsaW5nIEFkZHJlc3NcbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtzdGVwID09PSAxICYmIE9wZW5CaWxsRm9ybSAmJiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4V3JhcDogXCJ3cmFwXCIsIGdhcDogXCIyMHB4XCIgfX0+XG4gICAgICAgICAgICAgICAgey8qIFJlbmRlciBmaWVsZHMgZnJvbSB0aGUgYXJyYXksIGV4Y2x1ZGluZyB6aXBDb2RlICovfVxuICAgICAgICAgICAgICAgIHtmaWVsZHNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC5uYW1lICE9PSBcInppcENvZGVcIilcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2ZpZWxkLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgaW5wdXQtY29udGFpbmVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5uYW1lIGFzIGtleW9mIEZvcm1EYXRhVHlwZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImZpbGxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGV4OiBcIjEgMCAzMCVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBcIjIwMHB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9e2ZpZWxkLm5hbWUgPT09IFwiZW1haWxcIiA/IFwiZW1haWxcIiA6IFwidGV4dFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17ZmllbGQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YVtmaWVsZC5uYW1lIGFzIGtleW9mIEZvcm1EYXRhVHlwZV19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QuYWRkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQmx1cj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN1cnJlbnRUYXJnZXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsb2F0aW5nLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgI
1469HN0eWxlPXt7IHdpZHRoOiBcIjEwMCVcIiwgcGFkZGluZzogXCIxMnB4IDhweCA0cHggOHB4XCIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1heExlbmd0aD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcImZpcnN0TmFtZVwiLCBcImxhc3ROYW1lXCJdLmluY2x1ZGVzKGZpZWxkLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAxNVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmllbGQubmFtZSA9PT0gXCJhZGRyZXNzTGluZTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMTAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZsb2F0aW5nLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZmllbGQubGFiZWwucmVwbGFjZShcIipcIiwgXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICB7W1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0TmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3ROYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhZGRyZXNzTGluZTFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6aXBDb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKGZpZWxkLm5hbWUpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6IFwicmVkXCIgfX0+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgIHtlcnJvcnNbZmllbGQubmFtZSBhcyBrZXlvZiBGb3JtRGF0YVR5cGVdICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiBcInJlZFwiLCBtYXJnaW46IDAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtlcnJvcnNbZmllbGQubmFtZSBhcyBrZXlvZiBGb3JtRGF0YVR5cGVdfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgey8qIENvdW50cnkgKi99XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogXCIxIDAgMzAlXCIsIG1pbldpZHRoOiBcIjIwMHB4XCIgfX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGlucHV0LWNvbnRhaW5lciBjb3VudHJ5ICR7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291bnRyeSA/IFwiZm9jdXNlZFwiIDogXCJcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY291bnRyeVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWxlY3RlZENvdW50cnl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDb3VudHJ5Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzQ291bnRyeUZvY3VzZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoXCJmb2N1c2VkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbkJsdXI9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0SXNDb3VudHJ5Rm9jdXNlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN1cnJlbnRUYXJnZXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBzdHlsZT17eyBkaXNwbGF5OiBcIm5vbmVcIiB9fT48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAge2lzQ291bnRyeUZvY3VzZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBDb3VudHJ5XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtjb3VudHJpZXMubWFwKChjb3VudHJ5KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2NvdW50cnkudmFsdWV9IHZhbHVlPXtjb3VudHJ5LnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb3VudHJ5LmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZsb2F0aW5nLWxhYmVsLWRkXCI+XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdCBDb3VudHJ5PHNwYW4gc3R5bGU9e3sgY29sb3I6IFwicmVkXCIgfX0+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7ZXJyb3JzLmNvdW50cnkgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogXCJyZWRcIiwgbWFyZ2luOiAwIH19PntlcnJvcnMuY291bnRyeX08L3A+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgey8qIFN0YXRlICovfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgI
1469HN0eWxlPXt7IGZsZXg6IFwiMSAwIDMwJVwiLCBtaW5XaWR0aDogXCIyMDBweFwiIH19XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BpbnB1dC1jb250YWluZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTdGF0ZSA/IFwiZm9jdXNlZFwiIDogXCJcIlxuICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3RhdGVcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWRTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVN0YXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzU3RhdGVGb2N1c2VkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QuYWRkKFwiZm9jdXNlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgb25CbHVyPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzU3RhdGVGb2N1c2VkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3VycmVudFRhcmdldC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIHN0eWxlPXt7IGRpc3BsYXk6IFwibm9uZVwiIH19Pjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICB7aXNTdGF0ZUZvY3VzZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBTdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7c3RhdGVzLm1hcCgoc3RhdGUpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17c3RhdGUudmFsdWV9IHZhbHVlPXtzdGF0ZS52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmxvYXRpbmctbGFiZWwtZGRcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IFN0YXRlPHNwYW4gc3R5bGU9e3sgY29sb3I6IFwicmVkXCIgfX0+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7ZXJyb3JzLnN0YXRlICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6IFwicmVkXCIsIG1hcmdpbjogMCB9fT57ZXJyb3JzLnN0YXRlfTwvcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB7LyogQ2l0eSAqL31cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBmbGV4OiBcIjEgMCAzMCVcIiwgbWluV2lkdGg6IFwiMjAwcHhcIiB9fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgaW5wdXQtY29udGFpbmVyICR7c2VsZWN0ZWRDaXR5ID8gXCJmb2N1c2VkXCIgOiBcIlwifWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY2l0eVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWxlY3RlZENpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaXR5Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzQ2l0eUZvY3VzZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoXCJmb2N1c2VkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbkJsdXI9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0SXNDaXR5Rm9jdXNlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN1cnJlbnRUYXJnZXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBzdHlsZT17eyBkaXNwbGF5OiBcIm5vbmVcIiB9fT48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAge2lzQ2l0eUZvY3VzZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBDaXR5XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtjaXRpZXMubWFwKChjaXR5KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2NpdHkudmFsdWV9IHZhbHVlPXtjaXR5LnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaXR5LmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZsb2F0aW5nLWxhYmVsLWRkXCI+XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdCBDaXR5PHNwYW4gc3R5bGU9e3sgY29sb3I6IFwicmVkXCIgfX0+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7ZXJyb3JzLmNpdHkgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogXCJyZWRcIiwgbWFyZ2luOiAwIH19PntlcnJvcnMuY2l0eX08L3A+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgey8qIFppcCBDb2RlIC0gT1VUU0lERSB0aGUgbWFwICovfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgI
1469HN0eWxlPXt7IGZsZXg6IFwiMSAwIDMwJVwiLCBtaW5XaWR0aDogXCIyMDBweFwiIH19XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BpbnB1dC1jb250YWluZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuemlwQ29kZSA/IFwiZmlsbGVkXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiemlwQ29kZVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtRGF0YS56aXBDb2RlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LmFkZChcImZvY3VzZWRcIilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvbkJsdXI9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN1cnJlbnRUYXJnZXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsb2F0aW5nLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IFwiMTAwJVwiLCBwYWRkaW5nOiBcIjEycHggOHB4IDRweCA4cHhcIiB9fVxuICAgICAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezE1fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmbG9hdGluZy1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICBaaXAgQ29kZTxzcGFuIHN0eWxlPXt7IGNvbG9yOiBcInJlZFwiIH19Pio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAge2Vycm9ycy56aXBDb2RlICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6IFwicmVkXCIsIG1hcmdpbjogMCB9fT57ZXJyb3JzLnppcENvZGV9PC9wPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICB7c3RlcCA9PT0gMSAmJiAgKE9wZW5CaWxsIHx8IE9wZW5CaWxsRm9ybSkgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjdXNfYnRuc19zZXQgbXktM1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17aGFuZGxlTmV4dH0gY2xhc3NOYW1lPVwiY3VzX2NvbnRpbnVlX2J0bl9zXCI+XG4gICAgICAgICAgICAgICAgICB7T3BlbkJpbGxGb3JtID8gJ1NhdmUgQW5kIENvbnRpbnVlJyA6ICdDb250aW51ZSd9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7c3RlcCA9PT0gMiAmJiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHtjaG9vc2VkUGxhbiAmJiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImN1c19tX3llYXJseV9sYWJlbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwbGFuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwibW9udGhseVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxldGVkUGxhbl8gPT09IFwibW9udGhseVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVBsYW5DaGFuZ2UobW9udGhseVBsYW4/LnByaWNlSWQsIFwibW9udGhseVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgIE1vbnRobHlcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGxhblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInllYXJseVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxldGVkUGxhbl8gPT09IFwieWVhcmx5XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlUGxhbkNoYW5nZSh5ZWFybHlQbGFuPy5wcmljZUlkLCBcInllYXJseVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+e1wiIFwifVxuICAgICAgICAgICAgICAgICAgICAgIFllYXJseVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHtzZWxldGVkUGxhbl8gPT09IFwibW9udGhseVwiICYmIChcbiAgICAgICAgICAgICAgICAgIDxQYXltZW50R2F0ZVdheU1vbnRoIHVzZXJDYXJ0RGV0YWlscz17VXNlckNhcnREZXRhaWxzfSAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge3NlbGV0ZWRQbGFuXyA9PT0gXCJ5ZWFybHlcIiAmJiAoXG4gICAgICAgICAgICAgICAgICA8UGF5bWVudEdhdGVXYXlZZWFyIHVzZXJDYXJ0RGV0YWlscz17VXNlckNhcnREZXRhaWxzfSAvPlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImN1c19idG5zX3NldFwiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVCYWNrfSBjbGFzc05hbWU9XCJiYWNrX2J0bl9wZ1wiPlxuICAgICAgICAgICAgICAgICAgICBCYWNrXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGF5bWVudH1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogMTAgfX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY3VzX2NvbnRpbnVlX2J0bl9zXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQ29udGludWVcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge3N0ZXAgPT09IDMgJiYgKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkIGN1c19zdWNjZXNzX2NhcmRcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJweS1zdWNjZXNzLWhlYWRcIj5QYXltZW50IFN1Y2Nlc3NmdWw8L3A+XG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgYWx0PVwiY29va2llXCJcbiAgICAgICAgICAgICAgICAgI
1469HNyYz17dG9BYnNvbHV0ZVVybChcIm1lZGlhL21pc2MvcGF5bWVudHN1Y2Nlc3MucG5nXCIpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3NmLW1zZy10by1qaW0tdGlja19jXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHsvKiA8ZGl2IGNsYXNzTmFtZT1cInB1cmNoYXNlX2NvblwiPlxuICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJwdXJjaGFzZSBjb25maXJtXCJcbiAgICAgICAgICAgICAgICAgICAgc3JjPXt0b0Fic29sdXRlVXJsKFwibWVkaWEvbWlzYy9wdXJjaGFzZV9jb25maXJtLnBuZ1wiKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3NmLW1zZy10by1qaW0tdGlja19wY1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+UHVyY2hhc2UgQ29uZmlybWVkITwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj4gKi99XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImN1c19tc2dfcGNfaW5mb1wiPlxuICAgICAgICAgICAgICAgIDxkaXY+WW91ciBTaXggU2lnbWEgRnVubmVsczwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+U3Vic2NyaXB0aW9uIGlzIE5vdyBBY3RpdmUuPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB7LyogPGRpdiBjbGFzc05hbWU9J2N1c19tc2dfcGNfaW5mbyc+WW91ciBNb250aGx5IFBsYW4gb2YgJCAxOTcgaXMgQWN0aXZlIFxuICAgICAgICAgICAgRW5qb3kgZnVsbCBhY2Nlc3MgdG8gb3VyIHNlcnZpY2VzLjwvZGl2PiAqL31cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgaHJlZj17cG9ydGFsVXJsICsgYC8ke0NVUkVFTlRfQ09NUEFOWV9OQU1FfS9jaGVja2xpc3RgfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidmlld19kYXNoYm9hcmRfYnRuXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBTdGFydCBDb25uZWN0aW5nXG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Db250ZW50PlxuICAgIDwvPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUGF5bWVudEdhdGV3YXk7XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZUxvY2F0aW9uIiwidXNlU2VhcmNoUGFyYW1zIiwiQ29udGVudCIsIlBheW1lbnRHYXRlV2F5TW9udGgiLCJQYXltZW50R2F0ZVdheVllYXIiLCJ0b0Fic29sdXRlVXJsIiwiQ1VSRUVOVF9DT01QQU5ZX05BTUUiLCJHRVRfQUxMX1NVQlNDUklQVElPTlBMQU5TIiwiR0VUX0FMTF9VU0VSQUREUkVTUyIsIkdFVF9PUkRFUiIsIlBPU1RfQ1JFQVRFX0NIRUNLT1VUX1NFU1NJT04iLCJQT1NUX0NSRUFURV9VU0VSX0FERFJFU1MiLCJSRUdFWF9OT19OVU1CRVJfT1JfU1BFQ0lBTCIsIlJFR0VYX05PX1NQQUNFUyIsIlJFR0VYX0VNQUlMIiwiYXhpb3MiLCJkaXNhYmxlUGF5bWVudFNwbGFzaFNjcmVlbiIsImRpc2FibGVTcGxhc2hTY3JlZW4iLCJlbmFibGVQYXltZW50U3BsYXNoU2NyZWVuIiwiZW5hYmxlU3BsYXNoU2NyZWVuIiwidXNlQXV0aCIsIlN3YWwiLCJpbml0aWFsRm9ybURhdGEiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImVtYWlsIiwiY291bnRyeSIsInN0YXRlIiwiY2l0eSIsInppcENvZGUiLCJhZGRyZXNzTGluZTEiLCJhZGRyZXNzTGluZTIiLCJQYXltZW50R2F0ZXdheSIsInN0ZXAiLCJzZXRTdGVwIiwiYXZhaWxhYmxlU3RhdGVzIiwic2V0QXZhaWxhYmxlU3RhdGVzIiwiYXZhaWxhYmxlQ2l0aWVzIiwic2V0QXZhaWxhYmxlQ2l0aWVzIiwic2F2ZWRFbWFpbCIsInNldFNhdmVkRW1haWwiLCJlcnJvcnMiLCJzZXRFcnJvcnMiLCJ2aXNpdGVkU3RlcHMiLCJzZXRWaXNpdGVkU3RlcHMiLCJzZWFyY2hQYXJhbXMiLCJjaG9vc2VkUGxhbiIsInNldENob29zZWRQbGFuIiwic2VsZXRlZFBsYW5fIiwic2V0U2VsZXRlZFBsYW5fIiwiY3VycmVudFVzZXIiLCJzZXRDdXJyZW50VXNlciIsIm9yZGVySWQiLCJzZXRPcmRlcklkIiwiVXNlckNhcnREZXRhaWxzIiwic2V0VXNlckNhcnREZXRhaWxzIiwicHJpY2VJZCIsInNldFByaWNlSWQiLCJzdGF0dXMiLCJzZXRTdGF0dXMiLCJsb2NhdGlvbiIsImZsYWciLCJzZXRGbGFnIiwiY291cG9uQ29kZSIsInNldENvdXBvbkNvZGUiLCJwb3J0YWxVcmwiLCJ3aW5kb3ciLCJvcmlnaW4iLCJzdWJzY3JpcHRpb25QbGFuRGV0YWlscyIsInNldFN1YnNjcmlwdGlvblBsYW5EZXRhaWxzIiwibW9udGhseVBsYW4iLCJzZXRNb250aGx5UGxhbiIsInllYXJseVBsYW4iLCJzZXRZZWFybHlQbGFuIiwiY291bnRyaWVzIiwic2V0Q291bnRyaWVzIiwic3RhdGVzIiwic2V0U3RhdGVzIiwiY2l0aWVzIiwic2V0Q2l0aWVzIiwic2VsZWN0ZWRDb3VudHJ5Iiwic2V0U2VsZWN0ZWRDb3VudHJ5IiwiT3BlbkJpbGwiLCJzZXRPcGVuQmlsbCIsInNlbGVjdGVkU3RhdGUiLCJzZXRTZWxlY3RlZFN0YXRlIiwic2VsZWN0ZWRDaXR5Iiwic2V0U2VsZWN0ZWRDaXR5IiwiaXNDb3VudHJ5Rm9jdXNlZCIsInNldElzQ291bnRyeUZvY3VzZWQiLCJpc1N0YXRlRm9jdXNlZCIsInNldElzU3RhdGVGb2N1c2VkIiwiaXNDaXR5Rm9jdXNlZCIsInNldElzQ2l0eUZvY3VzZWQiLCJ1c2VyQWRkcmVzcyIsInNldFVzZXJBZGRyZXNzIiwic2VsZWN0ZWRBZGRyZXNzSW5kZXgiLCJzZXRTZWxlY3RlZEFkZHJlc3NJbmRleCIsImxhc3RTZWxlY3RlZEFkZHJlc3NJbmRleCIsInNldExhc3RTZWxlY3RlZEFkZHJlc3NJbmRleCIsImJhY2tCdG5GbGFnIiwic2V0QmFja0J0bkZsYWciLCJPcGVuQmlsbEZvcm0iLCJzZXRPcGVuQmlsbEZvcm0iLCJvcGVuZm9ybSIsInNldG9wZW5mb3JtIiwiZm9ybURhdGEiLCJzZXRGb3JtRGF0YSIsInF1ZXJ5UGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwic2VhcmNoIiwic2VsZWN0ZWRQbGFuIiwiZ2V0IiwicGxhblR5cGUiLCJnZXRTdWJzY3JpcHRpb25QbGFuRGV0YWlscyIsImNvbnNvbGUiLCJsb2ciLCJnZXRQbGFuRGV0YWlsc0J5U2VsbFByaWNlIiwicmVzcG9uc2UiLCJkYXRhIiwiZSIsImVycm9yIiwicGxhbnMiLCJtYXRjaGVkTW9udGhseVBsYW4iLCJmaW5kIiwicGxhbiIsIm5hbWUiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwibWF0Y2hlZFllYXJseVBsYW4iLCJnZXRPcmRlcndpdGhQbGFuIiwicGFyc2VJbnQiLCJzZXNzaW9uT3JkZXJJZCIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsInBvc3QiLCJoYW5kbGVDaGFuZ2UiLCJ2YWx1ZSIsInRhcmdldCIsInRlc3QiLCJwcmV2RXJyb3JzIiwicHJldiIsIm5ld0Vycm9ycyIsInZhbGlkYXRlU3RlcDEiLCJ0cmltIiwibGVuZ3RoIiwiT2JqZWN0Iiwia2V5cyIsImFkZHJlc3NJZCIsImxhdGVzdEFkZHJl
1469c3NJZCIsImhhbmRsZU5leHQiLCJjcmVhdGVVc2VyQWRkcmVzcyIsImhhbmRsZVBsYW5DaGFuZ2UiLCJvcmRlclJlc3BvbnNlIiwicGFyYW1zIiwic2V0IiwibmV3VXJsIiwicGF0aG5hbWUiLCJ0b1N0cmluZyIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJoYW5kbGVQYXltZW50IiwiY3VycmVuY3kiLCJkb21haW5VcmwiLCJjb21wYW55TmFtZSIsInNlc3Npb25VcmwiLCJsb2NhbFN0b3JhZ2UiLCJyZW1vdmVJdGVtIiwiaHJlZiIsIm1lc3NhZ2UiLCJmaXJlIiwiaW1hZ2VVcmwiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJ0aXRsZSIsImh0bWwiLCJjb25maXJtQnV0dG9uVGV4dCIsImNvbmZpcm1CdXR0b25Db2xvciIsImFsZXJ0IiwiZ2V0Y3VycmVudGRhdGEiLCJyYXdEYXRhIiwic2ltcGxpZmllZCIsIm1hcCIsImFkZHIiLCJsaW5lMSIsImxpbmUyIiwicGhvbmUiLCJjb250YWN0TmFtZSIsInBvc3RhbENvZGUiLCJoYW5kbGVvcGVuZm9ybSIsImhhbmRsZWxpbmsiLCJoYW5kbGVCYWNrIiwiYWRkcmVzc1R5cGUiLCJmaWVsZHMiLCJsYWJlbCIsImhhbmRsZUNvdW50cnlDaGFuZ2UiLCJjb3VudHJ5Q29kZSIsInBhcmVudCIsImNsb3Nlc3QiLCJjbGFzc0xpc3QiLCJhZGQiLCJyZW1vdmUiLCJ0aGVuIiwic3RhdGVPcHRpb25zIiwiY2F0Y2giLCJmaW5hbGx5IiwiaGFuZGxlU3RhdGVDaGFuZ2UiLCJzdGF0ZUNvZGUiLCJjaXR5T3B0aW9ucyIsImhhbmRsZUNpdHlDaGFuZ2UiLCJzZWxlY3RlZE9wdGlvbiIsInN0ZXBMYWJlbHMiLCJkaXYiLCJzdHlsZSIsIndpZHRoIiwibWFyZ2luIiwicGFkZGluZyIsImNsYXNzTmFtZSIsImgyIiwib3ZlcmZsb3dZIiwiYm9yZGVyIiwiYm9yZGVyUmFkaXVzIiwibWF4SGVpZ2h0IiwiaDQiLCJhZGRyZXNzIiwiaW5kZXgiLCJkaXNwbGF5IiwibWFyZ2luQm90dG9tIiwiY3Vyc29yIiwiZm9udFdlaWdodCIsIm9uQ2xpY2siLCJpbnB1dCIsInR5cGUiLCJjaGVja2VkIiwib25DaGFuZ2UiLCJtYXJnaW5SaWdodCIsImEiLCJjb2xvciIsInRleHREZWNvcmF0aW9uIiwibWFyZ2luVG9wIiwicHJldmVudERlZmF1bHQiLCJmbGV4V3JhcCIsImdhcCIsImZpbHRlciIsImZpZWxkIiwiZmxleCIsIm1pbldpZHRoIiwicG9zaXRpb24iLCJvbkZvY3VzIiwiY3VycmVudFRhcmdldCIsInBhcmVudEVsZW1lbnQiLCJvbkJsdXIiLCJtYXhMZW5ndGgiLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwic3BhbiIsInAiLCJzZWxlY3QiLCJvcHRpb24iLCJkaXNhYmxlZCIsImJ1dHRvbiIsImJyIiwidXNlckNhcnREZXRhaWxzIiwibWFyZ2luTGVmdCIsImltZyIsImFsdCIsInNyYyJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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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.