/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ 4497: /***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => { // EXTERNAL MODULE: ./node_modules/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4848); // EXTERNAL MODULE: ./node_modules/react-dom/client.js var client = __webpack_require__(5338); // EXTERNAL MODULE: ./node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js var QueryClientProvider = __webpack_require__(7665); // EXTERNAL MODULE: ./node_modules/@tanstack/query-core/build/modern/queryClient.js + 4 modules var queryClient = __webpack_require__(6417); ;// ./src/rplus-forms/shared/config/sharedQueryClient.ts const sharedQueryClient = new queryClient/* QueryClient */.E({ defaultOptions: { queries: { retry: false, gcTime: 1000 * 60 * 5, // 5 minutes staleTime: 1000 * 60 * 30 // 30 minutes } } }); // EXTERNAL MODULE: ./node_modules/react-google-recaptcha/lib/esm/index.js + 3 modules var esm = __webpack_require__(3413); // EXTERNAL MODULE: ./node_modules/react-hook-form/dist/index.esm.mjs var index_esm = __webpack_require__(9785); // EXTERNAL MODULE: ./node_modules/react/index.js var react = __webpack_require__(6540); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/button/dist/Button.esm.js + 1 modules var Button_esm = __webpack_require__(9438); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/checkbox/dist/Checkbox.esm.js var Checkbox_esm = __webpack_require__(2957); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/form-field/dist/FormField.esm.js var FormField_esm = __webpack_require__(6929); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/heading/dist/Heading.esm.js var Heading_esm = __webpack_require__(1266); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/input/dist/Input.esm.js var Input_esm = __webpack_require__(7434); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/select/dist/Select.esm.js var Select_esm = __webpack_require__(6162); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/stack/dist/Stack.esm.js var Stack_esm = __webpack_require__(1338); // EXTERNAL MODULE: ./node_modules/@ramsey-design-system/text/dist/Text.esm.js var Text_esm = __webpack_require__(1030); ;// ./src/rplus-forms/shared/utils/analyticsFieldsToCapture.ts const fieldsToCapture = [ { key: 'rs_utm_medium', payloadKey: 'utm_medium', sourceType: ['query-parameter', 'cookie'] }, { key: 'rs_utm_term', payloadKey: 'utm_term', sourceType: ['query-parameter', 'cookie'] }, { key: 'rs_utm_source', payloadKey: 'utm_source', sourceType: ['query-parameter', 'cookie'] }, { key: 'rs_utm_content', payloadKey: 'utm_content', sourceType: ['query-parameter', 'cookie'] }, { key: 'rs_utm_campaign', payloadKey: 'utm_campaign', sourceType: ['query-parameter', 'cookie'] }, { key: 'campaign_id', payloadKey: 'utm_id', sourceType: ['query-parameter', 'cookie'] }, { key: 'rs_gclid', payloadKey: 'gclid', sourceType: ['query-parameter', 'cookie'] }, { key: 'fbclid', payloadKey: 'fbclid', sourceType: 'query-parameter' }, { key: 'gad_source', payloadKey: 'utm_source', sourceType: 'query-parameter' }, { key: 'gad_campaignid', payloadKey: 'utm_campaign_id', sourceType: 'query-parameter' } ]; const organicSources = [ { domain: 'google.', source: 'google' }, { domain: 'bing.com', source: 'bing' }, { domain: 'yahoo.', source: 'yahoo' }, { domain: 'duckduckgo.com', source: 'duckduckgo' } ]; ;// ./src/rplus-forms/shared/hooks/useUrlParams.ts function getHostnameFromReferrer(referrer) { let hostname = new URL(referrer).hostname; if (hostname.startsWith('www.')) { hostname = hostname.slice(4); } return hostname; } function setParamsFromReferrer(analyticsParams) { const referrer = document.referrer; if (!referrer) { analyticsParams.set('utm_medium', 'direct'); analyticsParams.set('utm_source', 'direct'); return; } for (const { domain, source } of organicSources) { if (referrer.includes(domain)) { analyticsParams.set('utm_medium', 'organic'); analyticsParams.set('utm_source', source); return; } } analyticsParams.set('utm_medium', 'referral'); analyticsParams.set('utm_source', getHostnameFromReferrer(referrer)); } function parseCookies() { return document.cookie .split(';') .reduce((acc, cookie) => { const [key, value] = cookie.split('='); if (key) { const trimmedKey = key.trim(); const trimmedValue = value ? value.trim() : null; acc[trimmedKey] = trimmedValue ? decodeURIComponent(trimmedValue) : null; } return acc; }, {}); } function trySetFromQueryParam(field, params, analyticsParams) { const paramValue = params.get(field.payloadKey) || params.get(field.key); if (!paramValue) { return false; } if (field.key === 'gad_source') { analyticsParams.set('utm_source', 'google'); } else { analyticsParams.set(field.payloadKey, paramValue); } return true; } function trySetFromCookie(field, cookies, analyticsParams) { const cookieValue = cookies[field.payloadKey] || cookies[field.key]; if (!cookieValue) { return false; } analyticsParams.set(field.payloadKey, cookieValue); return true; } function processField(field, params, cookies, analyticsParams) { const sources = Array.isArray(field.sourceType) ? field.sourceType : [field.sourceType]; for (const source of sources) { if (source === 'query-parameter' && trySetFromQueryParam(field, params, analyticsParams)) { break; } if (source === 'cookie' && trySetFromCookie(field, cookies, analyticsParams)) { break; } } } const captureAnalytics = (fieldsToCapture) => { const params = new URLSearchParams(globalThis.location.search); const cookies = parseCookies(); const analyticsParams = new URLSearchParams(); for (const field of fieldsToCapture) { if (field.key === 'gad_source' && analyticsParams.has('utm_source')) { continue; } processField(field, params, cookies, analyticsParams); } const hasGoogleAdsParams = params.get('gad_source') || params.get('gad_campaignid') || params.get('gclid') || params.get('gbraid'); if (hasGoogleAdsParams) { analyticsParams.set('utm_medium', 'cpc'); } if (!analyticsParams.has('utm_source') && !analyticsParams.has('utm_medium')) { setParamsFromReferrer(analyticsParams); } return analyticsParams; }; const mapUrlParamsToCamel = (urlParams) => { return { utmMedium: urlParams.utm_medium ?? undefined, utmTerm: urlParams.utm_term ?? undefined, utmSource: urlParams.utm_source ?? undefined, utmContent: urlParams.utm_content ?? undefined, utmCampaign: urlParams.utm_campaign ?? undefined, paidMediaCampaignId: urlParams.campaign_id ?? urlParams.utm_campaign_id ?? undefined, gclid: urlParams.gclid ?? undefined, fbclid: urlParams.fbclid ?? undefined }; }; ;// ./src/rplus-forms/shared/utils/fpuAnalyticsFieldsToCapture.ts const fpuFieldsToCapture = [ { key: 'rs_gclid', payloadKey: 'gclid', sourceType: 'cookie' }, { key: 'fbclid', payloadKey: 'fbclid', sourceType: 'query-parameter' }, { key: 'utm_campaign', payloadKey: 'utmCampaign', sourceType: 'query-parameter' }, { key: 'utm_medium', payloadKey: 'utmMedium', sourceType: 'query-parameter' }, { key: 'utm_source', payloadKey: 'utmSource', sourceType: 'query-parameter' }, { key: 'utm_content', payloadKey: 'utmContent', sourceType: 'query-parameter' }, { key: 'utm_term', payloadKey: 'utmTerm', sourceType: 'query-parameter' }, { key: 'campaign_id', payloadKey: 'paidMediaCampaignId', sourceType: ['query-parameter', 'cookie'] } ]; ;// ./src/rplus-forms/modules/FpuMarketingForm/hooks/useFpuMarketingForm.ts function useFpuMarketingForm() { const [dialogValues, setDialogValues] = (0,react.useState)(null); const [urlParams, setUrlParams] = (0,react.useState)({}); const formMethods = (0,index_esm/* useForm */.mN)(); (0,react.useEffect)(() => { if (window._FPU_MARKETING_FORM_DIALOG) { setDialogValues(window._FPU_MARKETING_FORM_DIALOG); } const capturedParams = captureAnalytics(fpuFieldsToCapture); setUrlParams(Object.fromEntries(capturedParams.entries())); }, []); return { dialogValues, formMethods, urlParams }; } ;// ./src/rplus-forms/shared/utils/constants.ts const CONSTS = { PATHS: { API: { FPU_FORM_SUBMISSION: '/api/fpu-marketing-form/submit', UPCOMING_WEBINARS: '/api/video-conferencing/webinars/upcoming', WEBINAR_REGISTRATION: '/api/webinar/register', WEBINAR_RECORDED: '/api/webinar/register/recorded', LIVESTREAM_GIVEAWAY_REGISTRATION: '/api/livestream-registration' } }, EMAIL: { EVERYDOLLAR_SUPPORT: 'help@everydollar.com' } }; const { PATHS, EMAIL } = CONSTS; ;// ./src/rplus-forms/shared/application.ts const applicationConfig = { environment: window.FORMS_BFF_CONFIG.env, magnoliaFormsWebUrl: window.FORMS_BFF_CONFIG.env === 'local.' ? 'http://localhost:8082/forms/ramsey-plus' : `https://www.${window.FORMS_BFF_CONFIG.env}ramseysolutions.com/forms/ramsey-plus` }; ;// ./src/rplus-forms/modules/FpuMarketingForm/hooks/useSubmitFpuMarketingForm.ts function useSubmitFpuMarketingForm() { const submitForm = (0,react.useCallback)(async (formData) => { try { const response = await fetch(`${applicationConfig.magnoliaFormsWebUrl}${PATHS.API.FPU_FORM_SUBMISSION}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }); let data; try { data = await response.json(); } catch { data = null; } if (!response.ok) { console.error(`Form submission failed with status ${response.status}`); return { success: false, status: response.status, message: data?.message ?? 'There was an error submitting the form. Please try again later.', errorCode: data?.errorCode }; } return { success: data?.success ?? response.ok, status: response.status, message: data?.message ?? 'Form submitted successfully', errorCode: data?.errorCode }; } catch (error) { console.error('Form submission error:', error); return { success: false, status: 0, message: 'There was an error submitting the form. Please try again later.', errorCode: 'NETWORK_ERROR' }; } }, []); return { submitForm }; } ;// ./src/rplus-forms/shared/hooks/useRecaptcha.ts const useRecaptcha = () => { const captchaToken = (0,react.useRef)(null); const recaptchaRef = (0,react.useRef)(null); const handleRecaptcha = (0,react.useCallback)((token) => { captchaToken.current = token; }, []); (0,react.useEffect)(() => { const refreshCaptcha = () => { if (recaptchaRef.current && captchaToken.current) { recaptchaRef.current.reset(); captchaToken.current = null; } }; let tokenRefreshTimeout = null; if (captchaToken.current) { tokenRefreshTimeout = setTimeout(refreshCaptcha, 110000); } return () => { if (tokenRefreshTimeout) { clearTimeout(tokenRefreshTimeout); } }; }, [captchaToken]); return { captchaToken, recaptchaRef, handleRecaptcha }; }; /* harmony default export */ const hooks_useRecaptcha = (useRecaptcha); ;// ./src/rplus-forms/modules/FpuMarketingForm/constants.ts const API_URL = 'api/register'; const PASTOR_ROLES = [ { label: 'Executive Pastor', value: 'Executive Pastor' }, { label: 'Lead Pastor', value: 'Lead Pastor' }, { label: 'Worship Pastor', value: 'Worship Pastor' }, { label: 'Youth Pastor', value: 'Youth Pastor' }, { label: 'Assistant Pastor', value: 'Assistant Pastor' }, { label: 'Discipleship Pastor', value: 'Discipleship Pastor' }, { label: 'Pastor - Other', value: 'Pastor - Other' }, { label: "I'm not a pastor", value: 'Non-pastor' } ]; const ORGANIZATION_ROLES = [ { label: 'FPU Coordinator', value: 'Coordinator' }, { label: 'Executive Pastor', value: 'Executive Pastor' }, { label: 'Lead Pastor', value: 'Lead Pastor' }, { label: 'Pastor - Other', value: 'Pastor - Other' }, { label: 'Staff', value: 'Staff - Non-Pastoral' }, { label: 'Volunteer', value: 'Volunteer' }, { label: 'Other', value: 'Other' } ]; const DENOMINATIONS = [ { label: 'Nondenominational', value: 'Nondenominational' }, { label: 'Baptist, Southern Baptist', value: 'Baptist, Southern Baptist' }, { label: 'Baptist, Other', value: 'Baptist, Other' }, { label: 'Assemblies of God', value: 'Assemblies of God' }, { label: 'Bible Church', value: 'Bible Church' }, { label: 'Catholic', value: 'Catholic' }, { label: 'Christian', value: 'Christian' }, { label: 'Christian, Disciples of Christ', value: 'Christian, Disciples of Christ' }, { label: 'Church of Christ', value: 'Church of Christ' }, { label: 'Church of God', value: 'Church of God' }, { label: 'Church of God in Christ', value: 'Church of God in Christ' }, { label: 'Methodist, Global', value: 'Methodist, Global' }, { label: 'Presbyterian Church, USA', value: 'Presbyterian Church, USA' }, { label: 'Presbyterian Church, PCA', value: 'Presbyterian Church, PCA' }, { label: 'Presbyterian, Other', value: 'Presbyterian, Other' }, { label: 'Reformed', value: 'Reformed' }, { label: 'Seventh Day Adventist', value: 'Seventh Day Adventist' }, { label: 'African Methodist Evangelical', value: 'African Methodist Evangelical' }, { label: 'Anglican', value: 'Anglican' }, { label: 'Charismatic', value: 'Charismatic' }, { label: 'Church of the Brethren', value: 'Church of the Brethren' }, { label: 'Eastern Orthodox', value: 'Eastern Orthodox' }, { label: 'Episcopal', value: 'Episcopal' }, { label: 'Evangelical Free', value: 'Evangelical Free' }, { label: 'Foursquare', value: 'Foursquare' }, { label: 'Jewish', value: 'Jewish' }, { label: 'Latter-day Saints', value: 'Latter-day Saints' }, { label: 'Lutheran, Other', value: 'Lutheran, Other' }, { label: 'Lutheran, Missouri Synod', value: 'Lutheran, Missouri Synod' }, { label: 'Mennonite', value: 'Mennonite' }, { label: 'Methodist, United', value: 'Methodist, United' }, { label: 'Nazarene', value: 'Nazarene' }, { label: 'Pentecostal', value: 'Pentecostal' }, { label: 'Unitarian', value: 'Unitarian' }, { label: 'United Church of Christ', value: 'United Church of Christ' }, { label: 'Wesleyan', value: 'Wesleyan' }, { label: 'Congregational', value: 'Congregational' }, { label: 'Other', value: 'Other' } ]; // EXTERNAL MODULE: ./node_modules/react-places-autocomplete/dist/index.js var dist = __webpack_require__(3931); ;// ./src/rplus-forms/shared/utils/addressAutocomplete.ts /* eslint-disable camelcase */ const STREET_NUMBER = 'street_number'; const STREET_NAME = 'route'; const UNIT_NUMBER = 'subpremise'; const CITY = 'locality'; const SUBLOCALITY = 'sublocality_level_1'; const STATE = 'administrative_area_level_1'; const ZIP = 'postal_code'; function extractStreetAddress(components) { const streetNumber = components.find((component) => component.types.includes(STREET_NUMBER)) ?.long_name || ''; const route = components.find((component) => component.types.includes(STREET_NAME)) ?.short_name || ''; const subpremise = components.find((component) => component.types.includes(UNIT_NUMBER)) ?.long_name || ''; if (!streetNumber || !route) { return null; } return `${streetNumber} ${route} ${subpremise ? `#${subpremise}` : ''}`.trim(); } function extractCityStateAndZip(components) { const city = components.find((component) => component.types.includes(CITY) || component.types.includes(SUBLOCALITY))?.long_name || ''; const state = components.find((component) => component.types.includes(STATE)) ?.short_name || ''; const zip = components.find((component) => component.types.includes(ZIP))?.long_name || ''; return { city, state, zip }; } function extractOrgName(place) { return place.name || ''; } function extractPhone(place) { return place.formatted_phone_number || ''; } // EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.mjs var clsx = __webpack_require__(4164); // EXTERNAL MODULE: ./node_modules/usehooks-ts/dist/index.js var usehooks_ts_dist = __webpack_require__(8486); ;// ./src/rplus-forms/shared/components/PlacesSearchLoadingIndicator.tsx function PlacesSearchLoadingIndicator({ isLoading }) { if (!isLoading) return null; return ((0,jsx_runtime.jsxs)("div", { className: "absolute left-0 right-0 z-10", "data-testid": "loading-indicator", children: [(0,jsx_runtime.jsx)("div", { className: "w-full border border-[#e8eced] bg-white p-2 shadow-sm", children: (0,jsx_runtime.jsx)("div", { className: "w-1/2 animate-pulse bg-gray-20 p-1" }) }), (0,jsx_runtime.jsx)("div", { className: "text-sm w-full border border-[#e8eced] bg-white p-2 shadow-sm", children: (0,jsx_runtime.jsx)("div", { className: "w-5/6 animate-pulse bg-gray-20 p-1" }) }), (0,jsx_runtime.jsx)("div", { className: "text-sm w-full border border-[#e8eced] bg-white p-2 shadow-sm", children: (0,jsx_runtime.jsx)("div", { className: "w-3/4 animate-pulse bg-gray-20 p-1" }) }), (0,jsx_runtime.jsx)("div", { className: "text-sm w-full border border-[#e8eced] bg-white p-2 shadow-sm", children: (0,jsx_runtime.jsx)("div", { className: "w-1/3 animate-pulse bg-gray-20 p-1" }) }), (0,jsx_runtime.jsx)("div", { className: "text-sm w-full border border-[#e8eced] bg-white p-2 shadow-sm", children: (0,jsx_runtime.jsx)("div", { className: "w-1/4 animate-pulse bg-gray-20 p-1" }) })] })); } /* harmony default export */ const components_PlacesSearchLoadingIndicator = (PlacesSearchLoadingIndicator); ;// ./src/rplus-forms/shared/components/PlacesAutocompleteField.tsx // Libs // Components function PlacesAutocompleteField({ inputValue, handleSelect, placeholder, errorMessage, label, onChange, render = true, ...props }) { const [value, setValue] = (0,react.useState)(inputValue); const handleChange = (value) => { if (onChange) { onChange(value); } setValue(value); }; const status = (0,usehooks_ts_dist/* useScript */.nW)(`https://maps.googleapis.com/maps/api/js?key=AIzaSyAXZJ5ibXX4V6SB68IuGXY9PjypEAvf44M&libraries=places`, { removeOnUnmount: false }); const isScriptLoaded = status === 'ready'; (0,react.useEffect)(() => { setValue(inputValue); }, [inputValue]); if (!isScriptLoaded || !render) { return null; } return ((0,jsx_runtime.jsx)(dist/* default */.Ay, { value: value, onChange: handleChange, onSelect: handleSelect, children: ({ getInputProps, suggestions, getSuggestionItemProps, loading }) => ((0,jsx_runtime.jsxs)("div", { className: `rds-FormField ${(0,clsx/* default */.A)({ 'is-invalid': errorMessage })}`, children: [(0,jsx_runtime.jsxs)("div", { className: `rds-Input relative ${(0,clsx/* default */.A)({ 'is-invalid': errorMessage })}`, children: [(0,jsx_runtime.jsx)("input", { ...getInputProps({ placeholder }), "data-testid": "org-address-input-selection", ...props, id: "organization-address" }), (0,jsx_runtime.jsxs)("div", { className: "absolute left-0 right-0 z-50", children: [!suggestions.length ? ((0,jsx_runtime.jsx)(components_PlacesSearchLoadingIndicator, { isLoading: loading })) : null, suggestions.map((suggestion, idx) => { const className = suggestion.active ? 'suggestion-item--active' : 'suggestion-item'; const style = suggestion.active ? { backgroundColor: '#fafafa', cursor: 'pointer' } : { backgroundColor: '#ffffff', cursor: 'pointer' }; return ((0,react.createElement)("div", { ...getSuggestionItemProps(suggestion, { className, style }), key: idx, "data-testid": "address-suggestions-item", className: "text-sm w-full border border-[#e8eced] p-2 shadow-sm" }, (0,jsx_runtime.jsx)("span", { className: "text-sm", children: suggestion.description }))); })] })] }), errorMessage && ((0,jsx_runtime.jsx)("p", { className: "rds-FormField-error mt-[4px]", children: typeof errorMessage === 'string' ? errorMessage : String(errorMessage) }))] })) })); } /* harmony default export */ const components_PlacesAutocompleteField = (PlacesAutocompleteField); ;// ./src/rplus-forms/modules/FpuMarketingForm/components/NotAPastorMessage.tsx function NotAPastorMessage() { return ((0,jsx_runtime.jsx)("div", { className: "rounded p-2", children: (0,jsx_runtime.jsxs)(Text_esm/* default */.A, { size: "bodyMedium", className: "mb-2 font-semibold", children: ["Coordinators get ", (0,jsx_runtime.jsx)("em", { children: "Financial Peace University" }), " for free when they lead a class.", ' ', (0,jsx_runtime.jsx)("a", { href: "https://theramseysolutions.com/money/coordinator", children: "Talk with our team for more information." })] }) })); } /* harmony default export */ const components_NotAPastorMessage = (NotAPastorMessage); ;// ./src/rplus-forms/modules/FpuMarketingForm/FpuMarketingForm.tsx // Libs // RDS // Hooks // Utils function FpuMarketingForm() { const [isSubmitting, setIsSubmitting] = (0,react.useState)(false); const [submissionError, setSubmissionError] = (0,react.useState)(''); const [showSuccessMessage, setShowSuccessMessage] = (0,react.useState)(false); const [address, setAddress] = (0,react.useState)(''); const [isNonPastorSelected, setIsNonPastorSelected] = (0,react.useState)(false); const [isSubmitDisabled, setIsSubmitDisabled] = (0,react.useState)(false); const { recaptchaRef, handleRecaptcha } = hooks_useRecaptcha(); const { dialogValues, formMethods, urlParams } = useFpuMarketingForm(); const { register, setValue, handleSubmit, formState: { errors }, clearErrors, reset: resetForm } = formMethods; const { submitForm } = useSubmitFpuMarketingForm(); const handleSelect = async (value) => { const results = await (0,dist/* geocodeByAddress */.IU)(value); const place = results[0]; const formattedAddress = place.formatted_address; const addressComponents = place.address_components; const street = extractStreetAddress(addressComponents); const { city, state: stateCode, zip } = extractCityStateAndZip(addressComponents); setAddress(formattedAddress); setValue('organizationAddress', formattedAddress); setValue('organizationStreet', street); setValue('organizationCity', city); setValue('organizationStateCode', stateCode); setValue('organizationZip', zip); }; const categories = dialogValues?.gtmEvents?.map((ev) => ev.category).join('|') ?? ''; const actions = dialogValues?.gtmEvents?.map((ev) => ev.action).join('|') ?? ''; const labels = dialogValues?.gtmEvents?.map((ev) => ev.label).join('|') ?? ''; const handleAddressChange = (value) => setAddress(value); const onSubmit = async (formData) => { if (isSubmitting) return; setIsSubmitting(true); setSubmissionError(''); const path = globalThis.location?.pathname || '/'; const payload = { ...formData, ...dialogValues, ...urlParams, path, leadSource: dialogValues?.leadSource ?? globalThis.location.href, smsOptIn: formData.smsOptIn ?? false, emailOptIn: formData.emailOptIn ?? false }; const response = await submitForm(payload); if (response.success) { // Push GTM event data to gtmDataLayer for Google Analytics if (dialogValues?.gtmEvents && dialogValues.gtmEvents.length > 0) { // @ts-ignore globalThis.gtmDataLayer = globalThis.gtmDataLayer || []; // Push each GTM event to gtmDataLayer for (const gtmEvent of dialogValues.gtmEvents) { // @ts-ignore globalThis.gtmDataLayer?.push({ event: 'formSubmission', event_parameters: { module_type: gtmEvent.category, module_category: gtmEvent.action, module_label: gtmEvent.label } }); } } if (dialogValues?.successUrl) { window.location.href = dialogValues.successUrl; return; } setShowSuccessMessage(true); resetForm(); clearErrors(); } else { setSubmissionError(response.message || 'There was an error submitting the form. Please try again later.'); } setIsSubmitting(false); }; if (showSuccessMessage) { return ((0,jsx_runtime.jsxs)("div", { className: "webinar-lead-form-success", children: [(0,jsx_runtime.jsx)(Heading_esm/* default */.A, { level: "2", size: "medium", className: "mb-2 text-blue-80 text-center", children: "Thank you for registering!" }), (0,jsx_runtime.jsx)(Text_esm/* default */.A, { size: "bodyMedium", className: "text-center", children: "Keep an eye out for an email with further details!" })] })); } if (!dialogValues) { return (0,jsx_runtime.jsx)(Text_esm/* default */.A, { children: "Loading form..." }); } return ((0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [submissionError && ((0,jsx_runtime.jsx)("div", { className: "gzl-FormField-error FormErrors u-spacingStack4", role: "alert", children: (0,jsx_runtime.jsxs)("div", { className: "gzl-FormField-error", children: [(0,jsx_runtime.jsx)(Heading_esm/* default */.A, { level: "3", color: "brand", size: "small", children: submissionError }), (0,jsx_runtime.jsxs)(Text_esm/* default */.A, { size: "bodySmall", children: ["Please email support at", ' ', (0,jsx_runtime.jsx)("a", { href: "mailto:support@ramseysolutions.com", children: "support@ramseysolutions.com" }), ' ', "or try again later."] })] }) })), (0,jsx_runtime.jsx)("form", { onSubmit: handleSubmit(onSubmit), "data-testid": "fpu-marketing-form", "data-analytics-form": dialogValues?.formSource || 'FPU Marketing Form', "data-analytics-form-module-category": categories, "data-analytics-form-module-action": actions, "data-analytics-form-module-label": labels, children: (0,jsx_runtime.jsxs)(Stack_esm/* default */.A, { vertical: true, spacing: "lg", horizontalAlignment: "fill", className: "w-full max-w-[425px] mx-auto", children: [dialogValues?.showName && ((0,jsx_runtime.jsx)(FormField_esm/* default */.A, { label: "Name", invalid: !!errors.firstName || !!errors.lastName, errors: [errors.firstName?.message, errors.lastName?.message], className: "w-full", children: (props) => ((0,jsx_runtime.jsxs)(Stack_esm/* default */.A, { children: [(0,jsx_runtime.jsx)(Input_esm/* default */.A, { ...props, ...register('firstName', { required: 'First name is required' }), "data-testid": "firstName", type: "text", placeholder: "First Name", className: "w-1/2" }), (0,jsx_runtime.jsx)(Input_esm/* default */.A, { ...props, ...register('lastName', { required: 'Last name is required' }), "data-testid": "lastName", type: "text", placeholder: "Last Name", className: "w-1/2 ml-2" })] })) })), (0,jsx_runtime.jsx)(FormField_esm/* default */.A, { label: "Email", invalid: !!errors.email, errors: [errors.email?.message], className: "w-full", children: (props) => ((0,jsx_runtime.jsx)(Input_esm/* default */.A, { ...props, ...register('email', { required: 'Email is required' }), "data-testid": "email", type: "email", placeholder: "Email Address" })) }), dialogValues?.showPhone && ((0,jsx_runtime.jsx)(FormField_esm/* default */.A, { label: "Phone Number", invalid: !!errors.phone, errors: [errors.phone?.message], className: "w-full", children: (props) => ((0,jsx_runtime.jsx)(Input_esm/* default */.A, { ...props, placeholder: "Phone Number", ...register('phone', dialogValues.showPhoneRequired ? { required: 'Phone is required' } : {}), "data-testid": "phone" })) })), dialogValues?.showOrganizationName && ((0,jsx_runtime.jsx)(FormField_esm/* default */.A, { label: "Organization Name:", invalid: !!errors.organizationName, errors: [errors.organizationName?.message], className: "w-full", children: (props) => ((0,jsx_runtime.jsx)(Input_esm/* default */.A, { ...props, placeholder: "Organization Name", ...register('organizationName', dialogValues?.showOrganizationNameRequired ? { required: 'Organization Name is required' } : {}), "data-testid": "organizationName" })) })), dialogValues?.showOrganizationAddress && ((0,jsx_runtime.jsx)(FormField_esm/* default */.A, { label: "Organization Address:", invalid: !!errors.organizationAddress, errors: [errors.organizationAddress?.message], className: "w-full", children: () => ((0,jsx_runtime.jsx)(index_esm/* Controller */.xI, { control: formMethods.control, name: "organizationAddress", rules: dialogValues.showOrganizationAddressRequired ? { required: 'Organization Address is required' } : {}, render: ({ field }) => ((0,jsx_runtime.jsx)(components_PlacesAutocompleteField, { ...field, handleSelect: handleSelect, onChange: (value) => { field.onChange(value); handleAddressChange(value); }, placeholder: "Enter address", inputValue: address ?? '' })) })) })), dialogValues?.showOrganizationDenomination && ((0,jsx_runtime.jsx)(FormField_esm/* default */.A, { label: "Organization Denomination:", invalid: !!errors.organizationDenomination, errors: [errors.organizationDenomination?.message], className: "w-full", children: (props) => ((0,jsx_runtime.jsxs)(Select_esm/* default */.A, { ...props, ...register('organizationDenomination', dialogValues?.showOrganizationDenominationRequired ? { required: 'Organization Denomination is required' } : {}), "data-testid": "organizationDenomination", children: [(0,jsx_runtime.jsx)("option", { value: "", children: "Select denomination" }), DENOMINATIONS.map((denomination) => ((0,jsx_runtime.jsx)("option", { value: denomination.value, children: denomination.label }, denomination.value)))] })) })), dialogValues?.showOrganizationDenomination && formMethods.watch('organizationDenomination') === 'Other' && ((0,jsx_runtime.jsx)(FormField_esm/* default */.A, { label: "Please specify your denomination:", invalid: !!errors.organizationDenominationDetails, errors: [errors.organizationDenominationDetails?.message], className: "w-full", children: (props) => ((0,jsx_runtime.jsx)(Input_esm/* default */.A, { ...props, ...register('organizationDenominationDetails', { required: 'Denomination details are required' }), "data-testid": "organizationDenominationDetails", type: "text", placeholder: "Enter denomination details", maxLength: 255 })) })), dialogValues?.showOrganizationRole && ((0,jsx_runtime.jsx)(FormField_esm/* default */.A, { label: "Organization Role:", invalid: !!errors.organizationRole, errors: [errors.organizationRole?.message], className: "w-full", children: (props) => ((0,jsx_runtime.jsxs)(Select_esm/* default */.A, { ...props, ...register('organizationRole', { required: dialogValues?.showOrganizationRoleRequired ? 'Organization Role is required' : false, onChange: (e) => { const selectedValue = e.target.value; setIsNonPastorSelected(selectedValue === 'Non-pastor'); setIsSubmitDisabled(selectedValue === 'Non-pastor'); } }), "data-testid": "organizationRole", children: [(0,jsx_runtime.jsx)("option", { value: "", children: "Select your role" }), (dialogValues?.roleType === 'ORGANIZATION_ROLES' ? ORGANIZATION_ROLES : PASTOR_ROLES).map((role) => ((0,jsx_runtime.jsx)("option", { value: role.value, children: role.label }, role.value)))] })) })), dialogValues?.showOrganizationSize && ((0,jsx_runtime.jsx)(FormField_esm/* default */.A, { label: "Weekly Attendance:", invalid: !!errors.organizationSize, errors: [errors.organizationSize?.message], children: (props) => ((0,jsx_runtime.jsx)(Input_esm/* default */.A, { ...props, ...register('organizationSize', dialogValues?.showOrganizationSizeRequired ? { required: 'Weekly Attendance is required' } : {}), "data-testid": "weeklyAttendance", type: "number", placeholder: "Enter weekly attendance" })) })), dialogValues?.showSmsOptIn && ((0,jsx_runtime.jsx)(Checkbox_esm/* default */.A, { label: "I would like to receive text messages about FPU for churches.", ...register('smsOptIn'), "data-testid": "smsOptIn" })), dialogValues?.showEmailOptIn && ((0,jsx_runtime.jsx)(Checkbox_esm/* default */.A, { label: "I would like to receive emails about FPU for churches.", ...register('emailOptIn'), "data-testid": "emailOptIn" })), (0,jsx_runtime.jsx)(esm/* default */.A, { size: "invisible", sitekey: window.FORMS_BFF_CONFIG.RECAPTCHA_SITE_KEY, ref: recaptchaRef, onChange: handleRecaptcha, "data-testid": "recaptcha" }), isNonPastorSelected && (0,jsx_runtime.jsx)(components_NotAPastorMessage, {}), (0,jsx_runtime.jsx)(Button_esm/* default */.A, { type: "submit", disabled: isSubmitting || isSubmitDisabled, "data-testid": "submit", children: dialogValues?.buttonText })] }) })] })); } /* harmony default export */ const FpuMarketingForm_FpuMarketingForm = (FpuMarketingForm); ;// ./src/rplus-forms/modules/FpuMarketingForm/index.tsx const rootElement = document.getElementById('fpu-marketing-form-root'); const root = (0,client.createRoot)(rootElement); root.render((0,jsx_runtime.jsx)(QueryClientProvider/* QueryClientProvider */.Ht, { client: sharedQueryClient, children: (0,jsx_runtime.jsx)(FpuMarketingForm_FpuMarketingForm, {}) })); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = __webpack_modules__; /******/ /************************************************************************/ /******/ /* webpack/runtime/chunk loaded */ /******/ (() => { /******/ var deferred = []; /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { /******/ if(chunkIds) { /******/ priority = priority || 0; /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; /******/ deferred[i] = [chunkIds, fn, priority]; /******/ return; /******/ } /******/ var notFulfilled = Infinity; /******/ for (var i = 0; i < deferred.length; i++) { /******/ var [chunkIds, fn, priority] = deferred[i]; /******/ var fulfilled = true; /******/ for (var j = 0; j < chunkIds.length; j++) { /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { /******/ chunkIds.splice(j--, 1); /******/ } else { /******/ fulfilled = false; /******/ if(priority < notFulfilled) notFulfilled = priority; /******/ } /******/ } /******/ if(fulfilled) { /******/ deferred.splice(i--, 1) /******/ var r = fn(); /******/ if (r !== undefined) result = r; /******/ } /******/ } /******/ return result; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/global */ /******/ (() => { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/jsonp chunk loading */ /******/ (() => { /******/ // no baseURI /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 152: 0, /******/ 886: 0 /******/ }; /******/ /******/ // no chunk on demand loading /******/ /******/ // no prefetching /******/ /******/ // no preloaded /******/ /******/ // no HMR /******/ /******/ // no HMR manifest /******/ /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); /******/ /******/ // install a JSONP callback for chunk loading /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { /******/ var [chunkIds, moreModules, runtime] = data; /******/ // add "moreModules" to the modules object, /******/ // then flag all "chunkIds" as loaded and fire callback /******/ var moduleId, chunkId, i = 0; /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { /******/ for(moduleId in moreModules) { /******/ if(__webpack_require__.o(moreModules, moduleId)) { /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; /******/ } /******/ } /******/ if(runtime) var result = runtime(__webpack_require__); /******/ } /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); /******/ for(;i < chunkIds.length; i++) { /******/ chunkId = chunkIds[i]; /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { /******/ installedChunks[chunkId][0](); /******/ } /******/ installedChunks[chunkId] = 0; /******/ } /******/ return __webpack_require__.O(result); /******/ } /******/ /******/ var chunkLoadingGlobal = self["webpackChunkramsey_plus_forms"] = self["webpackChunkramsey_plus_forms"] || []; /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed /******/ var __webpack_exports__ = __webpack_require__.O(undefined, [279,749,266,533,755,886], () => (__webpack_require__(4497))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() ; //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUcsR0FDQSxDQUN2QixDQUFDOzs7Ozs7O1VDYkY7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOzs7OztXQ3pCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLCtCQUErQix3Q0FBd0M7V0FDdkU7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQkFBaUIscUJBQXFCO1dBQ3RDO1dBQ0E7V0FDQSxrQkFBa0IscUJBQXFCO1dBQ3ZDO1dBQ0E7V0FDQSxLQUFLO1dBQ0w7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEU7Ozs7O1dDM0JBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQ0FBaUMsV0FBVztXQUM1QztXQUNBLEU7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx5Q0FBeUMsd0NBQXdDO1dBQ2pGO1dBQ0E7V0FDQSxFOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsR0FBRztXQUNIO1dBQ0E7V0FDQSxDQUFDLEk7Ozs7O1dDUEQsd0Y7Ozs7O1dDQUE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsTUFBTSxxQkFBcUI7V0FDM0I7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0EsNEc7Ozs7O1VFakRBO1VBQ0E7VUFDQTtVQUNBO1VBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL3NyYy9ycGx1cy1mb3Jtcy9zaGFyZWQvY29uZmlnL3NoYXJlZFF1ZXJ5Q2xpZW50LnRzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL3NoYXJlZC91dGlscy9hbmFseXRpY3NGaWVsZHNUb0NhcHR1cmUudHMiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvLi9zcmMvcnBsdXMtZm9ybXMvc2hhcmVkL2hvb2tzL3VzZVVybFBhcmFtcy50cyIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL3NyYy9ycGx1cy1mb3Jtcy9zaGFyZWQvdXRpbHMvZnB1QW5hbHl0aWNzRmllbGRzVG9DYXB0dXJlLnRzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL21vZHVsZXMvRnB1TWFya2V0aW5nRm9ybS9ob29rcy91c2VGcHVNYXJrZXRpbmdGb3JtLnRzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL3NoYXJlZC91dGlscy9jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvLi9zcmMvcnBsdXMtZm9ybXMvc2hhcmVkL2FwcGxpY2F0aW9uLnRzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL21vZHVsZXMvRnB1TWFya2V0aW5nRm9ybS9ob29rcy91c2VTdWJtaXRGcHVNYXJrZXRpbmdGb3JtLnRzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL3NoYXJlZC9ob29rcy91c2VSZWNhcHRjaGEudHMiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvLi9zcmMvcnBsdXMtZm9ybXMvbW9kdWxlcy9GcHVNYXJrZXRpbmdGb3JtL2NvbnN0YW50cy50cyIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL3NyYy9ycGx1cy1mb3Jtcy9zaGFyZWQvdXRpbHMvYWRkcmVzc0F1dG9jb21wbGV0ZS50cyIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL3NyYy9ycGx1cy1mb3Jtcy9zaGFyZWQvY29tcG9uZW50cy9QbGFjZXNTZWFyY2hMb2FkaW5nSW5kaWNhdG9yLnRzeCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL3NyYy9ycGx1cy1mb3Jtcy9zaGFyZWQvY29tcG9uZW50cy9QbGFjZXNBdXRvY29tcGxldGVGaWVsZC50c3giLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvLi9zcmMvcnBsdXMtZm9ybXMvbW9kdWxlcy9GcHVNYXJrZXRpbmdGb3JtL2NvbXBvbmVudHMvTm90QVBhc3Rvck1lc3NhZ2UudHN4Iiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zLy4vc3JjL3JwbHVzLWZvcm1zL21vZHVsZXMvRnB1TWFya2V0aW5nRm9ybS9GcHVNYXJrZXRpbmdGb3JtLnRzeCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy8uL3NyYy9ycGx1cy1mb3Jtcy9tb2R1bGVzL0ZwdU1hcmtldGluZ0Zvcm0vaW5kZXgudHN4Iiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svcnVudGltZS9jaHVuayBsb2FkZWQiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcmFtc2V5LXBsdXMtZm9ybXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovL3JhbXNleS1wbHVzLWZvcm1zL3dlYnBhY2svc3RhcnR1cCIsIndlYnBhY2s6Ly9yYW1zZXktcGx1cy1mb3Jtcy93ZWJwYWNrL2FmdGVyLXN0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5leHBvcnQgY29uc3Qgc2hhcmVkUXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoe1xuICBkZWZhdWx0T3B0aW9uczoge1xuICAgIHF1ZXJpZXM6IHtcbiAgICAgIHJldHJ5OiBmYWxzZSxcbiAgICAgIGdjVGltZTogMTAwMCAqIDYwICogNSwgLy8gNSBtaW51dGVzXG4gICAgICBzdGFsZVRpbWU6IDEwMDAgKiA2MCAqIDMwIC8vIDMwIG1pbnV0ZXNcbiAgICB9XG4gIH1cbn0pO1xuIiwiZXhwb3J0IGNvbnN0IGZpZWxkc1RvQ2FwdHVyZSA9IFtcbiAge1xuICAgIGtleTogJ3JzX3V0bV9tZWRpdW0nLFxuICAgIHBheWxvYWRLZXk6ICd1dG1fbWVkaXVtJyxcbiAgICBzb3VyY2VUeXBlOiBbJ3F1ZXJ5LXBhcmFtZXRlcicsICdjb29raWUnXVxuICB9LFxuICB7XG4gICAga2V5OiAncnNfdXRtX3Rlcm0nLFxuICAgIHBheWxvYWRLZXk6ICd1dG1fdGVybScsXG4gICAgc291cmNlVHlwZTogWydxdWVyeS1wYXJhbWV0ZXInLCAnY29va2llJ11cbiAgfSxcbiAge1xuICAgIGtleTogJ3JzX3V0bV9zb3VyY2UnLFxuICAgIHBheWxvYWRLZXk6ICd1dG1fc291cmNlJyxcbiAgICBzb3VyY2VUeXBlOiBbJ3F1ZXJ5LXBhcmFtZXRlcicsICdjb29raWUnXVxuICB9LFxuICB7XG4gICAga2V5OiAncnNfdXRtX2NvbnRlbnQnLFxuICAgIHBheWxvYWRLZXk6ICd1dG1fY29udGVudCcsXG4gICAgc291cmNlVHlwZTogWydxdWVyeS1wYXJhbWV0ZXInLCAnY29va2llJ11cbiAgfSxcbiAge1xuICAgIGtleTogJ3JzX3V0bV9jYW1wYWlnbicsXG4gICAgcGF5bG9hZEtleTogJ3V0bV9jYW1wYWlnbicsXG4gICAgc291cmNlVHlwZTogWydxdWVyeS1wYXJhbWV0ZXInLCAnY29va2llJ11cbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbXBhaWduX2lkJyxcbiAgICBwYXlsb2FkS2V5OiAndXRtX2lkJyxcbiAgICBzb3VyY2VUeXBlOiBbJ3F1ZXJ5LXBhcmFtZXRlcicsICdjb29raWUnXVxuICB9LFxuICB7XG4gICAga2V5OiAncnNfZ2NsaWQnLFxuICAgIHBheWxvYWRLZXk6ICdnY2xpZCcsXG4gICAgc291cmNlVHlwZTogWydxdWVyeS1wYXJhbWV0ZXInLCAnY29va2llJ11cbiAgfSxcbiAge1xuICAgIGtleTogJ2ZiY2xpZCcsXG4gICAgcGF5bG9hZEtleTogJ2ZiY2xpZCcsXG4gICAgc291cmNlVHlwZTogJ3F1ZXJ5LXBhcmFtZXRlcidcbiAgfSxcbiAge1xuICAgIGtleTogJ2dhZF9zb3VyY2UnLFxuICAgIHBheWxvYWRLZXk6ICd1dG1fc291cmNlJyxcbiAgICBzb3VyY2VUeXBlOiAncXVlcnktcGFyYW1ldGVyJ1xuICB9LFxuICB7XG4gICAga2V5OiAnZ2FkX2NhbXBhaWduaWQnLFxuICAgIHBheWxvYWRLZXk6ICd1dG1fY2FtcGFpZ25faWQnLFxuICAgIHNvdXJjZVR5cGU6ICdxdWVyeS1wYXJhbWV0ZXInXG4gIH1cbl07XG5cbmV4cG9ydCBjb25zdCBvcmdhbmljU291cmNlcyA9IFtcbiAgeyBkb21haW46ICdnb29nbGUuJywgc291cmNlOiAnZ29vZ2xlJyB9LFxuICB7IGRvbWFpbjogJ2JpbmcuY29tJywgc291cmNlOiAnYmluZycgfSxcbiAgeyBkb21haW46ICd5YWhvby4nLCBzb3VyY2U6ICd5YWhvbycgfSxcbiAgeyBkb21haW46ICdkdWNrZHVja2dvLmNvbScsIHNvdXJjZTogJ2R1Y2tkdWNrZ28nIH1cbl07XG4iLCJpbXBvcnQgeyBvcmdhbmljU291cmNlcyB9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc0ZpZWxkc1RvQ2FwdHVyZSc7XG5cbi8qXG4gIFBhaWQgTWVkaWEgQXR0cmlidXRpb25cbiAgKi9cbmV4cG9ydCB0eXBlIEZpZWxkc1RvQ2FwdHVyZSA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHBheWxvYWRLZXk6IHN0cmluZztcbiAgc291cmNlVHlwZTogc3RyaW5nIHwgc3RyaW5nW107XG59O1xuXG5mdW5jdGlvbiBnZXRIb3N0bmFtZUZyb21SZWZlcnJlcihyZWZlcnJlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGhvc3RuYW1lID0gbmV3IFVSTChyZWZlcnJlcikuaG9zdG5hbWU7XG4gIGlmIChob3N0bmFtZS5zdGFydHNXaXRoKCd3d3cuJykpIHtcbiAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnNsaWNlKDQpO1xuICB9XG4gIHJldHVybiBob3N0bmFtZTtcbn1cblxuZnVuY3Rpb24gc2V0UGFyYW1zRnJvbVJlZmVycmVyKGFuYWx5dGljc1BhcmFtczogVVJMU2VhcmNoUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHJlZmVycmVyID0gZG9jdW1lbnQucmVmZXJyZXI7XG4gIGlmICghcmVmZXJyZXIpIHtcbiAgICBhbmFseXRpY3NQYXJhbXMuc2V0KCd1dG1fbWVkaXVtJywgJ2RpcmVjdCcpO1xuICAgIGFuYWx5dGljc1BhcmFtcy5zZXQoJ3V0bV9zb3VyY2UnLCAnZGlyZWN0Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCB7IGRvbWFpbiwgc291cmNlIH0gb2Ygb3JnYW5pY1NvdXJjZXMpIHtcbiAgICBpZiAocmVmZXJyZXIuaW5jbHVkZXMoZG9tYWluKSkge1xuICAgICAgYW5hbHl0aWNzUGFyYW1zLnNldCgndXRtX21lZGl1bScsICdvcmdhbmljJyk7XG4gICAgICBhbmFseXRpY3NQYXJhbXMuc2V0KCd1dG1fc291cmNlJywgc291cmNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhbmFseXRpY3NQYXJhbXMuc2V0KCd1dG1fbWVkaXVtJywgJ3JlZmVycmFsJyk7XG4gIGFuYWx5dGljc1BhcmFtcy5zZXQoJ3V0bV9zb3VyY2UnLCBnZXRIb3N0bmFtZUZyb21SZWZlcnJlcihyZWZlcnJlcikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvb2tpZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4ge1xuICByZXR1cm4gZG9jdW1lbnQuY29va2llXG4gICAgLnNwbGl0KCc7JylcbiAgICAucmVkdWNlKChhY2M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+LCBjb29raWUpID0+IHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGNvb2tpZS5zcGxpdCgnPScpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB0cmltbWVkS2V5ID0ga2V5LnRyaW0oKTtcbiAgICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gdmFsdWUgPyB2YWx1ZS50cmltKCkgOiBudWxsO1xuICAgICAgICBhY2NbdHJpbW1lZEtleV0gPSB0cmltbWVkVmFsdWVcbiAgICAgICAgICA/IGRlY29kZVVSSUNvbXBvbmVudCh0cmltbWVkVmFsdWUpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIHRyeVNldEZyb21RdWVyeVBhcmFtKFxuICBmaWVsZDogRmllbGRzVG9DYXB0dXJlLFxuICBwYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyxcbiAgYW5hbHl0aWNzUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNcbik6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJhbVZhbHVlID0gcGFyYW1zLmdldChmaWVsZC5wYXlsb2FkS2V5KSB8fCBwYXJhbXMuZ2V0KGZpZWxkLmtleSk7XG4gIGlmICghcGFyYW1WYWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZmllbGQua2V5ID09PSAnZ2FkX3NvdXJjZScpIHtcbiAgICBhbmFseXRpY3NQYXJhbXMuc2V0KCd1dG1fc291cmNlJywgJ2dvb2dsZScpO1xuICB9IGVsc2Uge1xuICAgIGFuYWx5dGljc1BhcmFtcy5zZXQoZmllbGQucGF5bG9hZEtleSwgcGFyYW1WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHRyeVNldEZyb21Db29raWUoXG4gIGZpZWxkOiBGaWVsZHNUb0NhcHR1cmUsXG4gIGNvb2tpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+LFxuICBhbmFseXRpY3NQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc1xuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvb2tpZVZhbHVlID0gY29va2llc1tmaWVsZC5wYXlsb2FkS2V5XSB8fCBjb29raWVzW2ZpZWxkLmtleV07XG4gIGlmICghY29va2llVmFsdWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYW5hbHl0aWNzUGFyYW1zLnNldChmaWVsZC5wYXlsb2FkS2V5LCBjb29raWVWYWx1ZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzRmllbGQoXG4gIGZpZWxkOiBGaWVsZHNUb0NhcHR1cmUsXG4gIHBhcmFtczogVVJMU2VhcmNoUGFyYW1zLFxuICBjb29raWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsPixcbiAgYW5hbHl0aWNzUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNcbik6IHZvaWQge1xuICBjb25zdCBzb3VyY2VzID0gQXJyYXkuaXNBcnJheShmaWVsZC5zb3VyY2VUeXBlKVxuICAgID8gZmllbGQuc291cmNlVHlwZVxuICAgIDogW2ZpZWxkLnNvdXJjZVR5cGVdO1xuXG4gIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICBpZiAoXG4gICAgICBzb3VyY2UgPT09ICdxdWVyeS1wYXJhbWV0ZXInICYmXG4gICAgICB0cnlTZXRGcm9tUXVlcnlQYXJhbShmaWVsZCwgcGFyYW1zLCBhbmFseXRpY3NQYXJhbXMpXG4gICAgKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgc291cmNlID09PSAnY29va2llJyAmJlxuICAgICAgdHJ5U2V0RnJvbUNvb2tpZShmaWVsZCwgY29va2llcywgYW5hbHl0aWNzUGFyYW1zKVxuICAgICkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjYXB0dXJlQW5hbHl0aWNzID0gKGZpZWxkc1RvQ2FwdHVyZTogRmllbGRzVG9DYXB0dXJlW10pID0+IHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhnbG9iYWxUaGlzLmxvY2F0aW9uLnNlYXJjaCk7XG4gIGNvbnN0IGNvb2tpZXMgPSBwYXJzZUNvb2tpZXMoKTtcbiAgY29uc3QgYW5hbHl0aWNzUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzVG9DYXB0dXJlKSB7XG4gICAgaWYgKGZpZWxkLmtleSA9PT0gJ2dhZF9zb3VyY2UnICYmIGFuYWx5dGljc1BhcmFtcy5oYXMoJ3V0bV9zb3VyY2UnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHByb2Nlc3NGaWVsZChmaWVsZCwgcGFyYW1zLCBjb29raWVzLCBhbmFseXRpY3NQYXJhbXMpO1xuICB9XG5cbiAgY29uc3QgaGFzR29vZ2xlQWRzUGFyYW1zID1cbiAgICBwYXJhbXMuZ2V0KCdnYWRfc291cmNlJykgfHxcbiAgICBwYXJhbXMuZ2V0KCdnYWRfY2FtcGFpZ25pZCcpIHx8XG4gICAgcGFyYW1zLmdldCgnZ2NsaWQnKSB8fFxuICAgIHBhcmFtcy5nZXQoJ2dicmFpZCcpO1xuXG4gIGlmIChoYXNHb29nbGVBZHNQYXJhbXMpIHtcbiAgICBhbmFseXRpY3NQYXJhbXMuc2V0KCd1dG1fbWVkaXVtJywgJ2NwYycpO1xuICB9XG5cbiAgaWYgKFxuICAgICFhbmFseXRpY3NQYXJhbXMuaGFzKCd1dG1fc291cmNlJykgJiZcbiAgICAhYW5hbHl0aWNzUGFyYW1zLmhhcygndXRtX21lZGl1bScpXG4gICkge1xuICAgIHNldFBhcmFtc0Zyb21SZWZlcnJlcihhbmFseXRpY3NQYXJhbXMpO1xuICB9XG5cbiAgcmV0dXJuIGFuYWx5dGljc1BhcmFtcztcbn07XG5cbmV4cG9ydCBjb25zdCBtYXBVcmxQYXJhbXNUb0NhbWVsID0gKFxuICB1cmxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+XG4pID0+IHtcbiAgcmV0dXJuIHtcbiAgICB1dG1NZWRpdW06IHVybFBhcmFtcy51dG1fbWVkaXVtID8/IHVuZGVmaW5lZCxcbiAgICB1dG1UZXJtOiB1cmxQYXJhbXMudXRtX3Rlcm0gPz8gdW5kZWZpbmVkLFxuICAgIHV0bVNvdXJjZTogdXJsUGFyYW1zLnV0bV9zb3VyY2UgPz8gdW5kZWZpbmVkLFxuICAgIHV0bUNvbnRlbnQ6IHVybFBhcmFtcy51dG1fY29udGVudCA/PyB1bmRlZmluZWQsXG4gICAgdXRtQ2FtcGFpZ246IHVybFBhcmFtcy51dG1fY2FtcGFpZ24gPz8gdW5kZWZpbmVkLFxuICAgIHBhaWRNZWRpYUNhbXBhaWduSWQ6XG4gICAgICB1cmxQYXJhbXMuY2FtcGFpZ25faWQgPz8gdXJsUGFyYW1zLnV0bV9jYW1wYWlnbl9pZCA/PyB1bmRlZmluZWQsXG4gICAgZ2NsaWQ6IHVybFBhcmFtcy5nY2xpZCA/PyB1bmRlZmluZWQsXG4gICAgZmJjbGlkOiB1cmxQYXJhbXMuZmJjbGlkID8/IHVuZGVmaW5lZFxuICB9O1xufTtcbiIsImV4cG9ydCBjb25zdCBmcHVGaWVsZHNUb0NhcHR1cmUgPSBbXG4gIHtcbiAgICBrZXk6ICdyc19nY2xpZCcsXG4gICAgcGF5bG9hZEtleTogJ2djbGlkJyxcbiAgICBzb3VyY2VUeXBlOiAnY29va2llJ1xuICB9LFxuICB7XG4gICAga2V5OiAnZmJjbGlkJyxcbiAgICBwYXlsb2FkS2V5OiAnZmJjbGlkJyxcbiAgICBzb3VyY2VUeXBlOiAncXVlcnktcGFyYW1ldGVyJ1xuICB9LFxuICB7XG4gICAga2V5OiAndXRtX2NhbXBhaWduJyxcbiAgICBwYXlsb2FkS2V5OiAndXRtQ2FtcGFpZ24nLFxuICAgIHNvdXJjZVR5cGU6ICdxdWVyeS1wYXJhbWV0ZXInXG4gIH0sXG4gIHtcbiAgICBrZXk6ICd1dG1fbWVkaXVtJyxcbiAgICBwYXlsb2FkS2V5OiAndXRtTWVkaXVtJyxcbiAgICBzb3VyY2VUeXBlOiAncXVlcnktcGFyYW1ldGVyJ1xuICB9LFxuICB7XG4gICAga2V5OiAndXRtX3NvdXJjZScsXG4gICAgcGF5bG9hZEtleTogJ3V0bVNvdXJjZScsXG4gICAgc291cmNlVHlwZTogJ3F1ZXJ5LXBhcmFtZXRlcidcbiAgfSxcbiAge1xuICAgIGtleTogJ3V0bV9jb250ZW50JyxcbiAgICBwYXlsb2FkS2V5OiAndXRtQ29udGVudCcsXG4gICAgc291cmNlVHlwZTogJ3F1ZXJ5LXBhcmFtZXRlcidcbiAgfSxcbiAge1xuICAgIGtleTogJ3V0bV90ZXJtJyxcbiAgICBwYXlsb2FkS2V5OiAndXRtVGVybScsXG4gICAgc291cmNlVHlwZTogJ3F1ZXJ5LXBhcmFtZXRlcidcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbXBhaWduX2lkJyxcbiAgICBwYXlsb2FkS2V5OiAncGFpZE1lZGlhQ2FtcGFpZ25JZCcsXG4gICAgc291cmNlVHlwZTogWydxdWVyeS1wYXJhbWV0ZXInLCAnY29va2llJ11cbiAgfVxuXTtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB0eXBlIHtcbiAgRnB1TWFya2V0aW5nRm9ybURpYWxvZ1Byb3BzLFxuICBGcHVNYXJrZXRpbmdGb3JtUGF5bG9hZFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBjYXB0dXJlQW5hbHl0aWNzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2hvb2tzL3VzZVVybFBhcmFtcyc7XG5pbXBvcnQgeyBmcHVGaWVsZHNUb0NhcHR1cmUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvZnB1QW5hbHl0aWNzRmllbGRzVG9DYXB0dXJlJztcblxuZnVuY3Rpb24gdXNlRnB1TWFya2V0aW5nRm9ybSgpIHtcbiAgY29uc3QgW2RpYWxvZ1ZhbHVlcywgc2V0RGlhbG9nVmFsdWVzXSA9XG4gICAgdXNlU3RhdGU8RnB1TWFya2V0aW5nRm9ybURpYWxvZ1Byb3BzIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFt1cmxQYXJhbXMsIHNldFVybFBhcmFtc10gPSB1c2VTdGF0ZTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bGwgfT4oXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmb3JtTWV0aG9kcyA9IHVzZUZvcm08RnB1TWFya2V0aW5nRm9ybVBheWxvYWQ+KCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2luZG93Ll9GUFVfTUFSS0VUSU5HX0ZPUk1fRElBTE9HKSB7XG4gICAgICBzZXREaWFsb2dWYWx1ZXMod2luZG93Ll9GUFVfTUFSS0VUSU5HX0ZPUk1fRElBTE9HKTtcbiAgICB9XG4gICAgY29uc3QgY2FwdHVyZWRQYXJhbXMgPSBjYXB0dXJlQW5hbHl0aWNzKGZwdUZpZWxkc1RvQ2FwdHVyZSk7XG4gICAgc2V0VXJsUGFyYW1zKE9iamVjdC5mcm9tRW50cmllcyhjYXB0dXJlZFBhcmFtcy5lbnRyaWVzKCkpKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiB7IGRpYWxvZ1ZhbHVlcywgZm9ybU1ldGhvZHMsIHVybFBhcmFtcyB9O1xufVxuXG5leHBvcnQgeyB1c2VGcHVNYXJrZXRpbmdGb3JtIH07XG4iLCJjb25zdCBDT05TVFMgPSB7XG4gIFBBVEhTOiB7XG4gICAgQVBJOiB7XG4gICAgICBGUFVfRk9STV9TVUJNSVNTSU9OOiAnL2FwaS9mcHUtbWFya2V0aW5nLWZvcm0vc3VibWl0JyxcbiAgICAgIFVQQ09NSU5HX1dFQklOQVJTOiAnL2FwaS92aWRlby1jb25mZXJlbmNpbmcvd2ViaW5hcnMvdXBjb21pbmcnLFxuICAgICAgV0VCSU5BUl9SRUdJU1RSQVRJT046ICcvYXBpL3dlYmluYXIvcmVnaXN0ZXInLFxuICAgICAgV0VCSU5BUl9SRUNPUkRFRDogJy9hcGkvd2ViaW5hci9yZWdpc3Rlci9yZWNvcmRlZCcsXG4gICAgICBMSVZFU1RSRUFNX0dJVkVBV0FZX1JFR0lTVFJBVElPTjogJy9hcGkvbGl2ZXN0cmVhbS1yZWdpc3RyYXRpb24nXG4gICAgfVxuICB9LFxuICBFTUFJTDoge1xuICAgIEVWRVJZRE9MTEFSX1NVUFBPUlQ6ICdoZWxwQGV2ZXJ5ZG9sbGFyLmNvbSdcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHsgUEFUSFMsIEVNQUlMIH0gPSBDT05TVFM7XG4iLCJleHBvcnQgY29uc3QgYXBwbGljYXRpb25Db25maWcgPSB7XG4gIGVudmlyb25tZW50OiB3aW5kb3cuRk9STVNfQkZGX0NPTkZJRy5lbnYsXG4gIG1hZ25vbGlhRm9ybXNXZWJVcmw6XG4gICAgd2luZG93LkZPUk1TX0JGRl9DT05GSUcuZW52ID09PSAnbG9jYWwuJ1xuICAgICAgPyAnaHR0cDovL2xvY2FsaG9zdDo4MDgyL2Zvcm1zL3JhbXNleS1wbHVzJ1xuICAgICAgOiBgaHR0cHM6Ly93d3cuJHt3aW5kb3cuRk9STVNfQkZGX0NPTkZJRy5lbnZ9cmFtc2V5c29sdXRpb25zLmNvbS9mb3Jtcy9yYW1zZXktcGx1c2Bcbn07XG4iLCJpbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRnB1TWFya2V0aW5nRm9ybVBheWxvYWQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBQQVRIUyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9jb25zdGFudHMnO1xuaW1wb3J0IHsgYXBwbGljYXRpb25Db25maWcgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvYXBwbGljYXRpb24nO1xuXG50eXBlIEZvcm1TdWJtaXNzaW9uUmVzdWx0ID0ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBzdGF0dXM6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBlcnJvckNvZGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU3VibWl0RnB1TWFya2V0aW5nRm9ybSgpIHtcbiAgY29uc3Qgc3VibWl0Rm9ybSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIGZvcm1EYXRhOiBGcHVNYXJrZXRpbmdGb3JtUGF5bG9hZFxuICAgICk6IFByb21pc2U8Rm9ybVN1Ym1pc3Npb25SZXN1bHQ+ID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7YXBwbGljYXRpb25Db25maWcubWFnbm9saWFGb3Jtc1dlYlVybH0ke1BBVEhTLkFQSS5GUFVfRk9STV9TVUJNSVNTSU9OfWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShmb3JtRGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IGRhdGE6IGFueTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBkYXRhID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEZvcm0gc3VibWlzc2lvbiBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgIGRhdGE/Lm1lc3NhZ2UgPz9cbiAgICAgICAgICAgICAgJ1RoZXJlIHdhcyBhbiBlcnJvciBzdWJtaXR0aW5nIHRoZSBmb3JtLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXG4gICAgICAgICAgICBlcnJvckNvZGU6IGRhdGE/LmVycm9yQ29kZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGE/LnN1Y2Nlc3MgPz8gcmVzcG9uc2Uub2ssXG4gICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgbWVzc2FnZTogZGF0YT8ubWVzc2FnZSA/PyAnRm9ybSBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgICAgICBlcnJvckNvZGU6IGRhdGE/LmVycm9yQ29kZVxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRm9ybSBzdWJtaXNzaW9uIGVycm9yOicsIGVycm9yKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgJ1RoZXJlIHdhcyBhbiBlcnJvciBzdWJtaXR0aW5nIHRoZSBmb3JtLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXG4gICAgICAgICAgZXJyb3JDb2RlOiAnTkVUV09SS19FUlJPUidcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgcmV0dXJuIHsgc3VibWl0Rm9ybSB9O1xufVxuIiwiaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlQ0FQVENIQSBmcm9tICdyZWFjdC1nb29nbGUtcmVjYXB0Y2hhJztcblxuY29uc3QgdXNlUmVjYXB0Y2hhID0gKCkgPT4ge1xuICBjb25zdCBjYXB0Y2hhVG9rZW4gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlY2FwdGNoYVJlZiA9IHVzZVJlZjxSZUNBUFRDSEEgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBoYW5kbGVSZWNhcHRjaGEgPSB1c2VDYWxsYmFjaygodG9rZW46IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICBjYXB0Y2hhVG9rZW4uY3VycmVudCA9IHRva2VuO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZWZyZXNoQ2FwdGNoYSA9ICgpID0+IHtcbiAgICAgIGlmIChyZWNhcHRjaGFSZWYuY3VycmVudCAmJiBjYXB0Y2hhVG9rZW4uY3VycmVudCkge1xuICAgICAgICByZWNhcHRjaGFSZWYuY3VycmVudC5yZXNldCgpO1xuICAgICAgICBjYXB0Y2hhVG9rZW4uY3VycmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxldCB0b2tlblJlZnJlc2hUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGNhcHRjaGFUb2tlbi5jdXJyZW50KSB7XG4gICAgICB0b2tlblJlZnJlc2hUaW1lb3V0ID0gc2V0VGltZW91dChyZWZyZXNoQ2FwdGNoYSwgMTEwMDAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHRva2VuUmVmcmVzaFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRva2VuUmVmcmVzaFRpbWVvdXQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtjYXB0Y2hhVG9rZW5dKTtcblxuICByZXR1cm4geyBjYXB0Y2hhVG9rZW4sIHJlY2FwdGNoYVJlZiwgaGFuZGxlUmVjYXB0Y2hhIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VSZWNhcHRjaGE7XG4iLCJjb25zdCBBUElfVVJMID0gJ2FwaS9yZWdpc3Rlcic7XG5cbmNvbnN0IFBBU1RPUl9ST0xFUyA9IFtcbiAge1xuICAgIGxhYmVsOiAnRXhlY3V0aXZlIFBhc3RvcicsXG4gICAgdmFsdWU6ICdFeGVjdXRpdmUgUGFzdG9yJ1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdMZWFkIFBhc3RvcicsXG4gICAgdmFsdWU6ICdMZWFkIFBhc3RvcidcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnV29yc2hpcCBQYXN0b3InLFxuICAgIHZhbHVlOiAnV29yc2hpcCBQYXN0b3InXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1lvdXRoIFBhc3RvcicsXG4gICAgdmFsdWU6ICdZb3V0aCBQYXN0b3InXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0Fzc2lzdGFudCBQYXN0b3InLFxuICAgIHZhbHVlOiAnQXNzaXN0YW50IFBhc3RvcidcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRGlzY2lwbGVzaGlwIFBhc3RvcicsXG4gICAgdmFsdWU6ICdEaXNjaXBsZXNoaXAgUGFzdG9yJ1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQYXN0b3IgLSBPdGhlcicsXG4gICAgdmFsdWU6ICdQYXN0b3IgLSBPdGhlcidcbiAgfSxcbiAge1xuICAgIGxhYmVsOiBcIkknbSBub3QgYSBwYXN0b3JcIixcbiAgICB2YWx1ZTogJ05vbi1wYXN0b3InXG4gIH1cbl07XG5cbmNvbnN0IE9SR0FOSVpBVElPTl9ST0xFUyA9IFtcbiAge1xuICAgIGxhYmVsOiAnRlBVIENvb3JkaW5hdG9yJyxcbiAgICB2YWx1ZTogJ0Nvb3JkaW5hdG9yJ1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFeGVjdXRpdmUgUGFzdG9yJyxcbiAgICB2YWx1ZTogJ0V4ZWN1dGl2ZSBQYXN0b3InXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0xlYWQgUGFzdG9yJyxcbiAgICB2YWx1ZTogJ0xlYWQgUGFzdG9yJ1xuICB9LFxuICB7XG4gICAgbGFiZWw6ICdQYXN0b3IgLSBPdGhlcicsXG4gICAgdmFsdWU6ICdQYXN0b3IgLSBPdGhlcidcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3RhZmYnLFxuICAgIHZhbHVlOiAnU3RhZmYgLSBOb24tUGFzdG9yYWwnXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1ZvbHVudGVlcicsXG4gICAgdmFsdWU6ICdWb2x1bnRlZXInXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ090aGVyJyxcbiAgICB2YWx1ZTogJ090aGVyJ1xuICB9XG5dO1xuXG5jb25zdCBERU5PTUlOQVRJT05TID0gW1xuICB7IGxhYmVsOiAnTm9uZGVub21pbmF0aW9uYWwnLCB2YWx1ZTogJ05vbmRlbm9taW5hdGlvbmFsJyB9LFxuICB7IGxhYmVsOiAnQmFwdGlzdCwgU291dGhlcm4gQmFwdGlzdCcsIHZhbHVlOiAnQmFwdGlzdCwgU291dGhlcm4gQmFwdGlzdCcgfSxcbiAgeyBsYWJlbDogJ0JhcHRpc3QsIE90aGVyJywgdmFsdWU6ICdCYXB0aXN0LCBPdGhlcicgfSxcbiAgeyBsYWJlbDogJ0Fzc2VtYmxpZXMgb2YgR29kJywgdmFsdWU6ICdBc3NlbWJsaWVzIG9mIEdvZCcgfSxcbiAgeyBsYWJlbDogJ0JpYmxlIENodXJjaCcsIHZhbHVlOiAnQmlibGUgQ2h1cmNoJyB9LFxuICB7IGxhYmVsOiAnQ2F0aG9saWMnLCB2YWx1ZTogJ0NhdGhvbGljJyB9LFxuICB7IGxhYmVsOiAnQ2hyaXN0aWFuJywgdmFsdWU6ICdDaHJpc3RpYW4nIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NocmlzdGlhbiwgRGlzY2lwbGVzIG9mIENocmlzdCcsXG4gICAgdmFsdWU6ICdDaHJpc3RpYW4sIERpc2NpcGxlcyBvZiBDaHJpc3QnXG4gIH0sXG4gIHsgbGFiZWw6ICdDaHVyY2ggb2YgQ2hyaXN0JywgdmFsdWU6ICdDaHVyY2ggb2YgQ2hyaXN0JyB9LFxuICB7IGxhYmVsOiAnQ2h1cmNoIG9mIEdvZCcsIHZhbHVlOiAnQ2h1cmNoIG9mIEdvZCcgfSxcbiAgeyBsYWJlbDogJ0NodXJjaCBvZiBHb2QgaW4gQ2hyaXN0JywgdmFsdWU6ICdDaHVyY2ggb2YgR29kIGluIENocmlzdCcgfSxcbiAgeyBsYWJlbDogJ01ldGhvZGlzdCwgR2xvYmFsJywgdmFsdWU6ICdNZXRob2Rpc3QsIEdsb2JhbCcgfSxcbiAgeyBsYWJlbDogJ1ByZXNieXRlcmlhbiBDaHVyY2gsIFVTQScsIHZhbHVlOiAnUHJlc2J5dGVyaWFuIENodXJjaCwgVVNBJyB9LFxuICB7IGxhYmVsOiAnUHJlc2J5dGVyaWFuIENodXJjaCwgUENBJywgdmFsdWU6ICdQcmVzYnl0ZXJpYW4gQ2h1cmNoLCBQQ0EnIH0sXG4gIHsgbGFiZWw6ICdQcmVzYnl0ZXJpYW4sIE90aGVyJywgdmFsdWU6ICdQcmVzYnl0ZXJpYW4sIE90aGVyJyB9LFxuICB7IGxhYmVsOiAnUmVmb3JtZWQnLCB2YWx1ZTogJ1JlZm9ybWVkJyB9LFxuICB7IGxhYmVsOiAnU2V2ZW50aCBEYXkgQWR2ZW50aXN0JywgdmFsdWU6ICdTZXZlbnRoIERheSBBZHZlbnRpc3QnIH0sXG4gIHtcbiAgICBsYWJlbDogJ0FmcmljYW4gTWV0aG9kaXN0IEV2YW5nZWxpY2FsJyxcbiAgICB2YWx1ZTogJ0FmcmljYW4gTWV0aG9kaXN0IEV2YW5nZWxpY2FsJ1xuICB9LFxuICB7IGxhYmVsOiAnQW5nbGljYW4nLCB2YWx1ZTogJ0FuZ2xpY2FuJyB9LFxuICB7IGxhYmVsOiAnQ2hhcmlzbWF0aWMnLCB2YWx1ZTogJ0NoYXJpc21hdGljJyB9LFxuICB7IGxhYmVsOiAnQ2h1cmNoIG9mIHRoZSBCcmV0aHJlbicsIHZhbHVlOiAnQ2h1cmNoIG9mIHRoZSBCcmV0aHJlbicgfSxcbiAgeyBsYWJlbDogJ0Vhc3Rlcm4gT3J0aG9kb3gnLCB2YWx1ZTogJ0Vhc3Rlcm4gT3J0aG9kb3gnIH0sXG4gIHsgbGFiZWw6ICdFcGlzY29wYWwnLCB2YWx1ZTogJ0VwaXNjb3BhbCcgfSxcbiAgeyBsYWJlbDogJ0V2YW5nZWxpY2FsIEZyZWUnLCB2YWx1ZTogJ0V2YW5nZWxpY2FsIEZyZWUnIH0sXG4gIHsgbGFiZWw6ICdGb3Vyc3F1YXJlJywgdmFsdWU6ICdGb3Vyc3F1YXJlJyB9LFxuICB7IGxhYmVsOiAnSmV3aXNoJywgdmFsdWU6ICdKZXdpc2gnIH0sXG4gIHsgbGFiZWw6ICdMYXR0ZXItZGF5IFNhaW50cycsIHZhbHVlOiAnTGF0dGVyLWRheSBTYWludHMnIH0sXG4gIHsgbGFiZWw6ICdMdXRoZXJhbiwgT3RoZXInLCB2YWx1ZTogJ0x1dGhlcmFuLCBPdGhlcicgfSxcbiAgeyBsYWJlbDogJ0x1dGhlcmFuLCBNaXNzb3VyaSBTeW5vZCcsIHZhbHVlOiAnTHV0aGVyYW4sIE1pc3NvdXJpIFN5bm9kJyB9LFxuICB7IGxhYmVsOiAnTWVubm9uaXRlJywgdmFsdWU6ICdNZW5ub25pdGUnIH0sXG4gIHsgbGFiZWw6ICdNZXRob2Rpc3QsIFVuaXRlZCcsIHZhbHVlOiAnTWV0aG9kaXN0LCBVbml0ZWQnIH0sXG4gIHsgbGFiZWw6ICdOYXphcmVuZScsIHZhbHVlOiAnTmF6YXJlbmUnIH0sXG4gIHsgbGFiZWw6ICdQZW50ZWNvc3RhbCcsIHZhbHVlOiAnUGVudGVjb3N0YWwnIH0sXG4gIHsgbGFiZWw6ICdVbml0YXJpYW4nLCB2YWx1ZTogJ1VuaXRhcmlhbicgfSxcbiAgeyBsYWJlbDogJ1VuaXRlZCBDaHVyY2ggb2YgQ2hyaXN0JywgdmFsdWU6ICdVbml0ZWQgQ2h1cmNoIG9mIENocmlzdCcgfSxcbiAgeyBsYWJlbDogJ1dlc2xleWFuJywgdmFsdWU6ICdXZXNsZXlhbicgfSxcbiAgeyBsYWJlbDogJ0NvbmdyZWdhdGlvbmFsJywgdmFsdWU6ICdDb25ncmVnYXRpb25hbCcgfSxcbiAgeyBsYWJlbDogJ090aGVyJywgdmFsdWU6ICdPdGhlcicgfVxuXTtcblxuZXhwb3J0IHsgQVBJX1VSTCwgUEFTVE9SX1JPTEVTLCBPUkdBTklaQVRJT05fUk9MRVMsIERFTk9NSU5BVElPTlMgfTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG50eXBlIEFkZHJlc3NDb21wb25lbnQgPSB7XG4gIGxvbmdfbmFtZTogc3RyaW5nO1xuICBzaG9ydF9uYW1lOiBzdHJpbmc7XG4gIHR5cGVzOiBzdHJpbmdbXTtcbn07XG5cbmNvbnN0IFNUUkVFVF9OVU1CRVIgPSAnc3RyZWV0X251bWJlcic7XG5jb25zdCBTVFJFRVRfTkFNRSA9ICdyb3V0ZSc7XG5jb25zdCBVTklUX05VTUJFUiA9ICdzdWJwcmVtaXNlJztcbmNvbnN0IENJVFkgPSAnbG9jYWxpdHknO1xuY29uc3QgU1VCTE9DQUxJVFkgPSAnc3VibG9jYWxpdHlfbGV2ZWxfMSc7XG5jb25zdCBTVEFURSA9ICdhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzEnO1xuY29uc3QgWklQID0gJ3Bvc3RhbF9jb2RlJztcblxuZnVuY3Rpb24gZXh0cmFjdFN0cmVldEFkZHJlc3MoY29tcG9uZW50czogQWRkcmVzc0NvbXBvbmVudFtdKSB7XG4gIGNvbnN0IHN0cmVldE51bWJlciA9XG4gICAgY29tcG9uZW50cy5maW5kKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50eXBlcy5pbmNsdWRlcyhTVFJFRVRfTlVNQkVSKSlcbiAgICAgID8ubG9uZ19uYW1lIHx8ICcnO1xuICBjb25zdCByb3V0ZSA9XG4gICAgY29tcG9uZW50cy5maW5kKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50eXBlcy5pbmNsdWRlcyhTVFJFRVRfTkFNRSkpXG4gICAgICA/LnNob3J0X25hbWUgfHwgJyc7XG4gIGNvbnN0IHN1YnByZW1pc2UgPVxuICAgIGNvbXBvbmVudHMuZmluZCgoY29tcG9uZW50KSA9PiBjb21wb25lbnQudHlwZXMuaW5jbHVkZXMoVU5JVF9OVU1CRVIpKVxuICAgICAgPy5sb25nX25hbWUgfHwgJyc7XG5cbiAgaWYgKCFzdHJlZXROdW1iZXIgfHwgIXJvdXRlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYCR7c3RyZWV0TnVtYmVyfSAke3JvdXRlfSAke3N1YnByZW1pc2UgPyBgIyR7c3VicHJlbWlzZX1gIDogJyd9YC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDaXR5U3RhdGVBbmRaaXAoY29tcG9uZW50czogQWRkcmVzc0NvbXBvbmVudFtdKSB7XG4gIGNvbnN0IGNpdHkgPVxuICAgIGNvbXBvbmVudHMuZmluZChcbiAgICAgIChjb21wb25lbnQpID0+XG4gICAgICAgIGNvbXBvbmVudC50eXBlcy5pbmNsdWRlcyhDSVRZKSB8fCBjb21wb25lbnQudHlwZXMuaW5jbHVkZXMoU1VCTE9DQUxJVFkpXG4gICAgKT8ubG9uZ19uYW1lIHx8ICcnO1xuICBjb25zdCBzdGF0ZSA9XG4gICAgY29tcG9uZW50cy5maW5kKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50eXBlcy5pbmNsdWRlcyhTVEFURSkpXG4gICAgICA/LnNob3J0X25hbWUgfHwgJyc7XG4gIGNvbnN0IHppcCA9XG4gICAgY29tcG9uZW50cy5maW5kKChjb21wb25lbnQpID0+IGNvbXBvbmVudC50eXBlcy5pbmNsdWRlcyhaSVApKT8ubG9uZ19uYW1lIHx8XG4gICAgJyc7XG5cbiAgcmV0dXJuIHsgY2l0eSwgc3RhdGUsIHppcCB9O1xufVxuXG5mdW5jdGlvbiBleHRyYWN0T3JnTmFtZShwbGFjZTogZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlUmVzdWx0KSB7XG4gIHJldHVybiBwbGFjZS5uYW1lIHx8ICcnO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UGhvbmUocGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCkge1xuICByZXR1cm4gcGxhY2UuZm9ybWF0dGVkX3Bob25lX251bWJlciB8fCAnJztcbn1cblxuZXhwb3J0IHtcbiAgZXh0cmFjdENpdHlTdGF0ZUFuZFppcCxcbiAgZXh0cmFjdFN0cmVldEFkZHJlc3MsXG4gIGV4dHJhY3RPcmdOYW1lLFxuICBleHRyYWN0UGhvbmVcbn07XG5leHBvcnQgdHlwZSB7IEFkZHJlc3NDb21wb25lbnQgfTtcbiIsImZ1bmN0aW9uIFBsYWNlc1NlYXJjaExvYWRpbmdJbmRpY2F0b3IoeyBpc0xvYWRpbmcgfTogeyBpc0xvYWRpbmc6IGJvb2xlYW4gfSkge1xuICBpZiAoIWlzTG9hZGluZykgcmV0dXJuIG51bGw7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHJpZ2h0LTAgei0xMFwiXG4gICAgICBkYXRhLXRlc3RpZD1cImxvYWRpbmctaW5kaWNhdG9yXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBib3JkZXIgYm9yZGVyLVsjZThlY2VkXSBiZy13aGl0ZSBwLTIgc2hhZG93LXNtXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xLzIgYW5pbWF0ZS1wdWxzZSBiZy1ncmF5LTIwIHAtMVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdy1mdWxsIGJvcmRlciBib3JkZXItWyNlOGVjZWRdIGJnLXdoaXRlICBwLTIgc2hhZG93LXNtXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy01LzYgYW5pbWF0ZS1wdWxzZSBiZy1ncmF5LTIwIHAtMVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdy1mdWxsIGJvcmRlciBib3JkZXItWyNlOGVjZWRdIGJnLXdoaXRlIHAtMiBzaGFkb3ctc21cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMvNCBhbmltYXRlLXB1bHNlIGJnLWdyYXktMjAgcC0xXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB3LWZ1bGwgYm9yZGVyIGJvcmRlci1bI2U4ZWNlZF0gYmctd2hpdGUgcC0yIHNoYWRvdy1zbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMS8zIGFuaW1hdGUtcHVsc2UgYmctZ3JheS0yMCBwLTFcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHctZnVsbCBib3JkZXIgYm9yZGVyLVsjZThlY2VkXSBiZy13aGl0ZSBwLTIgc2hhZG93LXNtXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xLzQgYW5pbWF0ZS1wdWxzZSBiZy1ncmF5LTIwIHAtMVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBsYWNlc1NlYXJjaExvYWRpbmdJbmRpY2F0b3I7XG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vLyBMaWJzXG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBQbGFjZXNBdXRvY29tcGxldGUgZnJvbSAncmVhY3QtcGxhY2VzLWF1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyB1c2VTY3JpcHQgfSBmcm9tICd1c2Vob29rcy10cyc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCBQbGFjZXNTZWFyY2hMb2FkaW5nSW5kaWNhdG9yIGZyb20gJy4vUGxhY2VzU2VhcmNoTG9hZGluZ0luZGljYXRvcic7XG5cbi8vIFR5cGVzXG5pbXBvcnQgdHlwZSB7IEZpZWxkRXJyb3IsIEZpZWxkRXJyb3JzSW1wbCwgTWVyZ2UgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuXG5pbnRlcmZhY2UgUGxhY2VzQXV0b2NvbXBsZXRlRmllbGRQcm9wcyB7XG4gIGlucHV0VmFsdWU6IHN0cmluZztcbiAgaGFuZGxlU2VsZWN0OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nIHwgRmllbGRFcnJvciB8IE1lcmdlPEZpZWxkRXJyb3IsIEZpZWxkRXJyb3JzSW1wbDxhbnk+PjtcbiAgbGFiZWw/OiBzdHJpbmcgfCBudWxsO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHJlbmRlcj86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIFBsYWNlc0F1dG9jb21wbGV0ZUZpZWxkKHtcbiAgaW5wdXRWYWx1ZSxcbiAgaGFuZGxlU2VsZWN0LFxuICBwbGFjZWhvbGRlcixcbiAgZXJyb3JNZXNzYWdlLFxuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIHJlbmRlciA9IHRydWUsXG4gIC4uLnByb3BzXG59OiBSZWFkb25seTxQbGFjZXNBdXRvY29tcGxldGVGaWVsZFByb3BzPikge1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKGlucHV0VmFsdWUpO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsdWUpO1xuICB9O1xuXG4gIGNvbnN0IHN0YXR1cyA9IHVzZVNjcmlwdChcbiAgICBgaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2tleT1BSXphU3lBWFpKNWliWFg0VjZTQjY4SXVHWFk5UGp5cEVBdmY0NE0mbGlicmFyaWVzPXBsYWNlc2AsXG4gICAgeyByZW1vdmVPblVubW91bnQ6IGZhbHNlIH1cbiAgKTtcbiAgY29uc3QgaXNTY3JpcHRMb2FkZWQgPSBzdGF0dXMgPT09ICdyZWFkeSc7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRWYWx1ZShpbnB1dFZhbHVlKTtcbiAgfSwgW2lucHV0VmFsdWVdKTtcblxuICBpZiAoIWlzU2NyaXB0TG9hZGVkIHx8ICFyZW5kZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFBsYWNlc0F1dG9jb21wbGV0ZVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3R9XG4gICAgPlxuICAgICAgeyh7IGdldElucHV0UHJvcHMsIHN1Z2dlc3Rpb25zLCBnZXRTdWdnZXN0aW9uSXRlbVByb3BzLCBsb2FkaW5nIH0pID0+IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17YHJkcy1Gb3JtRmllbGQgJHtjbHN4KHsgJ2lzLWludmFsaWQnOiBlcnJvck1lc3NhZ2UgfSl9YH1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YHJkcy1JbnB1dCByZWxhdGl2ZSAke2Nsc3goe1xuICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IGVycm9yTWVzc2FnZVxuICAgICAgICAgICAgfSl9YH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgey4uLmdldElucHV0UHJvcHMoeyBwbGFjZWhvbGRlciB9KX1cbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJvcmctYWRkcmVzcy1pbnB1dC1zZWxlY3Rpb25cIlxuICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgIGlkPVwib3JnYW5pemF0aW9uLWFkZHJlc3NcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHJpZ2h0LTAgei01MFwiPlxuICAgICAgICAgICAgICB7IXN1Z2dlc3Rpb25zLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICA8UGxhY2VzU2VhcmNoTG9hZGluZ0luZGljYXRvciBpc0xvYWRpbmc9e2xvYWRpbmd9IC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7c3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBzdWdnZXN0aW9uLmFjdGl2ZVxuICAgICAgICAgICAgICAgICAgPyAnc3VnZ2VzdGlvbi1pdGVtLS1hY3RpdmUnXG4gICAgICAgICAgICAgICAgICA6ICdzdWdnZXN0aW9uLWl0ZW0nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gc3VnZ2VzdGlvbi5hY3RpdmVcbiAgICAgICAgICAgICAgICAgID8geyBiYWNrZ3JvdW5kQ29sb3I6ICcjZmFmYWZhJywgY3Vyc29yOiAncG9pbnRlcicgfVxuICAgICAgICAgICAgICAgICAgOiB7IGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLCBjdXJzb3I6ICdwb2ludGVyJyB9O1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIHsuLi5nZXRTdWdnZXN0aW9uSXRlbVByb3BzKHN1Z2dlc3Rpb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGVcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIGtleT17aWR4fVxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFkZHJlc3Mtc3VnZ2VzdGlvbnMtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtc20gdy1mdWxsIGJvcmRlciBib3JkZXItWyNlOGVjZWRdIHAtMiBzaGFkb3ctc21cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3N1Z2dlc3Rpb24uZGVzY3JpcHRpb259PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7ZXJyb3JNZXNzYWdlICYmIChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInJkcy1Gb3JtRmllbGQtZXJyb3IgbXQtWzRweF1cIj5cbiAgICAgICAgICAgICAge3R5cGVvZiBlcnJvck1lc3NhZ2UgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBlcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICA6IFN0cmluZyhlcnJvck1lc3NhZ2UpfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L1BsYWNlc0F1dG9jb21wbGV0ZT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUGxhY2VzQXV0b2NvbXBsZXRlRmllbGQ7XG4iLCJpbXBvcnQgVGV4dCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vdGV4dCc7XG5cbmZ1bmN0aW9uIE5vdEFQYXN0b3JNZXNzYWdlKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicm91bmRlZCBwLTJcIj5cbiAgICAgIDxUZXh0IHNpemU9XCJib2R5TWVkaXVtXCIgY2xhc3NOYW1lPVwibWItMiBmb250LXNlbWlib2xkXCI+XG4gICAgICAgIENvb3JkaW5hdG9ycyBnZXQgPGVtPkZpbmFuY2lhbCBQZWFjZSBVbml2ZXJzaXR5PC9lbT4gZm9yIGZyZWUgd2hlbiB0aGV5XG4gICAgICAgIGxlYWQgYSBjbGFzcy57JyAnfVxuICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly93d3cucmFtc2V5c29sdXRpb25zLmNvbS9tb25leS9jb29yZGluYXRvclwiPlxuICAgICAgICAgIFRhbGsgd2l0aCBvdXIgdGVhbSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgICAgPC9hPlxuICAgICAgPC9UZXh0PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBOb3RBUGFzdG9yTWVzc2FnZTtcbiIsIi8vIExpYnNcbmltcG9ydCBSZUNBUFRDSEEgZnJvbSAncmVhY3QtZ29vZ2xlLXJlY2FwdGNoYSc7XG5pbXBvcnQgeyBDb250cm9sbGVyLCBTdWJtaXRIYW5kbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG4vLyBSRFNcbmltcG9ydCBCdXR0b24gZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2J1dHRvbic7XG5pbXBvcnQgQ2hlY2tib3ggZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2NoZWNrYm94JztcbmltcG9ydCBGb3JtRmllbGQgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2Zvcm0tZmllbGQnO1xuaW1wb3J0IEhlYWRpbmcgZnJvbSAnQHJhbXNleS1kZXNpZ24tc3lzdGVtL2hlYWRpbmcnO1xuaW1wb3J0IElucHV0IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9pbnB1dCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9zZWxlY3QnO1xuaW1wb3J0IFN0YWNrIGZyb20gJ0ByYW1zZXktZGVzaWduLXN5c3RlbS9zdGFjayc7XG5pbXBvcnQgVGV4dCBmcm9tICdAcmFtc2V5LWRlc2lnbi1zeXN0ZW0vdGV4dCc7XG5cbi8vIEhvb2tzXG5pbXBvcnQgeyB1c2VGcHVNYXJrZXRpbmdGb3JtIH0gZnJvbSAnLi9ob29rcy91c2VGcHVNYXJrZXRpbmdGb3JtJztcbmltcG9ydCB7IHVzZVN1Ym1pdEZwdU1hcmtldGluZ0Zvcm0gfSBmcm9tICcuL2hvb2tzL3VzZVN1Ym1pdEZwdU1hcmtldGluZ0Zvcm0nO1xuaW1wb3J0IHVzZVJlY2FwdGNoYSBmcm9tICcuLi8uLi9zaGFyZWQvaG9va3MvdXNlUmVjYXB0Y2hhJztcblxuLy8gVXRpbHNcbmltcG9ydCB7IFBBU1RPUl9ST0xFUywgT1JHQU5JWkFUSU9OX1JPTEVTLCBERU5PTUlOQVRJT05TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRnB1TWFya2V0aW5nRm9ybVBheWxvYWQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdlb2NvZGVCeUFkZHJlc3MgfSBmcm9tICdyZWFjdC1wbGFjZXMtYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7XG4gIGV4dHJhY3RDaXR5U3RhdGVBbmRaaXAsXG4gIGV4dHJhY3RTdHJlZXRBZGRyZXNzXG59IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9hZGRyZXNzQXV0b2NvbXBsZXRlJztcbmltcG9ydCBQbGFjZXNBdXRvY29tcGxldGVGaWVsZCBmcm9tICcuLi8uLi9zaGFyZWQvY29tcG9uZW50cy9QbGFjZXNBdXRvY29tcGxldGVGaWVsZCc7XG5pbXBvcnQgTm90QVBhc3Rvck1lc3NhZ2UgZnJvbSAnLi9jb21wb25lbnRzL05vdEFQYXN0b3JNZXNzYWdlJztcblxuZnVuY3Rpb24gRnB1TWFya2V0aW5nRm9ybSgpIHtcbiAgY29uc3QgW2lzU3VibWl0dGluZywgc2V0SXNTdWJtaXR0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N1Ym1pc3Npb25FcnJvciwgc2V0U3VibWlzc2lvbkVycm9yXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Nob3dTdWNjZXNzTWVzc2FnZSwgc2V0U2hvd1N1Y2Nlc3NNZXNzYWdlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FkZHJlc3MsIHNldEFkZHJlc3NdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbaXNOb25QYXN0b3JTZWxlY3RlZCwgc2V0SXNOb25QYXN0b3JTZWxlY3RlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc1N1Ym1pdERpc2FibGVkLCBzZXRJc1N1Ym1pdERpc2FibGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB7IHJlY2FwdGNoYVJlZiwgaGFuZGxlUmVjYXB0Y2hhIH0gPSB1c2VSZWNhcHRjaGEoKTtcbiAgY29uc3QgeyBkaWFsb2dWYWx1ZXMsIGZvcm1NZXRob2RzLCB1cmxQYXJhbXMgfSA9IHVzZUZwdU1hcmtldGluZ0Zvcm0oKTtcbiAgY29uc3Qge1xuICAgIHJlZ2lzdGVyLFxuICAgIHNldFZhbHVlLFxuICAgIGhhbmRsZVN1Ym1pdCxcbiAgICBmb3JtU3RhdGU6IHsgZXJyb3JzIH0sXG4gICAgY2xlYXJFcnJvcnMsXG4gICAgcmVzZXQ6IHJlc2V0Rm9ybVxuICB9ID0gZm9ybU1ldGhvZHM7XG4gIGNvbnN0IHsgc3VibWl0Rm9ybSB9ID0gdXNlU3VibWl0RnB1TWFya2V0aW5nRm9ybSgpO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGdlb2NvZGVCeUFkZHJlc3ModmFsdWUpO1xuICAgIGNvbnN0IHBsYWNlID0gcmVzdWx0c1swXTtcbiAgICBjb25zdCBmb3JtYXR0ZWRBZGRyZXNzID0gcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3M7XG4gICAgY29uc3QgYWRkcmVzc0NvbXBvbmVudHMgPSBwbGFjZS5hZGRyZXNzX2NvbXBvbmVudHM7XG5cbiAgICBjb25zdCBzdHJlZXQgPSBleHRyYWN0U3RyZWV0QWRkcmVzcyhhZGRyZXNzQ29tcG9uZW50cyk7XG4gICAgY29uc3Qge1xuICAgICAgY2l0eSxcbiAgICAgIHN0YXRlOiBzdGF0ZUNvZGUsXG4gICAgICB6aXBcbiAgICB9ID0gZXh0cmFjdENpdHlTdGF0ZUFuZFppcChhZGRyZXNzQ29tcG9uZW50cyk7XG5cbiAgICBzZXRBZGRyZXNzKGZvcm1hdHRlZEFkZHJlc3MpO1xuICAgIHNldFZhbHVlKCdvcmdhbml6YXRpb25BZGRyZXNzJywgZm9ybWF0dGVkQWRkcmVzcyk7XG4gICAgc2V0VmFsdWUoJ29yZ2FuaXphdGlvblN0cmVldCcsIHN0cmVldCk7XG4gICAgc2V0VmFsdWUoJ29yZ2FuaXphdGlvbkNpdHknLCBjaXR5KTtcbiAgICBzZXRWYWx1ZSgnb3JnYW5pemF0aW9uU3RhdGVDb2RlJywgc3RhdGVDb2RlKTtcbiAgICBzZXRWYWx1ZSgnb3JnYW5pemF0aW9uWmlwJywgemlwKTtcbiAgfTtcblxuICBjb25zdCBjYXRlZ29yaWVzID1cbiAgICBkaWFsb2dWYWx1ZXM/Lmd0bUV2ZW50cz8ubWFwKChldikgPT4gZXYuY2F0ZWdvcnkpLmpvaW4oJ3wnKSA/PyAnJztcbiAgY29uc3QgYWN0aW9ucyA9XG4gICAgZGlhbG9nVmFsdWVzPy5ndG1FdmVudHM/Lm1hcCgoZXYpID0+IGV2LmFjdGlvbikuam9pbignfCcpID8/ICcnO1xuICBjb25zdCBsYWJlbHMgPSBkaWFsb2dWYWx1ZXM/Lmd0bUV2ZW50cz8ubWFwKChldikgPT4gZXYubGFiZWwpLmpvaW4oJ3wnKSA/PyAnJztcblxuICBjb25zdCBoYW5kbGVBZGRyZXNzQ2hhbmdlID0gKHZhbHVlOiBzdHJpbmcpID0+IHNldEFkZHJlc3ModmFsdWUpO1xuXG4gIGNvbnN0IG9uU3VibWl0OiBTdWJtaXRIYW5kbGVyPEZwdU1hcmtldGluZ0Zvcm1QYXlsb2FkPiA9IGFzeW5jIChmb3JtRGF0YSkgPT4ge1xuICAgIGlmIChpc1N1Ym1pdHRpbmcpIHJldHVybjtcblxuICAgIHNldElzU3VibWl0dGluZyh0cnVlKTtcbiAgICBzZXRTdWJtaXNzaW9uRXJyb3IoJycpO1xuXG4gICAgY29uc3QgcGF0aCA9IGdsb2JhbFRoaXMubG9jYXRpb24/LnBhdGhuYW1lIHx8ICcvJztcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAuLi5mb3JtRGF0YSxcbiAgICAgIC4uLmRpYWxvZ1ZhbHVlcyxcbiAgICAgIC4uLnVybFBhcmFtcyxcbiAgICAgIHBhdGgsXG4gICAgICBsZWFkU291cmNlOiBkaWFsb2dWYWx1ZXM/LmxlYWRTb3VyY2UgPz8gZ2xvYmFsVGhpcy5sb2NhdGlvbi5ocmVmLFxuICAgICAgc21zT3B0SW46IGZvcm1EYXRhLnNtc09wdEluID8/IGZhbHNlLFxuICAgICAgZW1haWxPcHRJbjogZm9ybURhdGEuZW1haWxPcHRJbiA/PyBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHN1Ym1pdEZvcm0ocGF5bG9hZCk7XG5cbiAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgLy8gUHVzaCBHVE0gZXZlbnQgZGF0YSB0byBndG1EYXRhTGF5ZXIgZm9yIEdvb2dsZSBBbmFseXRpY3NcbiAgICAgIGlmIChkaWFsb2dWYWx1ZXM/Lmd0bUV2ZW50cyAmJiBkaWFsb2dWYWx1ZXMuZ3RtRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBnbG9iYWxUaGlzLmd0bURhdGFMYXllciA9IGdsb2JhbFRoaXMuZ3RtRGF0YUxheWVyIHx8IFtdO1xuXG4gICAgICAgIC8vIFB1c2ggZWFjaCBHVE0gZXZlbnQgdG8gZ3RtRGF0YUxheWVyXG4gICAgICAgIGZvciAoY29uc3QgZ3RtRXZlbnQgb2YgZGlhbG9nVmFsdWVzLmd0bUV2ZW50cykge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBnbG9iYWxUaGlzLmd0bURhdGFMYXllcj8ucHVzaCh7XG4gICAgICAgICAgICBldmVudDogJ2Zvcm1TdWJtaXNzaW9uJyxcbiAgICAgICAgICAgIGV2ZW50X3BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgbW9kdWxlX3R5cGU6IGd0bUV2ZW50LmNhdGVnb3J5LFxuICAgICAgICAgICAgICBtb2R1bGVfY2F0ZWdvcnk6IGd0bUV2ZW50LmFjdGlvbixcbiAgICAgICAgICAgICAgbW9kdWxlX2xhYmVsOiBndG1FdmVudC5sYWJlbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkaWFsb2dWYWx1ZXM/LnN1Y2Nlc3NVcmwpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBkaWFsb2dWYWx1ZXMuc3VjY2Vzc1VybDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXRTaG93U3VjY2Vzc01lc3NhZ2UodHJ1ZSk7XG4gICAgICByZXNldEZvcm0oKTtcbiAgICAgIGNsZWFyRXJyb3JzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFN1Ym1pc3Npb25FcnJvcihcbiAgICAgICAgcmVzcG9uc2UubWVzc2FnZSB8fFxuICAgICAgICAgICdUaGVyZSB3YXMgYW4gZXJyb3Igc3VibWl0dGluZyB0aGUgZm9ybS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nXG4gICAgICApO1xuICAgIH1cbiAgICBzZXRJc1N1Ym1pdHRpbmcoZmFsc2UpO1xuICB9O1xuXG4gIGlmIChzaG93U3VjY2Vzc01lc3NhZ2UpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJpbmFyLWxlYWQtZm9ybS1zdWNjZXNzXCI+XG4gICAgICAgIDxIZWFkaW5nXG4gICAgICAgICAgbGV2ZWw9XCIyXCJcbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIHRleHQtYmx1ZS04MCB0ZXh0LWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICBUaGFuayB5b3UgZm9yIHJlZ2lzdGVyaW5nIVxuICAgICAgICA8L0hlYWRpbmc+XG4gICAgICAgIDxUZXh0IHNpemU9XCJib2R5TWVkaXVtXCIgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICBLZWVwIGFuIGV5ZSBvdXQgZm9yIGFuIGVtYWlsIHdpdGggZnVydGhlciBkZXRhaWxzIVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgaWYgKCFkaWFsb2dWYWx1ZXMpIHtcbiAgICByZXR1cm4gPFRleHQ+TG9hZGluZyBmb3JtLi4uPC9UZXh0PjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtzdWJtaXNzaW9uRXJyb3IgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZ3psLUZvcm1GaWVsZC1lcnJvciBGb3JtRXJyb3JzIHUtc3BhY2luZ1N0YWNrNFwiXG4gICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3psLUZvcm1GaWVsZC1lcnJvclwiPlxuICAgICAgICAgICAgPEhlYWRpbmcgbGV2ZWw9XCIzXCIgY29sb3I9XCJicmFuZFwiIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICB7c3VibWlzc2lvbkVycm9yfVxuICAgICAgICAgICAgPC9IZWFkaW5nPlxuICAgICAgICAgICAgPFRleHQgc2l6ZT1cImJvZHlTbWFsbFwiPlxuICAgICAgICAgICAgICBQbGVhc2UgZW1haWwgc3VwcG9ydCBhdHsnICd9XG4gICAgICAgICAgICAgIDxhIGhyZWY9XCJtYWlsdG86c3VwcG9ydEByYW1zZXlzb2x1dGlvbnMuY29tXCI+XG4gICAgICAgICAgICAgICAgc3VwcG9ydEByYW1zZXlzb2x1dGlvbnMuY29tXG4gICAgICAgICAgICAgIDwvYT57JyAnfVxuICAgICAgICAgICAgICBvciB0cnkgYWdhaW4gbGF0ZXIuXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgPGZvcm1cbiAgICAgICAgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdChvblN1Ym1pdCl9XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiZnB1LW1hcmtldGluZy1mb3JtXCJcbiAgICAgICAgZGF0YS1hbmFseXRpY3MtZm9ybT17ZGlhbG9nVmFsdWVzPy5mb3JtU291cmNlIHx8ICdGUFUgTWFya2V0aW5nIEZvcm0nfVxuICAgICAgICBkYXRhLWFuYWx5dGljcy1mb3JtLW1vZHVsZS1jYXRlZ29yeT17Y2F0ZWdvcmllc31cbiAgICAgICAgZGF0YS1hbmFseXRpY3MtZm9ybS1tb2R1bGUtYWN0aW9uPXthY3Rpb25zfVxuICAgICAgICBkYXRhLWFuYWx5dGljcy1mb3JtLW1vZHVsZS1sYWJlbD17bGFiZWxzfVxuICAgICAgPlxuICAgICAgICA8U3RhY2tcbiAgICAgICAgICB2ZXJ0aWNhbFxuICAgICAgICAgIHNwYWNpbmc9XCJsZ1wiXG4gICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudD1cImZpbGxcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBtYXgtdy1bNDI1cHhdIG14LWF1dG9cIlxuICAgICAgICA+XG4gICAgICAgICAge2RpYWxvZ1ZhbHVlcz8uc2hvd05hbWUgJiYgKFxuICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICBsYWJlbD1cIk5hbWVcIlxuICAgICAgICAgICAgICBpbnZhbGlkPXshIWVycm9ycy5maXJzdE5hbWUgfHwgISFlcnJvcnMubGFzdE5hbWV9XG4gICAgICAgICAgICAgIGVycm9ycz17W2Vycm9ycy5maXJzdE5hbWU/Lm1lc3NhZ2UsIGVycm9ycy5sYXN0TmFtZT8ubWVzc2FnZV19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHsocHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICA8U3RhY2s+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVnaXN0ZXIoJ2ZpcnN0TmFtZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogJ0ZpcnN0IG5hbWUgaXMgcmVxdWlyZWQnXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaXJzdCBOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy0xLzJcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZWdpc3RlcignbGFzdE5hbWUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdMYXN0IG5hbWUgaXMgcmVxdWlyZWQnXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhc3QgTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctMS8yIG1sLTJcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1N0YWNrPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICBsYWJlbD1cIkVtYWlsXCJcbiAgICAgICAgICAgIGludmFsaWQ9eyEhZXJyb3JzLmVtYWlsfVxuICAgICAgICAgICAgZXJyb3JzPXtbZXJyb3JzLmVtYWlsPy5tZXNzYWdlXX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgeyhwcm9wcykgPT4gKFxuICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKCdlbWFpbCcsIHsgcmVxdWlyZWQ6ICdFbWFpbCBpcyByZXF1aXJlZCcgfSl9XG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVtYWlsIEFkZHJlc3NcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0Zvcm1GaWVsZD5cblxuICAgICAgICAgIHtkaWFsb2dWYWx1ZXM/LnNob3dQaG9uZSAmJiAoXG4gICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgIGxhYmVsPVwiUGhvbmUgTnVtYmVyXCJcbiAgICAgICAgICAgICAgaW52YWxpZD17ISFlcnJvcnMucGhvbmV9XG4gICAgICAgICAgICAgIGVycm9ycz17W2Vycm9ycy5waG9uZT8ubWVzc2FnZV19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHsocHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGhvbmUgTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIHsuLi5yZWdpc3RlcihcbiAgICAgICAgICAgICAgICAgICAgJ3Bob25lJyxcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nVmFsdWVzLnNob3dQaG9uZVJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgPyB7IHJlcXVpcmVkOiAnUGhvbmUgaXMgcmVxdWlyZWQnIH1cbiAgICAgICAgICAgICAgICAgICAgICA6IHt9XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJwaG9uZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7ZGlhbG9nVmFsdWVzPy5zaG93T3JnYW5pemF0aW9uTmFtZSAmJiAoXG4gICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgIGxhYmVsPVwiT3JnYW5pemF0aW9uIE5hbWU6XCJcbiAgICAgICAgICAgICAgaW52YWxpZD17ISFlcnJvcnMub3JnYW5pemF0aW9uTmFtZX1cbiAgICAgICAgICAgICAgZXJyb3JzPXtbZXJyb3JzLm9yZ2FuaXphdGlvbk5hbWU/Lm1lc3NhZ2VdfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk9yZ2FuaXphdGlvbiBOYW1lXCJcbiAgICAgICAgICAgICAgICAgIHsuLi5yZWdpc3RlcihcbiAgICAgICAgICAgICAgICAgICAgJ29yZ2FuaXphdGlvbk5hbWUnLFxuICAgICAgICAgICAgICAgICAgICBkaWFsb2dWYWx1ZXM/LnNob3dPcmdhbml6YXRpb25OYW1lUmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICA/IHsgcmVxdWlyZWQ6ICdPcmdhbml6YXRpb24gTmFtZSBpcyByZXF1aXJlZCcgfVxuICAgICAgICAgICAgICAgICAgICAgIDoge31cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm9yZ2FuaXphdGlvbk5hbWVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2RpYWxvZ1ZhbHVlcz8uc2hvd09yZ2FuaXphdGlvbkFkZHJlc3MgJiYgKFxuICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICBsYWJlbD1cIk9yZ2FuaXphdGlvbiBBZGRyZXNzOlwiXG4gICAgICAgICAgICAgIGludmFsaWQ9eyEhZXJyb3JzLm9yZ2FuaXphdGlvbkFkZHJlc3N9XG4gICAgICAgICAgICAgIGVycm9ycz17W2Vycm9ycy5vcmdhbml6YXRpb25BZGRyZXNzPy5tZXNzYWdlXX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeygpID0+IChcbiAgICAgICAgICAgICAgICA8Q29udHJvbGxlclxuICAgICAgICAgICAgICAgICAgY29udHJvbD17Zm9ybU1ldGhvZHMuY29udHJvbH1cbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJvcmdhbml6YXRpb25BZGRyZXNzXCJcbiAgICAgICAgICAgICAgICAgIHJ1bGVzPXtcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nVmFsdWVzLnNob3dPcmdhbml6YXRpb25BZGRyZXNzUmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICA/IHsgcmVxdWlyZWQ6ICdPcmdhbml6YXRpb24gQWRkcmVzcyBpcyByZXF1aXJlZCcgfVxuICAgICAgICAgICAgICAgICAgICAgIDoge31cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJlbmRlcj17KHsgZmllbGQgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8UGxhY2VzQXV0b2NvbXBsZXRlRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICB7Li4uZmllbGR9XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0PXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQWRkcmVzc0NoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWU9e2FkZHJlc3MgPz8gJyd9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2RpYWxvZ1ZhbHVlcz8uc2hvd09yZ2FuaXphdGlvbkRlbm9taW5hdGlvbiAmJiAoXG4gICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgIGxhYmVsPVwiT3JnYW5pemF0aW9uIERlbm9taW5hdGlvbjpcIlxuICAgICAgICAgICAgICBpbnZhbGlkPXshIWVycm9ycy5vcmdhbml6YXRpb25EZW5vbWluYXRpb259XG4gICAgICAgICAgICAgIGVycm9ycz17W2Vycm9ycy5vcmdhbml6YXRpb25EZW5vbWluYXRpb24/Lm1lc3NhZ2VdfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKFxuICAgICAgICAgICAgICAgICAgICAnb3JnYW5pemF0aW9uRGVub21pbmF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nVmFsdWVzPy5zaG93T3JnYW5pemF0aW9uRGVub21pbmF0aW9uUmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICA/IHsgcmVxdWlyZWQ6ICdPcmdhbml6YXRpb24gRGVub21pbmF0aW9uIGlzIHJlcXVpcmVkJyB9XG4gICAgICAgICAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwib3JnYW5pemF0aW9uRGVub21pbmF0aW9uXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IGRlbm9taW5hdGlvbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAge0RFTk9NSU5BVElPTlMubWFwKChkZW5vbWluYXRpb24pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e2Rlbm9taW5hdGlvbi52YWx1ZX0gdmFsdWU9e2Rlbm9taW5hdGlvbi52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAge2Rlbm9taW5hdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7ZGlhbG9nVmFsdWVzPy5zaG93T3JnYW5pemF0aW9uRGVub21pbmF0aW9uICYmXG4gICAgICAgICAgICBmb3JtTWV0aG9kcy53YXRjaCgnb3JnYW5pemF0aW9uRGVub21pbmF0aW9uJykgPT09ICdPdGhlcicgJiYgKFxuICAgICAgICAgICAgICA8Rm9ybUZpZWxkXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJQbGVhc2Ugc3BlY2lmeSB5b3VyIGRlbm9taW5hdGlvbjpcIlxuICAgICAgICAgICAgICAgIGludmFsaWQ9eyEhZXJyb3JzLm9yZ2FuaXphdGlvbkRlbm9taW5hdGlvbkRldGFpbHN9XG4gICAgICAgICAgICAgICAgZXJyb3JzPXtbZXJyb3JzLm9yZ2FuaXphdGlvbkRlbm9taW5hdGlvbkRldGFpbHM/Lm1lc3NhZ2VdfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7KHByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVnaXN0ZXIoJ29yZ2FuaXphdGlvbkRlbm9taW5hdGlvbkRldGFpbHMnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdEZW5vbWluYXRpb24gZGV0YWlscyBhcmUgcmVxdWlyZWQnXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm9yZ2FuaXphdGlvbkRlbm9taW5hdGlvbkRldGFpbHNcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgZGVub21pbmF0aW9uIGRldGFpbHNcIlxuICAgICAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezI1NX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAge2RpYWxvZ1ZhbHVlcz8uc2hvd09yZ2FuaXphdGlvblJvbGUgJiYgKFxuICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICBsYWJlbD1cIk9yZ2FuaXphdGlvbiBSb2xlOlwiXG4gICAgICAgICAgICAgIGludmFsaWQ9eyEhZXJyb3JzLm9yZ2FuaXphdGlvblJvbGV9XG4gICAgICAgICAgICAgIGVycm9ycz17W2Vycm9ycy5vcmdhbml6YXRpb25Sb2xlPy5tZXNzYWdlXX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyhwcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgICAgIHsuLi5yZWdpc3Rlcignb3JnYW5pemF0aW9uUm9sZScsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGRpYWxvZ1ZhbHVlcz8uc2hvd09yZ2FuaXphdGlvblJvbGVSZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ09yZ2FuaXphdGlvbiBSb2xlIGlzIHJlcXVpcmVkJ1xuICAgICAgICAgICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc05vblBhc3RvclNlbGVjdGVkKHNlbGVjdGVkVmFsdWUgPT09ICdOb24tcGFzdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0SXNTdWJtaXREaXNhYmxlZChzZWxlY3RlZFZhbHVlID09PSAnTm9uLXBhc3RvcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwib3JnYW5pemF0aW9uUm9sZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCB5b3VyIHJvbGU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIHsoZGlhbG9nVmFsdWVzPy5yb2xlVHlwZSA9PT0gJ09SR0FOSVpBVElPTl9ST0xFUydcbiAgICAgICAgICAgICAgICAgICAgPyBPUkdBTklaQVRJT05fUk9MRVNcbiAgICAgICAgICAgICAgICAgICAgOiBQQVNUT1JfUk9MRVNcbiAgICAgICAgICAgICAgICAgICkubWFwKChyb2xlKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtyb2xlLnZhbHVlfSB2YWx1ZT17cm9sZS52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAge3JvbGUubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2RpYWxvZ1ZhbHVlcz8uc2hvd09yZ2FuaXphdGlvblNpemUgJiYgKFxuICAgICAgICAgICAgPEZvcm1GaWVsZFxuICAgICAgICAgICAgICBsYWJlbD1cIldlZWtseSBBdHRlbmRhbmNlOlwiXG4gICAgICAgICAgICAgIGludmFsaWQ9eyEhZXJyb3JzLm9yZ2FuaXphdGlvblNpemV9XG4gICAgICAgICAgICAgIGVycm9ycz17W2Vycm9ycy5vcmdhbml6YXRpb25TaXplPy5tZXNzYWdlXX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyhwcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKFxuICAgICAgICAgICAgICAgICAgICAnb3JnYW5pemF0aW9uU2l6ZScsXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ1ZhbHVlcz8uc2hvd09yZ2FuaXphdGlvblNpemVSZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgID8geyByZXF1aXJlZDogJ1dlZWtseSBBdHRlbmRhbmNlIGlzIHJlcXVpcmVkJyB9XG4gICAgICAgICAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwid2Vla2x5QXR0ZW5kYW5jZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgd2Vla2x5IGF0dGVuZGFuY2VcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2RpYWxvZ1ZhbHVlcz8uc2hvd1Ntc09wdEluICYmIChcbiAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICBsYWJlbD1cIkkgd291bGQgbGlrZSB0byByZWNlaXZlIHRleHQgbWVzc2FnZXMgYWJvdXQgRlBVIGZvciBjaHVyY2hlcy5cIlxuICAgICAgICAgICAgICB7Li4ucmVnaXN0ZXIoJ3Ntc09wdEluJyl9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwic21zT3B0SW5cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2RpYWxvZ1ZhbHVlcz8uc2hvd0VtYWlsT3B0SW4gJiYgKFxuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIGxhYmVsPVwiSSB3b3VsZCBsaWtlIHRvIHJlY2VpdmUgZW1haWxzIGFib3V0IEZQVSBmb3IgY2h1cmNoZXMuXCJcbiAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKCdlbWFpbE9wdEluJyl9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZW1haWxPcHRJblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8UmVDQVBUQ0hBXG4gICAgICAgICAgICBzaXplPVwiaW52aXNpYmxlXCJcbiAgICAgICAgICAgIHNpdGVrZXk9e3dpbmRvdy5GT1JNU19CRkZfQ09ORklHLlJFQ0FQVENIQV9TSVRFX0tFWX1cbiAgICAgICAgICAgIHJlZj17cmVjYXB0Y2hhUmVmfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVJlY2FwdGNoYX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicmVjYXB0Y2hhXCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAge2lzTm9uUGFzdG9yU2VsZWN0ZWQgJiYgPE5vdEFQYXN0b3JNZXNzYWdlIC8+fVxuXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nIHx8IGlzU3VibWl0RGlzYWJsZWR9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInN1Ym1pdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2RpYWxvZ1ZhbHVlcz8uYnV0dG9uVGV4dH1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9TdGFjaz5cbiAgICAgIDwvZm9ybT5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRnB1TWFya2V0aW5nRm9ybTtcbiIsImltcG9ydCB7IGNyZWF0ZVJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JztcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgc2hhcmVkUXVlcnlDbGllbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvY29uZmlnL3NoYXJlZFF1ZXJ5Q2xpZW50JztcbmltcG9ydCBGcHVNYXJrZXRpbmdGb3JtIGZyb20gJy4vRnB1TWFya2V0aW5nRm9ybSc7XG5pbXBvcnQgJy4uLy4uLy4uL2Nzcy9nbG9iYWwuY3NzJztcblxuY29uc3Qgcm9vdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnB1LW1hcmtldGluZy1mb3JtLXJvb3QnKTtcbmNvbnN0IHJvb3QgPSBjcmVhdGVSb290KHJvb3RFbGVtZW50ISk7XG5cbnJvb3QucmVuZGVyKFxuICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3NoYXJlZFF1ZXJ5Q2xpZW50fT5cbiAgICA8RnB1TWFya2V0aW5nRm9ybSAvPlxuICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4pO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCJ2YXIgZGVmZXJyZWQgPSBbXTtcbl9fd2VicGFja19yZXF1aXJlX18uTyA9IChyZXN1bHQsIGNodW5rSWRzLCBmbiwgcHJpb3JpdHkpID0+IHtcblx0aWYoY2h1bmtJZHMpIHtcblx0XHRwcmlvcml0eSA9IHByaW9yaXR5IHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gZGVmZXJyZWQubGVuZ3RoOyBpID4gMCAmJiBkZWZlcnJlZFtpIC0gMV1bMl0gPiBwcmlvcml0eTsgaS0tKSBkZWZlcnJlZFtpXSA9IGRlZmVycmVkW2kgLSAxXTtcblx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGRlZmVycmVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIFtjaHVua0lkcywgZm4sIHByaW9yaXR5XSA9IGRlZmVycmVkW2ldO1xuXHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2h1bmtJZHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGlmICgocHJpb3JpdHkgJiAxID09PSAwIHx8IG5vdEZ1bGZpbGxlZCA+PSBwcmlvcml0eSkgJiYgT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5PKS5ldmVyeSgoa2V5KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy5PW2tleV0oY2h1bmtJZHNbal0pKSkpIHtcblx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihmdWxmaWxsZWQpIHtcblx0XHRcdGRlZmVycmVkLnNwbGljZShpLS0sIDEpXG5cdFx0XHR2YXIgciA9IGZuKCk7XG5cdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTsiLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIG5vIGJhc2VVUklcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQxNTI6IDAsXG5cdDg4NjogMFxufTtcblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuX193ZWJwYWNrX3JlcXVpcmVfXy5PLmogPSAoY2h1bmtJZCkgPT4gKGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9PT0gMCk7XG5cbi8vIGluc3RhbGwgYSBKU09OUCBjYWxsYmFjayBmb3IgY2h1bmsgbG9hZGluZ1xudmFyIHdlYnBhY2tKc29ucENhbGxiYWNrID0gKHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uLCBkYXRhKSA9PiB7XG5cdHZhciBbY2h1bmtJZHMsIG1vcmVNb2R1bGVzLCBydW50aW1lXSA9IGRhdGE7XG5cdC8vIGFkZCBcIm1vcmVNb2R1bGVzXCIgdG8gdGhlIG1vZHVsZXMgb2JqZWN0LFxuXHQvLyB0aGVuIGZsYWcgYWxsIFwiY2h1bmtJZHNcIiBhcyBsb2FkZWQgYW5kIGZpcmUgY2FsbGJhY2tcblx0dmFyIG1vZHVsZUlkLCBjaHVua0lkLCBpID0gMDtcblx0aWYoY2h1bmtJZHMuc29tZSgoaWQpID0+IChpbnN0YWxsZWRDaHVua3NbaWRdICE9PSAwKSkpIHtcblx0XHRmb3IobW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcblx0XHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG5cdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmKHJ1bnRpbWUpIHZhciByZXN1bHQgPSBydW50aW1lKF9fd2VicGFja19yZXF1aXJlX18pO1xuXHR9XG5cdGlmKHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uKSBwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbihkYXRhKTtcblx0Zm9yKDtpIDwgY2h1bmtJZHMubGVuZ3RoOyBpKyspIHtcblx0XHRjaHVua0lkID0gY2h1bmtJZHNbaV07XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGluc3RhbGxlZENodW5rcywgY2h1bmtJZCkgJiYgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKSB7XG5cdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF1bMF0oKTtcblx0XHR9XG5cdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gMDtcblx0fVxuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5PKHJlc3VsdCk7XG59XG5cbnZhciBjaHVua0xvYWRpbmdHbG9iYWwgPSBzZWxmW1wid2VicGFja0NodW5rcmFtc2V5X3BsdXNfZm9ybXNcIl0gPSBzZWxmW1wid2VicGFja0NodW5rcmFtc2V5X3BsdXNfZm9ybXNcIl0gfHwgW107XG5jaHVua0xvYWRpbmdHbG9iYWwuZm9yRWFjaCh3ZWJwYWNrSnNvbnBDYWxsYmFjay5iaW5kKG51bGwsIDApKTtcbmNodW5rTG9hZGluZ0dsb2JhbC5wdXNoID0gd2VicGFja0pzb25wQ2FsbGJhY2suYmluZChudWxsLCBjaHVua0xvYWRpbmdHbG9iYWwucHVzaC5iaW5kKGNodW5rTG9hZGluZ0dsb2JhbCkpOyIsIiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgZGVwZW5kcyBvbiBvdGhlciBsb2FkZWQgY2h1bmtzIGFuZCBleGVjdXRpb24gbmVlZCB0byBiZSBkZWxheWVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyh1bmRlZmluZWQsIFsyNzksNzQ5LDI2Niw1MzMsNzU1LDg4Nl0sICgpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0OTcpKSlcbl9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8oX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4iLCIiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9