{"version":3,"sources":["../../../config-wrap-start-default.js","../lib/almond.js","models/fieldErrorModel.js","models/fieldErrorCollection.js","models/fieldModel.js","models/fieldCollection.js","models/formErrorModel.js","models/formErrorCollection.js","models/formModel.js","models/formCollection.js","controllers/formData.js","controllers/fieldError.js","controllers/changeField.js","controllers/changeEmail.js","controllers/changeDate.js","controllers/fieldCheckbox.js","controllers/fieldCheckboxList.js","controllers/fieldImageList.js","controllers/fieldRadio.js","controllers/fieldNumber.js","controllers/mirrorField.js","controllers/confirmField.js","controllers/updateFieldModel.js","controllers/submitButton.js","controllers/submitDebug.js","controllers/getFormErrors.js","controllers/validateRequired.js","controllers/submitError.js","controllers/actionRedirect.js","controllers/actionSuccess.js","controllers/fieldSelect.js","controllers/coreSubmitResponse.js","controllers/fieldProduct.js","controllers/fieldTotal.js","controllers/fieldQuantity.js","models/calcModel.js","models/calcCollection.js","controllers/calculations.js","controllers/dateBackwardsCompat.js","controllers/fieldDate.js","controllers/fieldRecaptcha.js","controllers/fieldRecaptchaV3.js","controllers/fieldHTML.js","controllers/helpText.js","controllers/fieldTextbox.js","controllers/fieldTextareaRTE.js","controllers/fieldStarRating.js","controllers/fieldTerms.js","controllers/formContentFilters.js","views/fieldItem.js","views/beforeField.js","views/fieldErrorItem.js","views/fieldErrorCollection.js","views/inputLimit.js","views/afterField.js","views/fieldRepeaterFieldLayout.js","views/fieldRepeaterFieldCollection.js","views/fieldRepeaterSetLayout.js","views/fieldRepeaterSetCollection.js","views/fieldRepeaterLayout.js","views/fieldLayout.js","controllers/loadViews.js","controllers/formErrors.js","controllers/submit.js","views/fieldCollection.js","controllers/defaultFilters.js","controllers/uniqueFieldError.js","models/fieldRepeaterSetModel.js","models/fieldRepeaterSetCollection.js","controllers/fieldRepeater.js","controllers/loadControllers.js","views/beforeForm.js","views/formErrorItem.js","views/formErrorCollection.js","views/honeyPot.js","views/afterFormContent.js","views/beforeFormContent.js","views/formLayout.js","views/afterForm.js","views/mainLayout.js","../nfLocaleConverter.js","main.js"],"names":["requirejs","require","define","undef","main","req","makeMap","handlers","defined","waiting","config","defining","hasOwn","Object","prototype","hasOwnProperty","aps","slice","jsSuffixRegExp","hasProp","obj","prop","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","baseParts","split","map","starMap","charAt","length","nodeIdCompat","test","replace","concat","splice","join","indexOf","substring","makeRequire","relName","forceSync","args","arguments","push","apply","makeLoad","depName","value","callDep","Error","splitPrefix","prefix","index","makeConfig","plugin","parts","makeNormalize","f","n","pr","p","exports","e","module","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","undefined","alt","setTimeout","cfg","_defined","amd","jQuery","Backbone","Model","extend","errorModel","Collection","model","fieldErrorCollection","defaults","placeholder","label_pos","classes","reRender","mirror_field","confirm_field","clean","disabled","visible","invalid","initialize","type","this","get","set","collection","options","formModel","listenTo","nfRadio","channel","resetModel","bind","changeModel","changeValue","listimageGet","listimageSet","trigger","formLoaded","beforeSubmit","attr","attributes","addWrapperClass","cl","removeWrapperClass","setInvalid","getValue","fieldModel","comparator","models","on","fieldCollection","validateFields","_","each","showFields","invoke","hideFields","FieldCollection","ErrorCollection","beforeForm","afterForm","beforeFields","afterFields","wrapper_class","element_class","hp","fieldErrors","extra","setting","formContentData","formContentLoadFilters","request","sortedArray","without","first","reply","getFieldByKey","addError","removeError","getExtra","addExtra","removeExtra","getForm","key","findWhere","msg","add","errors","remove","extraData","FormModel","FormCollection","Marionette","nfForms","getForms","getField","form","fieldErrorModel","getError","targetID","targetError","changeField","blurField","el","val","radioChannel","emailReg","errorID","onChangeModelValue","emailKeyup","onBlurField","fieldID","emailChange","changeEmailErrorMsg","keyCode","dateKeyup","changeHoursMinutes","dateChange","format","moment","isValid","changeDateErrorMsg","container","target","closest","selected_hour","find","selected_minute","selected_ampm","registerRenderClasses","validateRequired","validateModelData","beforeUpdateField","getCalcValue","addClass","removeClass","checked","calcValue","customClasses","customLabelClasses","maybeChecked","default_value","register","renderOptions","renderOtherText","selected","filter","opt","savedVal","Array","isArray","html","valueFound","option","label","nfFrontEnd","filter_esc_status","escape","isSelected","required","maybeFilterHTML","template","show_other","data","currentValue","calc_value","tmp_opt","Number","calc","parent","optionArray","valueIndex","clone","allow_multi_select","old_classname","image_type","list_orientation","flex_direction","that","num_columns","parseInt","current_column","current_row","image_options","image","show_option_labels","styles","changeModelValue","updateCheckedClass","maybeMinDefault","validateMinMax","min","$el","parseFloat","max","step","fieldNumberNumMinError","fieldNumberNumMaxError","testValue","Math","round","testStep","fieldNumberIncrementBy","listeningModel","registerMirror","targetModel","registerConfirm","confirmKeyup","confirmModel","formModal","registerConfirmListeners","confirmID","confirmFieldErrorMsg","compareValue","confirmValue","updateField","submitButton","bound","registerHandlers","click","resetLabel","maybeEnable","maybeDisable","processingLabel","size","response","nonce","new_nonce","nonce_ts","submitDebug","textStatus","jqXHR","formID","debug","debugMessages","document","createElement","message","messageText","createTextNode","appendChild","console","log","getFormErrors","error","field","validateKeyup","customReqValidation","defaultReqValidation","maskPlaceholder","trim","valid","maybeError","validateRequiredField","submitErrors","ajaxNonce","fields","slug","last","style","show","actionRedirect","halt","redirect","window","location","actions","actionSubmit","success_message","form_id","top_of_success_message","offset","top","bottom_of_success_message","outerHeight","bottom_of_screen","scrollTop","height","top_of_screen","animate","renderOtherAttributes","otherAttributes","multi_size","settings","clear_complete","reset","hide_complete","renderProductQuantity","renderProduct","product_type","product_use_quantity","totalModel","productTotals","registerShipping","onFormLoaded","onChangeProduct","onChangeQuantity","shippingModel","shippingCost","fieldModels","productFields","quantityFields","productID","product","productPrice","updateTotal","newTotal","productField","toFixed","registerQuantity","changeCalc","targetCalcModel","CalcModel","dec","toString","getCalc","CalcCollection","calcs","displayFields","registerCalcs","resetCalcs","use_merge_tags","calculations","fieldType","initDisplayField","updateDisplayFields","init","calcCollection","calcModel","setupCalc","eq","eqValues","match","RegExp","updateCalcFields","replaceKey","localeDecodeEquation","mexp","eval","localeConverter","nfLocaleConverter","nfi18n","siteLocale","thousands_sep","decimal_point","machineNumber","numberDecoder","formattedNumber","numberEncoder","isNumeric","tag","reTag","calcTag","reCalcTag","replaceAllKeys","re","calcName","spans","spanVar","tmpCalcTag","applyLocaleFormatting","number","result","expression","pattern","forEach","character","nfCalculationsDebug","Radio","dateBackwardsCompat","dateObject","pikaday","_o","disableDayFn","i18n","firstDay","locale","firstDayOfWeek","weekdays","longhand","weekdaysShort","shorthand","months","text","keys","registerFunctions","initDatepicker","renderHourOptions","renderMinuteOptions","maybeRenderAMPM","hours_options","minutes_options","hours_24","view","hide","dateFormat","convertDateFormat","dateSettings","parseDate","datestr","toDate","formatDate","date","altFormat","altInput","ariaDateFormat","mode","allowInput","disableMobile","monthsShort","startOfWeek","filteredDatePickerSettings","flatpickr","setDate","hour","minute","ampm","current_value","isObject","date_value","getYearRange","yearRangeStart","yearRangeEnd","getMinDate","Date","getMaxDate","date_mode","initRecaptcha","resetRecaptcha","updateResponse","recaptchaID","grecaptcha","ready","execute","action","then","token","layoutView","submitFieldID","consent","nf_check_recaptcha_consent","recaptchaConsentMissing","nf_build_default_consent_action","services","includes","actionElement","setAttribute","innerText","recaptchaConsentEvent","nf_consent_link_event","CustomEvent","detail","element","dispatchEvent","genericErrorElements","getElementsByClassName","append","htmlFields","trackedMergeTags","setupFieldMergeTagTracking","mergeTags","mergeTag","fieldKey","updateFieldMergeTags","htmlFieldModel","initHelpText","jBox","theme","content","currencySymbol","currencySymbolDecoded","initTextareaRTEs","clickExtra","meta_image_frame","currentContext","summernote","icons","align","alignCenter","alignJustify","alignLeft","alignRight","indent","outdent","bold","caret","close","code","eraser","italic","link","unlink","magic","minus","orderedlist","redo","square","table","underline","undo","unorderedlist","toolbar","userSettings","uid","buttons","linkButton","context","mediaButton","codemirror","lineNumbers","prettifyHtml","callbacks","onChange","linkMenu","next","replaceWith","class","innerHTML","ui","linkDropdown","buttonGroup","button","className","contents","tooltip","fieldTextareaRTEInsertLink","clickLinkButton","toggle","dropdown","children","render","fieldTextareaRTEInsertMedia","openMediaManager","open","wp","media","frames","title","fieldTextareaRTESelectAFile","media_attachment","state","toJSON","insertMedia","range","focus","textEl","urlEl","isNewWindowEl","hasClass","url","isNewWindow","filename","initRating","renderRatings","rating","number_of_stars","num","htmlFragment","createRange","createContextualFragment","keyUpExtra","currentTarget","addOption","new_option","viewFilters","loadFilters","addViewFilter","addLoadFilter","getViewFilters","getLoadFilters","priority","ItemView","tagName","toggleAriaInvalid","JSON","stringify","onRender","unwrap","setElement","mask","isInteger","isFinite","floor","charCodeAt","autoNumericOptions","digitGroupSeparator","decimalCharacter","autoN_el","AutoNumeric","templateHelpers","renderElement","tmpl","element_templates","renderLabel","renderLabelClasses","renderPlaceholder","customPlaceholder","renderWrapClass","wrapClass","parentType","customWrapClass","renderClasses","maybeDisabled","disable_input","maybeRequired","maybeDisableAutocomplete","disable_browser_autocomplete","maybeInputLimit","input_limit_type","input_limit","getHelpText","help_text","maybeRenderHelp","check_text_par","shouldRenderHelpText","icon","classList","outerHTML","renderDescText","desc_text","check","checkText","descriptionText","fieldDescription","renderNumberDefault","default","renderCurrencyFormatting","currency_symbol","maybeRenderTime","events","fieldChange","fieldKeyup","fieldClick","extraClick","extraChange","fieldBlur","onAttach","fieldErrorItem","CollectionView","childView","updateCount","count","words","wordCount","charCount","limit","currentCount","InputLimitView","changeError","errorEl","errorCollectionView","inputLimitEl","inputLimitView","fieldItem","beforeField","afterField","LayoutView","regions","getTemplate","renderContainerClass","containerClass","desc_pos","container_class","fieldLayout","removeSet","repeaterSetLayout","repeaterSetCollection","sets","addSet","repeaterFieldLayout","fieldItemView","fieldLayoutView","getFieldItem","getFieldLayout","errorMsg","formErrorsCorrectErrors","omit","registerSubmitHandler","submit","validate","blockingFormErrors","fieldDataDefaults","formData","security","ajax","adminAjax","cache","success","errorThrown","parseJSON","responseText","FieldCollectionView","registerDefaultDataFilter","defaultFormContentLoad","defaultFormContentView","currentFieldCollection","resetFields","fieldsets","repeaterFieldModel","resetRepeaterFieldsets","getRepeaterFieldsets","getRepeaterFields","getRepeaterFieldById","fieldset","inFields","repeaterSetModel","sortIDs","repeaterFieldID","prev","templateFields","modelIndex","cutEl","String","fieldsetCollection","repeaterFieldValue","initRepeater","FormData","FieldError","ChangeField","ChangeEmail","ChangeDate","FieldCheckbox","FieldCheckboxList","FieldImageList","FieldRadio","FieldNumber","MirrorField","ConfirmField","UpdateFieldModel","SubmitButton","SubmitDebug","GetFormErrors","ValidateRequired","SubmitError","ActionRedirect","ActionSuccess","FieldSelect","CoreSubmitResponse","FieldProduct","FieldTotal","FieldQuantity","Calculations","DateBackwardsCompat","FieldDate","FieldRecaptcha","FieldRecaptchaV3","FieldHTML","HelpText","FieldTextbox","FieldTextareaRTE","FieldStarRating","FieldTerms","FormContentFilters","LoadViews","FormErrors","Submit","DefaultFilters","UniqueFieldError","FieldRepeater","formErrorItem","honeypotHoneypotError","HoneyPot","onShow","renderFieldsMarkedRequired","fieldsMarkedRequired","AfterFormContent","BeforeFormContent","beforeFormContent","formContent","afterFormContent","getEl","formContentViewFilters","formContentView","BeforeForm","FormLayout","AfterForm","responseMsg","formLayout","newLocale","decimal_sep","uniqueElememts","self","formatted","negative","separators","final_separators","replacer","separator","pop","re_one","find_one","re_two","find_two","percision","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","nfLocaleConverterDebug","originalVal","fn","change","$","formCollection","LoadControllers","mainLayout","NinjaForms","Application","forms","Renderer","urlParameters","object","compact","search","item","nf_resume","restart","decodeNumber","encodeNumber","onStart","evaluate","interpolate","variable","start","empty"],"mappings":"CAAA,WCUA,IAAAA,EAAAC,EAAAC,GACA,SAAAC,GACA,IAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAA,GACAC,EAAAC,OAAAC,UAAAC,eACAC,EAAA,GAAAC,MACAC,EAAA,QAEA,SAAAC,EAAAC,EAAAC,GACA,OAAAT,EAAAU,KAAAF,EAAAC,GAWA,SAAAE,EAAAC,EAAAC,GACA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAAZ,GAAAA,EAAAa,MAAA,KACAC,EAAA7B,EAAA6B,IACAC,EAAAD,GAAAA,EAAA,MAAA,GAGA,GAAAf,GAAA,MAAAA,EAAAiB,OAAA,GAIA,GAAAhB,EAAA,CAgBA,IAdAK,GADAN,EAAAA,EAAAc,MAAA,MACAI,OAAA,EAGAhC,EAAAiC,cAAAzB,EAAA0B,KAAApB,EAAAM,MACAN,EAAAM,GAAAN,EAAAM,GAAAe,QAAA3B,EAAA,KAOAM,EAAAa,EAAApB,MAAA,EAAAoB,EAAAK,OAAA,GAAAI,OAAAtB,GAGAU,EAAA,EAAAA,EAAAV,EAAAkB,OAAAR,GAAA,EAEA,GAAA,OADAE,EAAAZ,EAAAU,IAEAV,EAAAuB,OAAAb,EAAA,GACAA,GAAA,OACA,GAAA,OAAAE,EAAA,CACA,GAAA,IAAAF,IAAA,OAAAV,EAAA,IAAA,OAAAA,EAAA,IAOA,MACAU,EAAA,IACAV,EAAAuB,OAAAb,EAAA,EAAA,GACAA,GAAA,GAMAV,EAAAA,EAAAwB,KAAA,UACA,IAAAxB,EAAAyB,QAAA,QAGAzB,EAAAA,EAAA0B,UAAA,IAKA,IAAAb,GAAAG,IAAAD,EAAA,CAGA,IAAAL,GAFAR,EAAAF,EAAAc,MAAA,MAEAI,OAAAR,EAAA,EAAAA,GAAA,EAAA,CAGA,GAFAP,EAAAD,EAAAT,MAAA,EAAAiB,GAAAc,KAAA,KAEAX,EAGA,IAAAF,EAAAE,EAAAK,OAAAP,EAAA,EAAAA,GAAA,EAKA,IAJAP,EAAAW,EAAAF,EAAApB,MAAA,EAAAkB,GAAAa,KAAA,SAKApB,EAAAA,EAAAD,IACA,CAEAE,EAAAD,EACAG,EAAAG,EACA,MAMA,GAAAL,EACA,OAMAG,GAAAQ,GAAAA,EAAAb,KACAK,EAAAQ,EAAAb,GACAM,EAAAC,IAIAL,GAAAG,IACAH,EAAAG,EACAD,EAAAE,GAGAJ,IACAH,EAAAqB,OAAA,EAAAhB,EAAAF,GACAL,EAAAE,EAAAsB,KAAA,MAIA,OAAAxB,EAGA,SAAA2B,EAAAC,EAAAC,GACA,OAAA,WAIA,IAAAC,EAAAtC,EAAAM,KAAAiC,UAAA,GAQA,MAHA,iBAAAD,EAAA,IAAA,IAAAA,EAAAZ,QACAY,EAAAE,KAAA,MAEAnD,EAAAoD,MAAAtD,EAAAmD,EAAAR,OAAA,CAAAM,EAAAC,MAUA,SAAAK,EAAAC,GACA,OAAA,SAAAC,GACApD,EAAAmD,GAAAC,GAIA,SAAAC,EAAArC,GACA,GAAAL,EAAAV,EAAAe,GAAA,CACA,IAAA8B,EAAA7C,EAAAe,UACAf,EAAAe,GACAb,EAAAa,IAAA,EACApB,EAAAqD,MAAAtD,EAAAmD,GAGA,IAAAnC,EAAAX,EAAAgB,KAAAL,EAAAR,EAAAa,GACA,MAAA,IAAAsC,MAAA,MAAAtC,GAEA,OAAAhB,EAAAgB,GAMA,SAAAuC,EAAAvC,GACA,IAAAwC,EACAC,EAAAzC,EAAAA,EAAAyB,QAAA,MAAA,EAKA,OAJAgB,GAAA,IACAD,EAAAxC,EAAA0B,UAAA,EAAAe,GACAzC,EAAAA,EAAA0B,UAAAe,EAAA,EAAAzC,EAAAkB,SAEA,CAAAsB,EAAAxC,GA8CA,SAAA0C,EAAA1C,GACA,OAAA,WACA,OAAAd,GAAAA,EAAAA,QAAAA,EAAAA,OAAAc,IAAA,IAxCAlB,EAAA,SAAAkB,EAAA4B,GACA,IAAAe,EACAC,EAAAL,EAAAvC,GACAwC,EAAAI,EAAA,GA2BA,OAzBA5C,EAAA4C,EAAA,GAEAJ,IAEAG,EAAAN,EADAG,EAAAzC,EAAAyC,EAAAZ,KAKAY,EAEAxC,EADA2C,GAAAA,EAAA5C,UACA4C,EAAA5C,UAAAC,EA3DA,SAAA4B,GACA,OAAA,SAAA5B,GACA,OAAAD,EAAAC,EAAA4B,IAyDAiB,CAAAjB,IAEA7B,EAAAC,EAAA4B,IAKAY,GADAI,EAAAL,EADAvC,EAAAD,EAAAC,EAAA4B,KAEA,GACA5B,EAAA4C,EAAA,GACAJ,IACAG,EAAAN,EAAAG,KAKA,CACAM,EAAAN,EAAAA,EAAA,IAAAxC,EAAAA,EACA+C,EAAA/C,EACAgD,GAAAR,EACAS,EAAAN,IAUA5D,EAAA,CACAN,QAAA,SAAAuB,GACA,OAAA2B,EAAA3B,IAEAkD,QAAA,SAAAlD,GACA,IAAAmD,EAAAnE,EAAAgB,GACA,YAAA,IAAAmD,EACAA,EAEAnE,EAAAgB,GAAA,IAGAoD,OAAA,SAAApD,GACA,MAAA,CACAqD,GAAArD,EACAsD,IAAA,GACAJ,QAAAlE,EAAAgB,GACAd,OAAAwD,EAAA1C,MAKApB,EAAA,SAAAoB,EAAAuD,EAAAC,EAAA5B,GACA,IAAA6B,EAAAtB,EAAAuB,EAAA3C,EAAAL,EAGAiD,EAFA7B,EAAA,GACA8B,SAAAJ,EAOA,GAHA5B,EAAAA,GAAA5B,EAGA,cAAA4D,GAAA,aAAAA,EAAA,CAKA,IADAL,GAAAA,EAAArC,QAAAsC,EAAAtC,OAAA,CAAA,UAAA,UAAA,UAAAqC,EACA7C,EAAA,EAAAA,EAAA6C,EAAArC,OAAAR,GAAA,EAKA,GAAA,aAHAyB,GADApB,EAAAjC,EAAAyE,EAAA7C,GAAAkB,IACAkB,GAIAhB,EAAApB,GAAA3B,EAAAN,QAAAuB,QACA,GAAA,YAAAmC,EAEAL,EAAApB,GAAA3B,EAAAmE,QAAAlD,GACA2D,GAAA,OACA,GAAA,WAAAxB,EAEAsB,EAAA3B,EAAApB,GAAA3B,EAAAqE,OAAApD,QACA,GAAAL,EAAAX,EAAAmD,IACAxC,EAAAV,EAAAkD,IACAxC,EAAAR,EAAAgD,GACAL,EAAApB,GAAA2B,EAAAF,OACA,CAAA,IAAApB,EAAAkC,EAIA,MAAA,IAAAX,MAAAtC,EAAA,YAAAmC,GAHApB,EAAAkC,EAAAY,KAAA9C,EAAAgC,EAAApB,EAAAC,GAAA,GAAAM,EAAAC,GAAA,IACAL,EAAApB,GAAA1B,EAAAmD,GAMAuB,EAAAF,EAAAA,EAAAvB,MAAAjD,EAAAgB,GAAA8B,QAAAgC,EAEA9D,IAIAyD,GAAAA,EAAAP,UAAAvE,GACA8E,EAAAP,UAAAlE,EAAAgB,GACAhB,EAAAgB,GAAAyD,EAAAP,QACAQ,IAAA/E,GAAAgF,IAEA3E,EAAAgB,GAAA0D,SAGA1D,IAGAhB,EAAAgB,GAAAwD,IAIAhF,EAAAC,EAAAI,EAAA,SAAA0E,EAAAC,EAAA5B,EAAAC,EAAAkC,GACA,GAAA,iBAAAR,EACA,OAAAxE,EAAAwE,GAEAxE,EAAAwE,GAAAC,GAMAnB,EAAAvD,EAAAyE,EAAAC,GAAAV,GACA,IAAAS,EAAAhC,OAAA,CAMA,IAJArC,EAAAqE,GACAA,MACA1E,EAAAK,EAAAqE,KAAArE,EAAAsE,WAEAA,EACA,OAGAA,EAAAjC,QAGAgC,EAAAC,EACAA,EAAA5B,EACAA,EAAA,MAEA2B,EAAA5E,EA6BA,OAxBA6E,EAAAA,GAAA,aAIA,mBAAA5B,IACAA,EAAAC,EACAA,EAAAkC,GAIAlC,EACAjD,EAAAD,EAAA4E,EAAAC,EAAA5B,GAQAoC,YAAA,WACApF,EAAAD,EAAA4E,EAAAC,EAAA5B,KACA,GAGA/C,GAOAA,EAAAK,OAAA,SAAA+E,GACA,OAAApF,EAAAoF,IAMAzF,EAAA0F,SAAAlF,GAEAN,EAAA,SAAAsB,EAAAuD,EAAAC,GACA,GAAA,iBAAAxD,EACA,MAAA,IAAAsC,MAAA,6DAIAiB,EAAAhC,SAIAiC,EAAAD,EACAA,EAAA,IAGA5D,EAAAX,EAAAgB,IAAAL,EAAAV,EAAAe,KACAf,EAAAe,GAAA,CAAAA,EAAAuD,EAAAC,MAIAW,IAAA,CACAC,QAAA,GAhaA,GAoaA1F,EAAA,iBAAA,eAEAA,EAAA,yBAAA,IAAA,WC5aA,OAJA2F,SAAAC,MAAAC,OAAA,OAMA7F,EAAA,8BAAA,CAAA,2BAAA,SAAA8F,GCHA,OAHAH,SAAAI,WAAAF,OAAA,CACAG,MAAAF,OAIA9F,EAAA,oBAAA,CAAA,gCAAA,SAAAiG,GCmHA,OAxHAN,SAAAC,MAAAC,OAAA,CACAK,SAAA,CACAC,YAAA,GACAzC,MAAA,GACA0C,UAAA,GACAC,QAAA,oBACAC,UAAA,EACAC,cAAA,EACAC,eAAA,EACAC,OAAA,EACAC,SAAA,GACAC,SAAA,EACAC,SAAA,GAGAC,WAAA,WACA,IAAAC,EAAAC,KAAAC,IAAA,QAEAD,KAAAE,IAAA,SAAAF,KAAAG,WAAAC,QAAAC,UAAAJ,IAAA,OACAD,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAA,QAAAD,KAAAS,YAEAT,KAAAU,KAAA,SAAAV,KAAAW,YAAAX,MACAA,KAAAU,KAAA,eAAAV,KAAAY,YAAAZ,MACAA,KAAAE,IAAA,SAAA,IAAAhB,GAEA,cAAAa,IACAC,KAAAC,IAAAD,KAAAa,aACAb,KAAAE,IAAAF,KAAAc,cAWAP,QAAAC,QAAA,UAAAO,QAAA,aAAAf,MACAO,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,aAAAf,MACAO,QAAAC,QAAA,UAAAR,KAAAC,IAAA,SAAAc,QAAA,aAAAf,WAEA,IAAAA,KAAAC,IAAA,eACAM,QAAAC,QAAAR,KAAAC,IAAA,eAAAc,QAAA,aAAAf,MAMAA,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAA,SAAAD,KAAAgB,YAKAhB,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAA,gBAAAD,KAAAiB,eAGAJ,aAAA,SAAAK,GAKA,MAJA,YAAAA,IACAA,EAAA,iBAGAtC,SAAAC,MAAAhF,UAAAoG,IAAA5F,KAAA2F,KAAAkB,IAGAJ,aAAA,SAAAK,EAAAf,GAIA,MAHA,YAAAe,IACAA,EAAA,iBAEAvC,SAAAC,MAAAhF,UAAAqG,IAAA7F,KAAA2F,KAAAmB,EAAAf,IAGAO,YAAA,WACAJ,QAAAC,QAAA,SAAAR,KAAAC,IAAA,OAAAc,QAAA,eAAAf,MACAO,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,eAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,eAAAf,OAGAY,YAAA,WACAL,QAAAC,QAAA,SAAAR,KAAAC,IAAA,OAAAc,QAAA,oBAAAf,MACAO,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,oBAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,oBAAAf,OAGAoB,gBAAA,SAAAC,GACArB,KAAAE,IAAA,kBAAAmB,IAGAC,mBAAA,SAAAD,GACArB,KAAAE,IAAA,qBAAAmB,IAGAE,WAAA,SAAA1B,GACAG,KAAAE,IAAA,UAAAL,IAGAmB,WAAA,WACAT,QAAAC,QAAA,UAAAO,QAAA,aAAAf,MACAO,QAAAC,QAAA,UAAAR,KAAAC,IAAA,SAAAc,QAAA,aAAAf,OAGAiB,aAAA,SAAAZ,GACAE,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,gBAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,gBAAAf,OAWAwB,SAAA,WACA,OAAAxB,KAAAC,IAAA,eAQAhH,EAAA,yBAAA,CAAA,sBAAA,SAAAwI,GC3HA,IAAAtB,EAAAvB,SAAAI,WAAAF,OAAA,CACAG,MAAAwC,EACAC,WAAA,QAEA5B,WAAA,SAAA6B,EAAAvB,GACAJ,KAAAI,QAAAA,EACAJ,KAAA4B,GAAA,SAAA,SAAAC,GACAtB,QAAAC,QAAA,UAAAO,QAAA,mBAAAc,KACA7B,OAGA8B,eAAA,WACAC,EAAAC,KAAAhC,KAAA2B,QAAA,SAAAF,GAEAA,EAAAvB,IAAA,SAAA,GACAK,QAAAC,QAAA,UAAAO,QAAA,iBAAAU,KACAzB,OAGAiC,WAAA,WACAjC,KAAAkC,OAAA,MAAA,CAAAtC,SAAA,IACAI,KAAAkC,QAAA,WACAlC,KAAAe,QAAA,eAAAf,UAIAmC,WAAA,WACAnC,KAAAkC,OAAA,MAAA,CAAAtC,SAAA,IACAI,KAAAkC,QAAA,WACAlC,KAAAe,QAAA,eAAAf,YAIA,OAAAG,KAGAlH,EAAA,wBAAA,IAAA,WChCA,OAJA2F,SAAAC,MAAAC,OAAA,OAMA7F,EAAA,6BAAA,CAAA,0BAAA,SAAA8F,GCHA,OAHAH,SAAAI,WAAAF,OAAA,CACAG,MAAAF,OAIA9F,EAAA,mBAAA,CCLA,yBACA,+BACA,SACAmJ,EACAC,GA6IA,OA3IAzD,SAAAC,MAAAC,OAAA,CACAK,SAAA,CACAmD,WAAA,GACAC,UAAA,GACAC,aAAA,GACAC,YAAA,GACAC,cAAA,GACAC,cAAA,GACAC,GAAA,GACAC,YAAA,GACAC,MAAA,IAGAhD,WAAA,WAEAiC,EAAAC,KAAAhC,KAAAC,IAAA,aAAA,SAAAtD,EAAAoG,GACA/C,KAAAE,IAAA6C,EAAApG,KACAqD,MAEAA,KAAAE,IAAA,eAAAF,KAAAC,IAAA,WACAD,KAAAE,IAAA,SAAA,IAAAkC,EAAApC,KAAAC,IAAA,UAAA,CAAAI,UAAAL,QACAA,KAAAE,IAAA,SAAA,IAAAmC,GAKA9B,QAAAC,QAAA,QAAAO,QAAA,oBAAAf,MAKA,IAAAgD,EAAAhD,KAAAC,IAAA,mBAQA+C,IACAA,EAAAhD,KAAAC,IAAA,sBAGA,IAAAgD,EAAA1C,QAAAC,QAAA,eAAA0C,QAAA,mBAIAC,EAAApB,EAAAqB,QAAAH,OAAA5E,GAEA2E,EADAjB,EAAAsB,MAAAF,EACApF,CAAAiF,EAAAhD,KAAAA,MAEAA,KAAAE,IAAA,kBAAA8C,GAEAzC,QAAAC,QAAA,SAAAO,QAAA,aAAAf,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,aAAAf,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAqD,MAAA,iBAAAtD,KAAAuD,cAAAvD,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAqD,MAAA,YAAAtD,KAAAwD,SAAAxD,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAqD,MAAA,eAAAtD,KAAAyD,YAAAzD,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAqD,MAAA,YAAAtD,KAAA0D,SAAA1D,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAqD,MAAA,YAAAtD,KAAA2D,SAAA3D,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAqD,MAAA,eAAAtD,KAAA4D,YAAA5D,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAqD,MAAA,WAAAtD,KAAA6D,QAAA7D,MAEAO,QAAAC,QAAA,QAAAO,QAAA,SAAAf,MACAO,QAAAC,QAAA,QAAAO,QAAA,eAAAf,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,SAAAf,OASAuD,cAAA,SAAAO,GACA,OAAA9D,KAAAC,IAAA,UAAA8D,UAAA,CAAAD,IAAAA,KASAN,SAAA,SAAA5F,EAAAoG,GACAhE,KAAAC,IAAA,UACAgE,IAAA,CAAArG,GAAAA,EAAAoG,IAAAA,IACAzD,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,YAAAf,KAAApC,EAAAoG,IAGAP,YAAA,SAAA7F,GACA,IAAAsG,EAAAlE,KAAAC,IAAA,UACAlB,EAAAmF,EAAAjE,IAAArC,GACAsG,EAAAC,OAAApF,GACAwB,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,eAAAf,KAAApC,IASA8F,SAAA,SAAAI,GACA,IAAAM,EAAApE,KAAAC,IAAA,SACA,YAAA,IAAA6D,EAAAM,EACAA,EAAAN,IAGAH,SAAA,SAAAG,EAAAnH,GACAqD,KAAAC,IAAA,SACA6D,GAAAnH,EACA4D,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,YAAAf,KAAA8D,EAAAnH,IAGAiH,YAAA,SAAAE,UACA9D,KAAAC,IAAA,SACA6D,GACAvD,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,eAAAf,KAAA8D,IAQAD,QAAA,WACA,OAAA7D,WAMA/G,EAAA,wBAAA,CAAA,qBAAA,SAAAoH,GChJA,OAHAzB,SAAAI,WAAAF,OAAA,CACAG,MAAAoB,OCKApH,EAAA,uBAAA,CAAA,mBAAA,wBAAA,yBAAA,+BAAA,SAAAoL,EAAAC,EAAAlC,EAAAC,GAgDA,OA/CAkC,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WAUAE,KAAAG,WAAA,IAAAmE,EAAAE,SAEAjE,QAAAC,QAAA,SAAAO,QAAA,SAAAf,KAAAG,YACAI,QAAAC,QAAA,OAAAO,QAAA,eAAAf,KAAAG,YAEAI,QAAAC,QAAA,OAAA8C,MAAA,WAAAtD,KAAA6D,QAAA7D,MACAO,QAAAC,QAAA,OAAA8C,MAAA,YAAAtD,KAAAyE,SAAAzE,MAEAO,QAAAC,QAAA,UAAA8C,MAAA,YAAAtD,KAAA0E,SAAA1E,OAGA6D,QAAA,SAAAjG,GACA,OAAAoC,KAAAG,WAAAF,IAAArC,IAGA6G,SAAA,WACA,OAAAzE,KAAAG,YAGAuE,SAAA,SAAA9G,GACA,IAAAqB,GAAA,EAYA,OAVA8C,EAAAC,KAAAhC,KAAAG,WAAAwB,QAAA,SAAAgD,GACA1F,IACAA,EAAA0F,EAAA1E,IAAA,UAAAA,IAAArC,YAIA,IAAAqB,IACAA,EAAAsB,QAAAC,QAAA,kBAAA0C,QAAA,wBAAAtF,IAGAqB,QAOAhG,EAAA,yBAAA,CAAA,2BAAA,SAAA2L,GCVA,OA/CAL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAS,QAAAC,QAAA,UAAA8C,MAAA,YAAAtD,KAAAwD,UACAjD,QAAAC,QAAA,UAAA8C,MAAA,eAAAtD,KAAAyD,aACAlD,QAAAC,QAAA,UAAA8C,MAAA,YAAAtD,KAAA6E,WAGArB,SAAA,SAAAsB,EAAAlH,EAAAoG,GACA,IAAA/E,EAAAsB,QAAAC,QAAA,UAAA0C,QAAA,YAAA4B,GAEA,QAAA,IAAA7F,EAAA,CAEA,IAAAiF,EAAAjF,EAAAgB,IAAA,UACAiE,EAAAD,IAAA,CAAArG,GAAAA,EAAAoG,IAAAA,IACA/E,EAAAiB,IAAA,SAAAgE,GACAjF,EAAA8B,QAAA,gBAAA9B,GACAA,EAAAiB,IAAA,SAAA,GACAK,QAAAC,QAAA,UAAAO,QAAA,YAAA9B,EAAArB,EAAAoG,KAGAP,YAAA,SAAAqB,EAAAlH,GACA,IAAAqB,EAAAsB,QAAAC,QAAA,UAAA0C,QAAA,YAAA4B,GAEA,QAAA,IAAA7F,EAAA,CACA,IAAAiF,EAAAjF,EAAAgB,IAAA,UACA8E,EAAAb,EAAAjE,IAAArC,QAEA,IAAAmH,IACAb,EAAAC,OAAAY,GACA9F,EAAAiB,IAAA,SAAAgE,GACAjF,EAAA8B,QAAA,gBAAA9B,GACAsB,QAAAC,QAAA,UAAAO,QAAA,eAAA9B,EAAArB,MAIAiH,SAAA,SAAAC,EAAAlH,GACA,IAEAmH,EAFAxE,QAAAC,QAAA,UAAA0C,QAAA,YAAA4B,GACA7E,IAAA,UACAA,IAAArC,GACA,MAAA,aAAAmH,GACAA,QClCA9L,EAAA,0BAAA,IAAA,WAwDA,OAvDAsL,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WAIAS,QAAAC,QAAA,WAAA8C,MAAA,eAAAtD,KAAAgF,aAOAhF,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAAiF,YAGAD,YAAA,SAAAE,EAAAjG,GAEA,IAAAtC,EAAA4D,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAiD,QAAA,qBAAAgC,EAAAjG,GAEAtC,OAAA,KADAA,OAAA,IAAAA,EAAAA,EAAA4D,QAAAC,QAAAvB,EAAAgB,IAAA,eAAAiD,QAAA,qBAAAgC,EAAAjG,IACAtC,EAAAgC,OAAAuG,GAAAC,MAGAlG,EAAAiB,IAAA,aAAA,GAGAjB,EAAAiB,IAAA,SAAA,GAYAK,QAAAC,QAAA,SAAAvB,EAAAgB,IAAA,OAAAc,QAAA,eAAAmE,EAAAjG,GACAsB,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAc,QAAA,eAAAmE,EAAAjG,GACAsB,QAAAC,QAAA,UAAAO,QAAA,eAAAmE,EAAAjG,GAMAsB,QAAAC,QAAA,WAAA0C,QAAA,eAAAjE,EAAAtC,IAGAsI,UAAA,SAAAC,EAAAjG,GAEAA,EAAAiB,IAAA,SAAA,SAMAjH,EAAA,0BAAA,IAAA,WChEA,IAAAmM,EAAA7E,QAAAC,QAAA,SAEA6E,EAAA,yJACAC,EAAA,gBAuFA,OArFAf,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAA8E,EAAA,oBAAApF,KAAAuF,oBACAvF,KAAAM,SAAA8E,EAAA,cAAApF,KAAAwF,YACAxF,KAAAM,SAAA8E,EAAA,aAAApF,KAAAyF,cAGAF,mBAAA,SAAAtG,GACA,IAAAtC,EAAAsC,EAAAgB,IAAA,SACAyF,EAAAzG,EAAAgB,IAAA,MACAD,KAAA2F,YAAAhJ,EAAA+I,IAGAD,YAAA,SAAAP,EAAAjG,GACA,IAAAtC,EAAAgC,OAAAuG,GAAAC,MACAO,EAAAzG,EAAAgB,IAAA,MACAD,KAAA2F,YAAAhJ,EAAA+I,IAGAC,YAAA,SAAAhJ,EAAA+I,GACA,GAAA,EAAA/I,EAAAlB,OACA,GAAA4J,EAAA1J,KAAAgB,GACA4D,QAAAC,QAAA,UAAA0C,QAAA,eAAAwC,EAAAJ,OACA,CACA,IAAA7D,EAAAlB,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,GACArF,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,EAAAJ,EAAAjF,EAAAJ,IAAA,YAAA2F,0BAGArF,QAAAC,QAAA,UAAA0C,QAAA,eAAAwC,EAAAJ,IAcAE,WAAA,SAAAN,EAAAjG,EAAA4G,GAKA,GAAA,GAAAA,EACA,OAAA,EAKA,IAAAlJ,EAAAgC,OAAAuG,GAAAC,MAKAO,EAAAzG,EAAAgB,IAAA,MAKA,GAAA,GAAAtD,EAAAlB,OACA8E,QAAAC,QAAA,UAAA0C,QAAA,eAAAwC,EAAAJ,QACA,GAAAD,EAAA1J,KAAAgB,IAAAsC,EAAAgB,IAAA,SAOAoF,EAAA1J,KAAAgB,KACA4D,QAAAC,QAAA,UAAA0C,QAAA,eAAAwC,EAAAJ,GAIArG,EAAAmC,gBAAA,WACAnC,EAAAiB,IAAA,SAAA,QAbA,CAEA,IAAAuB,EAAAlB,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,GACArF,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,EAAAJ,EAAAjF,EAAAJ,IAAA,YAAA2F,qBAEA3G,EAAAqC,mBAAA,kBAcArI,EAAA,yBAAA,IAAA,WC5FA,IAAAmM,EAAA7E,QAAAC,QAAA,QACA8E,EAAA,eAyHA,OAvHAf,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAA8E,EAAA,oBAAApF,KAAAuF,oBACAvF,KAAAM,SAAA8E,EAAA,cAAApF,KAAA8F,WACA9F,KAAAM,SAAA8E,EAAA,aAAApF,KAAAyF,aAEAzF,KAAAM,SAAA8E,EAAA,eAAApF,KAAA+F,mBAAA/F,OAGAuF,mBAAA,SAAAtG,GACAe,KAAAgG,WAAA/G,IAGAwG,YAAA,SAAAP,EAAAjG,GACAe,KAAAgG,WAAA/G,IAGA+G,WAAA,SAAA/G,GACA,IAAAyG,EAAAzG,EAAAgB,IAAA,MACAtD,EAAAsC,EAAAgB,IAAA,SACAgG,EAAAhH,EAAAgB,IAAA,eAGA,GAAA,aAAAhB,EAAAgB,IAAA,aACA,OAAA,EAGA,GAAA,EAAAtD,EAAAlB,OAEA,GAAAyK,OAAAvJ,EAAAsJ,GAAAE,UACA5F,QAAAC,QAAA,UAAA0C,QAAA,eAAAwC,EAAAJ,OACA,CACA,IAAA7D,EAAAlB,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,GACArF,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,EAAAJ,EAAAjF,EAAAJ,IAAA,YAAAmG,yBAGA7F,QAAAC,QAAA,UAAA0C,QAAA,eAAAwC,EAAAJ,IAeAQ,UAAA,SAAAZ,EAAAjG,EAAA4G,GAKA,GAAA,GAAAA,EACA,OAAA,EAKA,IAAAlJ,EAAAgC,OAAAuG,GAAAC,MAKAO,EAAAzG,EAAAgB,IAAA,MAKAgG,EAAAhH,EAAAgB,IAAA,eAKA,GAAA,GAAAtD,EAAAlB,OACA8E,QAAAC,QAAA,UAAA0C,QAAA,eAAAwC,EAAAJ,QAGA,GAAAY,OAAAvJ,EAAAsJ,GAAAE,WAAAlH,EAAAgB,IAAA,SASAiG,OAAAvJ,EAAAsJ,GAAAE,YACA5F,QAAAC,QAAA,UAAA0C,QAAA,eAAAwC,EAAAJ,GAIArG,EAAAmC,gBAAA,WACAnC,EAAAiB,IAAA,SAAA,QAfA,CAEA,IAAAuB,EAAAlB,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,GACArF,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,EAAAJ,EAAAjF,EAAAJ,IAAA,YAAAmG,oBAEAnH,EAAAqC,mBAAA,aAaAyE,mBAAA,SAAArI,EAAA+D,GACA,IACA4E,EAAA1H,OAAAjB,EAAA4I,QAAAC,QAAA,qBAGAC,EAAA7H,OAAA0H,GAAAI,KAAA,SAAAtB,MACAuB,EAAA/H,OAAA0H,GAAAI,KAAA,WAAAtB,MACAwB,EAAAhI,OAAA0H,GAAAI,KAAA,SAAAtB,MAEA1D,EAAAvB,IAAA,gBAAAsG,GACA/E,EAAAvB,IAAA,kBAAAwG,GACAjF,EAAAvB,IAAA,gBAAAyG,GAEAlF,EAAAV,QAAA,eAAAU,SAMAxI,EAAA,4BAAA,IAAA,WCxCA,OApFAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WAIAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAA4G,uBAEArG,QAAAC,QAAA,YAAA8C,MAAA,oBAAAtD,KAAA6G,kBACAtG,QAAAC,QAAA,YAAA8C,MAAA,qBAAAtD,KAAA8G,mBACAvG,QAAAC,QAAA,YAAA8C,MAAA,qBAAAtD,KAAA+G,kBAAA/G,MACAO,QAAAC,QAAA,YAAA8C,MAAA,gBAAAtD,KAAAgH,aAAAhH,OAGA+G,kBAAA,SAAA7B,EAAAjG,GAEA,GADAN,OAAAuG,GAAA9K,KAAA,WACA,CACA,IAAAuC,EAAA,EACAgC,OAAAuG,GAAA+B,SAAA,cACAtI,OAAAuG,GAAAqB,QAAA,eAAAE,KAAA,cAAA9H,OAAAuG,GAAA9K,KAAA,MAAA,MAAA6M,SAAA,wBACA,CACAtK,EAAA,EACAgC,OAAAuG,GAAAgC,YAAA,cACAvI,OAAAuG,GAAAqB,QAAA,eAAAE,KAAA,cAAA9H,OAAAuG,GAAA9K,KAAA,MAAA,MAAA8M,YAAA,oBAGA,OAAAvK,GAGAkK,iBAAA,SAAA3B,EAAAjG,GACA,OAAAiG,EAAA,GAAAiC,SAGAL,kBAAA,SAAA7H,GACA,OAAA,GAAAA,EAAAgB,IAAA,UAGA+G,aAAA,SAAAvF,GAOA,OANA,GAAAA,EAAAxB,IAAA,SACAmH,UAAA3F,EAAAxB,IAAA,sBAEAmH,UAAA3F,EAAAxB,IAAA,wBAGAmH,WAGAR,sBAAA,SAAA3H,GACA,WAAAA,EAAAgB,IAAA,iBACAhB,EAAAiB,IAAA,QAAA,GAEAjB,EAAAiB,IAAA,QAAA,GAEAjB,EAAAiB,IAAA,gBAAAF,KAAAqH,eACApI,EAAAiB,IAAA,qBAAAF,KAAAsH,oBACArI,EAAAiB,IAAA,eAAAF,KAAAuH,eAGAF,cAAA,SAAA/H,GAMA,OALA,GAAAU,KAAArD,OAAAqD,KAAAN,YAAA,IAAAM,KAAAwH,eAAA,WAAAxH,KAAAwH,cACAlI,GAAA,cAEAA,EAAA1D,QAAA,aAAA,IAEA0D,GAGAgI,mBAAA,SAAAhI,GAMA,OALA,GAAAU,KAAArD,OAAAqD,KAAAN,YAAA,IAAAM,KAAAwH,eAAA,WAAAxH,KAAAwH,cACAlI,GAAA,oBAEAA,EAAA1D,QAAA,mBAAA,IAEA0D,GAGAiI,aAAA,WACA,OAAA,GAAAvH,KAAArD,OAAAqD,KAAAN,YAAA,IAAAM,KAAAwH,eAAA,WAAAxH,KAAAwH,cACA,WAEA,SAOAvO,EAAA,gCAAA,IAAA,WCsGA,OA5LAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,gBAAA,aAAAR,KAAAyH,UACAzH,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAyH,UACAlH,QAAAC,QAAA,gBAAA8C,MAAA,qBAAAtD,KAAA+G,kBAAA/G,MACAO,QAAAC,QAAA,SAAA8C,MAAA,qBAAAtD,KAAA+G,kBAAA/G,MACAO,QAAAC,QAAA,gBAAA8C,MAAA,gBAAAtD,KAAAgH,aAAAhH,MACAO,QAAAC,QAAA,SAAA8C,MAAA,gBAAAtD,KAAAgH,aAAAhH,OAGAyH,SAAA,SAAAxI,GASA,GARAA,EAAAiB,IAAA,gBAAAF,KAAA0H,eACAzI,EAAAiB,IAAA,kBAAAF,KAAA2H,iBACA1I,EAAAiB,IAAA,WAAA,IAMA,GAAAjB,EAAAgB,IAAA,WAAAxE,OAAA,CACA,IAAAmM,EAAA7F,EAAA8F,OAAA5I,EAAAgB,IAAA,YAAA,SAAA6H,GAAA,OAAA,GAAAA,EAAAF,YACAA,EAAA7F,EAAAzG,IAAAsM,GAAA,SAAAE,GAAA,OAAAA,EAAAnL,SAOA,IAAAoL,EAAA9I,EAAAgB,IAAA,cACA,IAAA8H,GAAAC,MAAAC,QAAAF,GACA9I,EAAAiB,IAAA,QAAA6H,QACA,IAAAH,GACA3I,EAAAiB,IAAA,QAAA0H,IAIAF,cAAA,WACA,IAAAQ,EAAA,GAEA,GAAA,IAAAlI,KAAArD,OAAAqL,MAAAC,QAAAjI,KAAArD,QAAA,EAAAqD,KAAArD,MAAAlB,QACA,EAAAuE,KAAArD,MAAAlB,OACA,IAAA0M,GAAA,OAEAA,GAAA,EAgEA,GA7DApG,EAAAC,KAAAhC,KAAAI,SAAA,SAAAgI,EAAApL,GACAgL,MAAAC,QAAAjI,KAAArD,SACAqL,MAAAC,QAAAjI,KAAArD,MAAA,MAAA,IAAAoF,EAAA/F,QAAAgE,KAAArD,MAAA,GAAAyL,EAAAzL,QAGAoF,EAAA/F,QAAAgE,KAAArD,MAAAyL,EAAAzL,UAFAwL,GAAA,GAOAC,EAAAzL,OAAAqD,KAAArD,QACAwL,GAAA,QAOA,IAAAC,EAAAxI,UACAwI,EAAAxI,SAAA,GAGAwI,EAAA1C,QAAA1F,KAAApC,GACAwK,EAAA9I,QAAAU,KAAAV,QACA8I,EAAApL,MAAAA,EACAoL,EAAAC,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAAxG,EAAAyG,OAAAJ,EAAAC,OAAAD,EAAAC,MAEA,IAAAT,GAAA,EAKAI,MAAAC,QAAAjI,KAAArD,QAAA,EAAAqD,KAAArD,MAAAlB,QACA,IAAAsG,EAAA/F,QAAAgE,KAAArD,MAAA,GAAAtB,MAAA,KAAA+M,EAAAzL,SACA,IAAAoF,EAAA/F,QAAAgE,KAAArD,MAAAyL,EAAAzL,SACAiL,GAAA,GAEA7F,EAAAkG,QAAAjI,KAAArD,QAAAyL,EAAAzL,OAAAqD,KAAArD,MAEA,GAAAyL,EAAAR,UAAA5H,KAAAN,YAAA,IAAAM,KAAArD,QACAiL,GAAA,GAFAA,GAAA,EAeAQ,EAAAR,SAAAA,EACAQ,EAAAK,WAAAb,EACAQ,EAAAM,SAAA1I,KAAA0I,SACAN,EAAAO,gBAAA3I,KAAA2I,gBACA,IAAAC,EAAArI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,sCACAgF,GAAAU,EAAAR,KACApI,MAEA,GAAAA,KAAA6I,WAAA,CACA,YAAA7I,KAAArD,QACAwL,GAAA,GAEA,IAAAW,EAAA,CACApD,QAAA1F,KAAApC,GACA0B,QAAAU,KAAAV,QACAyJ,aAAA/I,KAAArD,MACAgL,gBAAA3H,KAAA2H,gBACAQ,WAAAA,GAGAS,EAAArI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,qCACAgF,GAAAU,EAAAE,GAIA,OAAAZ,GAGAP,gBAAA,WACA,GAAA,YAAA3H,KAAA+I,eAAA/I,KAAAmI,WAAA,CACA,YAAAnI,KAAA+I,eACA/I,KAAA+I,aAAA,IAEA,IAAAD,EAAA,CACApD,QAAA1F,KAAA0F,QACApG,QAAAU,KAAAV,QACAyJ,aAAA/I,KAAA+I,cAGA,OADAxI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,yCACA0F,CAAAE,KAIA9B,aAAA,SAAAvF,GACA,IAAAuH,EAAA,EACA5I,EAAAqB,EAAAxB,IAAA,WAOA,OANA,GAAAG,EAAA3E,QACAsG,EAAAC,KAAAP,EAAAxB,IAAA,UAAA,SAAAkF,GACA,IAAA8D,EAAAlH,EAAA0E,KAAArG,GAAA,SAAA0H,GAAA,OAAAA,EAAAnL,OAAAwI,KACA6D,EAAAE,OAAAF,GAAAE,OAAAD,EAAAE,SAGAH,GAGAjC,kBAAA,SAAA7B,EAAAjG,GACA,IAAA2I,EAAA3I,EAAAgB,IAAA,UAAA,GACA,iBAAA2H,IAAAA,EAAA,CAAAA,IAEA,IAAAjL,EAAAgC,OAAAuG,GAAAC,MAEA,GADAxG,OAAAuG,GAAA9K,KAAA,WAEAwN,EAAArL,KAAAI,GACAgC,OAAAuG,GAAA+B,SAAA,cACAtI,OAAAuG,GAAAkE,SAAA3C,KAAA,cAAA9H,OAAAuG,GAAA9K,KAAA,MAAA,MAAA6M,SAAA,wBACA,CACAtI,OAAAuG,GAAAgC,YAAA,cACAvI,OAAAuG,GAAAkE,SAAA3C,KAAA,cAAA9H,OAAAuG,GAAA9K,KAAA,MAAA,MAAA8M,YAAA,oBACA,IAAAjM,EAAA2M,EAAA5L,QAAAW,GACA,IAAA,GAAA1B,EACA2M,EAAA9L,OAAAb,EAAA,QACA,GAAA+M,MAAAC,QAAAL,GAAA,CACA,IAAAyB,EAAAzB,EAAA,GAAAvM,MAAA,KACAiO,EAAAD,EAAArN,QAAAW,IACA,IAAA2M,GACAD,EAAAvN,OAAAwN,EAAA,GAEA1B,EAAAyB,EAAAtN,KAAA,MAQA,OAAAgG,EAAAwH,MAAA3B,SAMA3O,EAAA,6BAAA,IAAA,WCyDA,OAvPAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,aAAA,aAAAR,KAAAyH,UACAlH,QAAAC,QAAA,aAAA8C,MAAA,qBAAAtD,KAAA+G,kBAAA/G,MACAO,QAAAC,QAAA,aAAA8C,MAAA,gBAAAtD,KAAAgH,aAAAhH,OAGAyH,SAAA,SAAAxI,GASA,GARAA,EAAAiB,IAAA,gBAAAF,KAAA0H,eACAzI,EAAAiB,IAAA,kBAAAF,KAAA2H,iBACA1I,EAAAiB,IAAA,WAAA,IAMA,GAAAjB,EAAAgB,IAAA,iBAAAxE,OAAA,CACA,IAAAmM,EAAA7F,EAAA8F,OAAA5I,EAAAgB,IAAA,kBAAA,SAAA6H,GAAA,OAAA,GAAAA,EAAAF,YACAA,EAAA7F,EAAAzG,IAAAsM,GAAA,SAAAE,GAAA,OAAAA,EAAAnL,SAOA,IAAAoL,EAAA9I,EAAAgB,IAAA,cACA,IAAA8H,GAAAC,MAAAC,QAAAF,GACA9I,EAAAiB,IAAA,QAAA6H,QACA,IAAAH,GACA3I,EAAAiB,IAAA,QAAA0H,IAIAF,cAAA,WACA,IAAAQ,EAAA,GAEA,GAAA,IAAAlI,KAAArD,OAAAqL,MAAAC,QAAAjI,KAAArD,QAAA,EAAAqD,KAAArD,MAAAlB,QACA,EAAAuE,KAAArD,MAAAlB,OACA,IAAA0M,GAAA,OAEAA,GAAA,EAGA,IAAAnI,KAAAwJ,oBACAxJ,KAAAyJ,cAAA,gBACAzJ,KAAA0J,WAAA,YAEA1J,KAAA0J,WAAA,QAGA,eAAA1J,KAAA2J,iBACA3J,KAAA4J,eAAA,MAEA5J,KAAA4J,eAAA,SAEA,IAAAC,EAAA7J,KAEA8J,EAAAC,SAAA/J,KAAA8J,cAAA,EACAE,EAAA,EACAC,EAAA,EAqEA,GAnEAlI,EAAAC,KAAAhC,KAAAkK,eAAA,SAAAC,EAAAnN,GACAgD,KAAAoK,mBAGAD,EAAA9B,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAAxG,EAAAyG,OAAA2B,EAAA9B,OAAA8B,EAAA9B,MAFA8B,EAAA9B,MAAA,GAIAL,MAAAC,QAAAjI,KAAArD,SACAqL,MAAAC,QAAAjI,KAAArD,MAAA,MAAA,IAAAoF,EAAA/F,QAAAgE,KAAArD,MAAA,GAAAwN,EAAAxN,QAGAoF,EAAA/F,QAAAgE,KAAArD,MAAAwN,EAAAxN,UAFAwL,GAAA,GAOAgC,EAAAxN,OAAAqD,KAAArD,QACAwL,GAAA,QAOA,IAAAgC,EAAAvK,UACAuK,EAAAvK,SAAA,GAGA,eAAAiK,EAAAF,kBAAAK,GAAAF,IACAK,EAAAE,OAAA,4BAAAL,EAAA,gBAAAC,EAEAD,IAAAF,GACAE,EAAA,EACAC,GAAA,GAEAD,GAAA,GAIAG,EAAAT,WAAAG,EAAAH,WACAS,EAAAzE,QAAA1F,KAAApC,GACAuM,EAAA7K,QAAAU,KAAAV,QACA6K,EAAAnN,MAAAA,EAEA,IAAA4K,GAAA,EAKAI,MAAAC,QAAAjI,KAAArD,QAAA,EAAAqD,KAAArD,MAAAlB,QACA,IAAAsG,EAAA/F,QAAAgE,KAAArD,MAAA,GAAAtB,MAAA,KAAA8O,EAAAxN,SACA,IAAAoF,EAAA/F,QAAAgE,KAAArD,MAAAwN,EAAAxN,SACAiL,GAAA,IAEA7F,EAAAkG,QAAAjI,KAAArD,QAAAwN,EAAAxN,OAAAqD,KAAArD,SAEA,GAAAwN,EAAAvC,WAAA5H,KAAAN,YAAA,IAAAM,KAAArD,OAAA,KAAAqD,KAAArD,SADAiL,GAAA,GAKAuC,EAAAvC,SAAAA,EACAuC,EAAA1B,WAAAb,EACAuC,EAAAzB,SAAA1I,KAAA0I,SACAyB,EAAAxB,gBAAA3I,KAAA2I,gBACA,IAAAC,EAAArI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,mCACAgF,GAAAU,EAAAuB,KACAnK,MAEA,GAAAA,KAAA6I,WAAA,CACA,YAAA7I,KAAArD,QACAwL,GAAA,GAEA,IAAAW,EAAA,CACApD,QAAA1F,KAAApC,GACA0B,QAAAU,KAAAV,QACA3C,MAAAqD,KAAArD,MACAoM,aAAA/I,KAAArD,MACAgL,gBAAA3H,KAAA2H,gBACAQ,WAAAA,GAGAS,EAAArI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,kCACAgF,GAAAU,EAAAE,GAIA,OAAAZ,GAGAP,gBAAA,WACA,GAAA,YAAA3H,KAAA+I,eAAA/I,KAAAmI,WAAA,CACA,YAAAnI,KAAA+I,eACA/I,KAAA+I,aAAA,IAEA,IAAAD,EAAA,CACApD,QAAA1F,KAAA0F,QACApG,QAAAU,KAAAV,QACAyJ,aAAA/I,KAAA+I,cAGA,OADAxI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,sCACA0F,CAAAE,KAIA9B,aAAA,SAAAvF,GACA,IAAAuH,EAAA,EACA5I,EAAAqB,EAAAxB,IAAA,WACA,GAAA,GAAAG,EAAA3E,OAIA,GAAA,GAAAsO,SAAAtI,EAAAxB,IAAA,uBAIA8B,EAAAC,KAAAP,EAAAxB,IAAA,UAAA,SAAAkF,GACA,IAAA8D,EAAAlH,EAAA0E,KAAArG,GAAA,SAAA0H,GAAA,OAAAA,EAAAnL,OAAAwI,KACA6D,GAAAE,OAAAD,EAAAE,aAEA,CAIA,IAAAvB,EAAA7F,EAAA0E,KAAArG,GAAA,SAAA0H,GAAA,OAAArG,EAAAxB,IAAA,UAAA6H,EAAAnL,cAIA,IAAAiL,IACAoB,EAAApB,EAAAuB,MAIA,OAAAH,GAGAjC,kBAAA,SAAA7B,EAAAjG,GAEA,GAAA,IAAAA,EAAAgB,IAAA,sBAAA,CACA,IAAA2H,EAAAjJ,OAAAuG,GAAAC,MACA/E,EAAAnB,EAAAgB,IAAA,iBACA8B,EAAAC,KAAA5B,GAAA,SAAAgI,EAAApL,GACAoL,EAAAzL,QAAAiL,GACAQ,EAAAK,YAAA,EACAL,EAAAR,UAAA,IAEAQ,EAAAK,YAAA,EACAL,EAAAR,UAAA,GAEAQ,EAAAK,YAKA9J,OAAA,aAAAyJ,EAAA1C,QAAA,IAAA1I,GAAAiK,SAAA,cACAtI,OAAA,mBAAAyJ,EAAA1C,QAAA,IAAA1I,GAAAiK,SAAA,sBALAmB,EAAAR,UAAA,EACAjJ,OAAA,aAAAyJ,EAAA1C,QAAA,IAAA1I,GAAAkK,YAAA,cACAvI,OAAA,mBAAAyJ,EAAA1C,QAAA,IAAA1I,GAAAkK,YAAA,4BAMA,CAEA,iBADAU,EAAA3I,EAAAgB,IAAA,UAAA,MACA2H,EAAA,CAAAA,IACA,IAAAjL,EAAAgC,OAAAuG,GAAAC,MAEA,GADAxG,OAAAuG,GAAA9K,KAAA,WAEAwN,EAAArL,KAAAI,GACAgC,OAAAuG,GAAA+B,SAAA,cACAtI,OAAAuG,GAAAkE,SAAA3C,KAAA,cAAA9H,OAAAuG,GAAA9K,KAAA,MAAA,MAAA6M,SAAA,wBACA,CACAtI,OAAAuG,GAAAgC,YAAA,cACAvI,OAAAuG,GAAAkE,SAAA3C,KAAA,cAAA9H,OAAAuG,GAAA9K,KAAA,MAAA,MAAA8M,YAAA,oBACA,IAAAjM,EAAA2M,EAAA5L,QAAAW,GACA,IAAA,GAAA1B,EACA2M,EAAA9L,OAAAb,EAAA,QACA,GAAA+M,MAAAC,QAAAL,GAAA,CACA,IAAAyB,EAAAzB,EAAA,GAAAvM,MAAA,KACAiO,EAAAD,EAAArN,QAAAW,IACA,IAAA2M,GACAD,EAAAvN,OAAAwN,EAAA,GAEA1B,EAAAyB,EAAAtN,KAAA,OAKA,OAAAgG,EAAAwH,MAAA3B,SAMA3O,EAAA,yBAAA,IAAA,WCxGA,OAjJAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,aAAA,oBAAAR,KAAAsK,kBACAtK,KAAAM,SAAAC,QAAAC,QAAA,aAAA,aAAAR,KAAAyH,UACAlH,QAAAC,QAAA,aAAA8C,MAAA,gBAAAtD,KAAAgH,aAAAhH,MAEAA,KAAAM,SAAAC,QAAAC,QAAA,aAAA,eAAAR,KAAAuK,mBAAAvK,OAGAyH,SAAA,SAAAxI,GAOA,GANAA,EAAAiB,IAAA,gBAAAF,KAAA0H,eACAzI,EAAAiB,IAAA,kBAAAF,KAAA2H,iBAKA,GAAA1I,EAAAgB,IAAA,WAAAxE,OAAA,CAIA,IAAAmM,EAAA7F,EAAA0E,KAAAxH,EAAAgB,IAAA,YAAA,SAAA6H,GAAA,OAAA,GAAAA,EAAAF,iBAEA,IAAAA,GACA3I,EAAAiB,IAAA,QAAA0H,EAAAjL,SAKA2N,iBAAA,SAAArL,GACA,GAAAA,EAAAgB,IAAA,eAEAhB,EAAA8B,QAAA,aAIA2G,cAAA,WACA,IAAAQ,EAAA,GACA,GAAA,IAAAlI,KAAArD,MACA,IAAAwL,GAAA,OAEAA,GAAA,EAyCA,GAtCApG,EAAAC,KAAAhC,KAAAI,SAAA,SAAAgI,EAAApL,GACAoL,EAAAzL,OAAAqD,KAAArD,QACAwL,GAAA,QAOA,IAAAC,EAAAxI,UACAwI,EAAAxI,SAAA,GAGAwI,EAAAR,UAAA,EACAQ,EAAA1C,QAAA1F,KAAApC,GACAwK,EAAA9I,QAAAU,KAAAV,QACA8I,EAAAW,aAAA/I,KAAArD,MACAyL,EAAApL,MAAAA,EACAoL,EAAAC,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAAxG,EAAAyG,OAAAJ,EAAAC,OAAAD,EAAAC,MACAD,EAAAM,SAAA1I,KAAA0I,SAKA1I,KAAAN,OAAA,GAAAM,KAAA4H,UAEA5H,KAAArD,OAAAyL,EAAAzL,MADAyL,EAAAR,UAAA,EAIAQ,EAAAR,UAAA,EAGAQ,EAAAO,gBAAA3I,KAAA2I,gBACA,IAAAC,EAAArI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,mCAEAgF,GAAAU,EAAAR,KACApI,MAEA,GAAAA,KAAA6I,WAAA,CACA,YAAA7I,KAAArD,QACAwL,GAAA,GAEA,IAAAW,EAAA,CACApD,QAAA1F,KAAApC,GACA0B,QAAAU,KAAAV,QACAyJ,aAAA/I,KAAArD,MACAgL,gBAAA3H,KAAA2H,gBACAQ,WAAAA,GAEAS,EAAArI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,kCACAgF,GAAAU,EAAAE,GAGA,OAAAZ,GAGAP,gBAAA,WACA,GAAA,YAAA3H,KAAA+I,eAAA/I,KAAAmI,WAAA,CACA,YAAAnI,KAAA+I,eACA/I,KAAA+I,aAAA,IAEA,IAAAD,EAAA,CACApD,QAAA1F,KAAA0F,QACApG,QAAAU,KAAAV,QACAyJ,aAAA/I,KAAA+I,cAGA,OADAxI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,sCACA0F,CAAAE,KAIA9B,aAAA,SAAAvF,GAKA,IAAAuH,EAAA,EAEA,GAAA,GAAAvH,EAAAxB,IAAA,WAAAxE,OAAA,CAIA,IAAAmM,EAAA7F,EAAA0E,KAAAhF,EAAAxB,IAAA,YAAA,SAAA6H,GAAA,OAAArG,EAAAxB,IAAA,UAAA6H,EAAAnL,cACA,IAAAiL,IACAoB,EAAApB,EAAAuB,MAIA,OAAAH,GAGAuB,mBAAA,SAAArF,EAAAjG,GACAN,OAAA,UAAAA,OAAAuG,GAAAhE,KAAA,QAAA,MAAAgG,YAAA,cACAvI,OAAAuG,GAAAqB,QAAA,MAAAE,KAAA,SAAAS,YAAA,oBACAvI,OAAAuG,GAAA+B,SAAA,cACAtI,OAAAuG,GAAAqB,QAAA,MAAAE,KAAA,cAAA9H,OAAAuG,GAAA9K,KAAA,MAAA,MAAA6M,SAAA,0BASAhO,EAAA,0BAAA,IAAA,WChGA,OAnDAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAAwK,iBACAxK,KAAAM,SAAAC,QAAAC,QAAA,UAAA,cAAAR,KAAAyK,iBAGAD,gBAAA,SAAAvL,GAEA,GAAA,IAAAA,EAAAgB,IAAA,UAAA,IAAAhB,EAAAgB,IAAA,eAAA,CACA,IAAAyK,EAAAzL,EAAAgB,IAAA,WACAhB,EAAAiB,IAAA,cAAAwK,KAIAD,eAAA,SAAAvF,EAAAjG,GACA,IAAA0L,EAAAhM,OAAAuG,GACAvI,EAAAiO,WAAAD,EAAAxF,OACAuF,EAAAC,EAAAzJ,KAAA,OACA2J,EAAAF,EAAAzJ,KAAA,OACA4J,EAAAF,WAAAD,EAAAzJ,KAAA,SAEA,GAAAwJ,GAAA/N,EAAA+N,EAAA,CACA,IAAAjJ,EAAAlB,QAAAC,QAAA,UAAA0C,QAAA,YAAAjE,EAAAgB,IAAA,OACAI,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA0C,QAAA,YAAAjE,EAAAgB,IAAA,MAAA,aAAAI,EAAAJ,IAAA,YAAA8K,6BAEAxK,QAAAC,QAAA,UAAA0C,QAAA,eAAAjE,EAAAgB,IAAA,MAAA,cAGA,GAAA4K,GAAAlO,EAAAkO,EAAA,CACApJ,EAAAlB,QAAAC,QAAA,UAAA0C,QAAA,YAAAjE,EAAAgB,IAAA,OACAI,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA0C,QAAA,YAAAjE,EAAAgB,IAAA,MAAA,aAAAI,EAAAJ,IAAA,YAAA+K,6BAEAzK,QAAAC,QAAA,UAAA0C,QAAA,eAAAjE,EAAAgB,IAAA,MAAA,cAGA,IAAAgL,EAAAC,KAAAC,MAAA,IAAAP,WAAAjO,IACAyO,EAAAF,KAAAC,MAAA,IAAAP,WAAAE,IAEA,GAAAnO,GAAA,GAAAsO,EAAAG,EAAA,CACA3J,EAAAlB,QAAAC,QAAA,UAAA0C,QAAA,YAAAjE,EAAAgB,IAAA,OACAI,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA0C,QAAA,YAAAjE,EAAAgB,IAAA,MAAA,cAAAI,EAAAJ,IAAA,YAAAoL,uBAAAP,QAEAvK,QAAAC,QAAA,UAAA0C,QAAA,eAAAjE,EAAAgB,IAAA,MAAA,qBAQAhH,EAAA,0BAAA,IAAA,WCrDA,IAAAmM,EAAA7E,QAAAC,QAAA,UAwBA,OAtBA+D,WAAA3K,OAAAkF,OAAA,CACAwM,eAAA,GAEAxL,WAAA,WACAE,KAAAM,SAAA8E,EAAA,aAAApF,KAAAuL,iBAGAA,eAAA,SAAAtM,GACA,GAAAA,EAAAgB,IAAA,gBAAA,CACAD,KAAAsL,eAAArM,EACA,IAAA6F,EAAA7F,EAAAgB,IAAA,gBACAD,KAAAM,SAAAC,QAAAC,QAAA,SAAAsE,GAAA,oBAAA9E,KAAAY,eAIAA,YAAA,SAAA4K,GACAxL,KAAAsL,eAAApL,IAAA,QAAAsL,EAAAvL,IAAA,UAEAD,KAAAsL,eAAAvK,QAAA,kBAMA9H,EAAA,2BAAA,IAAA,WC1BA,IAAAmM,EAAA7E,QAAAC,QAAA,UACA8E,EAAA,mBA+EA,OA7EAf,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAA8E,EAAA,aAAApF,KAAAyL,iBACAzL,KAAAM,SAAA8E,EAAA,cAAApF,KAAA0L,eAGAD,gBAAA,SAAAE,GACAA,EAAA1L,IAAA,kBAEAD,KAAAM,SAAAC,QAAAC,QAAA,QAAA,UAAA,SAAAoL,GACA5L,KAAA6L,yBAAAF,OAIAE,yBAAA,SAAAF,GAEA,IAAAH,EAAAjL,QAAAC,QAAA,QAAAmL,EAAA1L,IAAA,WAAAiD,QAAA,iBAAAyI,EAAA1L,IAAA,uBAGA,IAAAuL,IAEAA,EAAAtL,IAAA,eAAAyL,EAAA1L,IAAA,OACAD,KAAAM,SAAAC,QAAAC,QAAA,SAAAgL,EAAAvL,IAAA,OAAA,oBAAAD,KAAAY,aACAZ,KAAAM,SAAAC,QAAAC,QAAA,SAAAmL,EAAA1L,IAAA,OAAA,oBAAAD,KAAAY,eAGAA,YAAA,SAAA3B,GACA,QAAA,IAAAA,EAAAgB,IAAA,gBACA,IAAA0L,EAAA1M,EACAuM,EAAAjL,QAAAC,QAAA,QAAAvB,EAAAgB,IAAA,WAAAiD,QAAA,iBAAAyI,EAAA1L,IAAA,uBAEAuL,EAAAvM,EACA0M,EAAAvG,EAAAlC,QAAA,YAAAsI,EAAAvL,IAAA,iBAEAuL,EAAAvL,IAAA,MAAA,IACA6L,EAAAH,EAAA1L,IAAA,MAEA,GAAA,IAAA0L,EAAA1L,IAAA,UAAA0L,EAAA1L,IAAA,UAAAuL,EAAAvL,IAAA,SACAM,QAAAC,QAAA,UAAA0C,QAAA,eAAA4I,EAAAxG,OACA,CACA,IAAA7D,EAAAlB,QAAAC,QAAA,UAAA0C,QAAA,YAAA4I,GACAzL,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA0C,QAAA,YAAA4I,EAAAxG,EAAAjF,EAAAJ,IAAA,YAAA8L,wBAIAL,aAAA,SAAAxG,EAAAjG,EAAA4G,GAEA,IAAAkD,EAAApK,OAAAuG,GAAAC,MACA,GAAAlG,EAAAgB,IAAA,iBACA,IAAA0L,EAAA1M,EACA6M,EAAA7M,EAAAgB,IAAA,MAEA+L,EADAzL,QAAAC,QAAA,QAAAvB,EAAAgB,IAAA,WAAAiD,QAAA,iBAAAyI,EAAA1L,IAAA,kBACAA,IAAA,SACAgM,EAAAlD,OACA,GAAA9J,EAAAgB,IAAA,gBAEA6L,GADAH,EAAApL,QAAAC,QAAA,UAAA0C,QAAA,YAAAjE,EAAAgB,IAAA,kBACAA,IAAA,MAEA+L,EADAC,EAAAN,EAAA1L,IAAA,SAIA,QAAA,IAAA0L,EACA,GAAA,IAAAM,EACA1L,QAAAC,QAAA,UAAA0C,QAAA,eAAA4I,EAAAxG,QACA,GAAAyD,GAAAiD,EACAzL,QAAAC,QAAA,UAAA0C,QAAA,eAAA4I,EAAAxG,OACA,CACA,IAAA7D,EAAAlB,QAAAC,QAAA,UAAA0C,QAAA,YAAA4I,GACAzL,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA0C,QAAA,YAAA4I,EAAAxG,EAAAjF,EAAAJ,IAAA,YAAA8L,6BAQA9S,EAAA,+BAAA,IAAA,WC9DA,OApBAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAS,QAAAC,QAAA,WAAA8C,MAAA,eAAAtD,KAAAkM,cAGAA,YAAA,SAAAjN,EAAAtC,GACAsC,EAAAgB,IAAA,eACAhB,EAAAiB,IAAA,QAAAvD,GACAsC,EAAAiB,IAAA,aAAA,GAKA6B,EAAAkG,QAAAtL,IACAsC,EAAA8B,QAAA,eAAA9B,UAQAhG,EAAA,2BAAA,CAAA,6BAAA,SAAAkT,GCkEA,OAxFA5H,WAAA3K,OAAAkF,OAAA,CACAsN,MAAA,GAEAtM,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAAqM,mBAGAA,iBAAA,SAAA5K,GACA,QAAA,IAAAzB,KAAAoM,MAAA3K,EAAAxB,IAAA,OACA,OAAA,EAGAD,KAAAM,SAAAC,QAAAC,QAAA,SAAAiB,EAAAxB,IAAA,OAAA,cAAAD,KAAAsM,MAAAtM,MAIAyB,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,gBAAAD,KAAAiB,aAAAQ,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,gBAAAD,KAAAuM,WAAA9K,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,kBAAAD,KAAAuM,WAAA9K,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,gBAAAD,KAAAwM,YAAA/K,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,iBAAAD,KAAAyM,aAAAhL,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,kBAAAD,KAAA0M,gBAAAjL,GAEAA,EAAAnB,SAAAC,QAAAC,QAAA,UAAA,YAAAR,KAAAyM,aAAAhL,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,UAAA,eAAAR,KAAAwM,YAAA/K,GAEAzB,KAAAoM,MAAA3K,EAAAxB,IAAA,QAAA,GAGAqM,MAAA,SAAA5O,EAAA+D,GACA,IAAApB,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACAM,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAAiD,QAAA,SAAA7C,IAGAY,aAAA,WACAjB,KAAAE,IAAA,YAAA,GACAK,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAAc,QAAA,kBAAAf,OAGAyM,aAAA,SAAAhL,QAEA,IAAAA,GAAAA,EAAAxB,IAAA,WAAAD,KAAAC,IAAA,YAEAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,cAGAyL,YAAA,SAAA/K,GAIA,QAAA,IAAAA,GAAAA,EAAAxB,IAAA,WAAAD,KAAAC,IAAA,UACA,OAAA,EAGA,IAAAI,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAlD,KAAAC,IAAA,WACA,GAAA8B,EAAA4K,KAAAtM,EAAAJ,IAAA,kBACAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,cAIA2L,gBAAA,WACA,GAAA1M,KAAAC,IAAA,UAAAD,KAAAC,IAAA,oBAAA,OAAA,EAEAD,KAAAE,IAAA,WAAAF,KAAAC,IAAA,UACAD,KAAAE,IAAA,QAAAF,KAAAC,IAAA,qBACAD,KAAAe,QAAA,aAGAwL,WAAA,SAAAK,QACA,IAAAA,EAAA1I,aACA,IAAA0I,EAAA1I,OAAA2I,OACA9K,EAAA4K,KAAAC,EAAA1I,OAAA2I,OAAA,QACA,IAAAD,EAAA1I,OAAA2I,MAAAC,gBAAA,IAAAF,EAAA1I,OAAA2I,MAAAE,gBAKA,IAAA/M,KAAAC,IAAA,aACAD,KAAAE,IAAA,QAAAF,KAAAC,IAAA,aAEAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,mBAOA9H,EAAA,0BAAA,IAAA,WCvDA,OAnCAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAgN,cAGAA,YAAA,SAAAJ,EAAAK,EAAAC,EAAAC,GAEA,QAAA,IAAAP,EAAAQ,MAAA,CAGA,QAAA,IAAAR,EAAAQ,MAAAzI,KAAA,CACA,IAAA0I,EAAAC,SAAAC,cAAA,QACAxL,EAAAC,KAAA4K,EAAAQ,MAAAzI,MAAA,SAAA6I,EAAAxQ,GACA,IAAAyQ,EAAAH,SAAAI,eAAAF,GACAH,EAAAM,YAAAF,GACAJ,EAAAM,YACAL,SAAAC,cAAA,UAGA5O,OAAA,iBAAAuJ,KAAAmF,GAIA,QAAA,IAAAT,EAAAQ,MAAAQ,QAAA,CAEAA,QAAAC,IAAA,OADA,GACA,iBACA9L,EAAAC,KAAA4K,EAAAQ,MAAAQ,SAAA,SAAAJ,EAAAxQ,GACA4Q,QAAAC,IAAAL,MAEAI,QAAAC,IAAA,OALA,GAKA,6BASA5U,EAAA,4BAAA,IAAA,WCtCAsH,QAAAC,QAAA,UAgCA,OA/BA+D,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,SAAAb,GACAsB,QAAAC,QAAA,QAAA8C,MAAA,aAAAtD,KAAA8N,gBAGAA,cAAA,SAAAX,GACA,IAAA9M,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAiK,GACAjJ,GAAA,EAoBA,OAlBA7D,IAIA,IAAAA,EAAAJ,IAAA,UAAAxE,QACAsG,EAAAC,KAAA3B,EAAAJ,IAAA,UAAA0B,QAAA,SAAAoM,IACA7J,EAAAA,GAAA,IACA6J,EAAA9N,IAAA,OAAA8N,EAAA9N,IAAA,UAIA8B,EAAAC,KAAA3B,EAAAJ,IAAA,UAAA0B,QAAA,SAAAqM,GACA,UAAAA,EAAA/N,IAAA,SAAA+N,EAAA/N,IAAA,UAAAxE,OAAA,KACAyI,EAAAA,GAAA,IACA8J,EAAA/N,IAAA,OAAA+N,EAAA/N,IAAA,eAIAiE,QAMAjL,EAAA,+BAAA,IAAA,WCwEA,OA1GAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAA6G,kBACA7G,KAAAM,SAAAC,QAAAC,QAAA,UAAA,eAAAR,KAAA6G,kBACA7G,KAAAM,SAAAC,QAAAC,QAAA,UAAA,cAAAR,KAAAiO,eAEAjO,KAAAM,SAAAC,QAAAC,QAAA,UAAA,oBAAAR,KAAA8G,mBACA9G,KAAAM,SAAAC,QAAAC,QAAA,UAAA,iBAAAR,KAAA8G,oBAGAmH,cAAA,SAAA/I,EAAAjG,EAAA4G,GACA,GAAA,GAAA5G,EAAAgB,IAAA,YACA,OAAA,EAGAhB,EAAAgB,IAAA,UACAD,KAAA6G,iBAAA3B,EAAAjG,IAIA4H,iBAAA,SAAA3B,EAAAjG,GACA,GAAA,GAAAA,EAAAgB,IAAA,cAAAhB,EAAAgB,IAAA,WACA,OAAA,EAGA,IAAA8I,EAAApK,OAAAuG,GAAAC,MACA+I,EAAA3N,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAiD,QAAA,oBAAAgC,EAAAjG,GACAkP,GAAA,EAEAC,EAAAnP,EAAAgB,IAAA,QAsBA,GArBAmO,IAGAA,GADAA,GADAA,EAAAA,EAAAxS,QAAA,KAAA,MACAA,QAAA,KAAA,MACAA,QAAA,MAAA,MAKAwS,GAAArF,IAAAqF,GAEA,EAAAnP,EAAAgB,IAAA,UAAAxE,SAEA0S,GAAA,GAIAxP,OAAA0P,KAAAtF,KAEAoF,GAAA,QAGA,IAAAD,EACA,IAAAI,EAAAJ,OAEAI,EAAAH,EAGAnO,KAAAuO,WAAAD,EAAArP,IAGA6H,kBAAA,SAAA7H,GAEA,GAAA,GAAAA,EAAAgB,IAAA,cAAAhB,EAAAgB,IAAA,YAAAhB,EAAAgB,IAAA,SACA,OAAA,EAMA,GAAAhB,EAAAgB,IAAA,UAAAA,IAAA,kBACA,OAAA,EAGA8I,aAAA9J,EAAAgB,IAAA,SAEA,IAAAkO,GAAA,EAEAxP,OAAA0P,KAAAtF,gBACAoF,GAAA,GAGA,IAAAD,EAAA3N,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAiD,QAAA,qBAAAjE,GACA,QAAA,IAAAiP,EACA,IAAAI,EAAAJ,OAEAI,EAAAH,EAGAnO,KAAAuO,WAAAD,EAAArP,IAIAsP,WAAA,SAAAD,EAAArP,GACA,GAAAqP,EAQA/N,QAAAC,QAAA,UAAA0C,QAAA,eAAAjE,EAAAgB,IAAA,MAAA,sBARA,CAEA,IAAAI,EAAAE,QAAAC,QAAA,QAAAvB,EAAAgB,IAAA,WAAAiD,QAAA,iBAEA,IAAA7C,GACAE,QAAAC,QAAA,UAAA0C,QAAA,YAAAjE,EAAAgB,IAAA,MAAA,iBAAAI,EAAAJ,IAAA,YAAAuO,8BAWAvV,EAAA,0BAAA,IAAA,WCrDA,OAxDAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAyO,eAGAA,aAAA,SAAA7B,EAAAK,EAAAC,EAAAC,GAGA,GAAApL,EAAA4K,KAAAC,EAAA1I,OAAA2I,OAAA,QACA,IAAAD,EAAA1I,OAAA2I,MAAAC,gBAAA,IAAAF,EAAA1I,OAAA2I,MAAAE,SAAA,CAEAzE,WAAAoG,UAAA9B,EAAA1I,OAAA2I,MAAAC,UACAxE,WAAAyE,SAAAH,EAAA1I,OAAA2I,MAAAE,SAEA,IAAA1M,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAiK,GACA5M,QAAAC,QAAA,QAAA2M,GAAAjK,QAAA,SAAA7C,GAqBA,GAjBA0B,EAAA4K,KAAAC,EAAA1I,OAAAyK,QAAA,GACA5M,EAAAC,KAAA4K,EAAA1I,OAAAyK,QAAA,SAAA7F,EAAApD,GACA,iBAAA,EACAnF,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,EAAAoD,EAAA8F,KAAA9F,EAAA0E,SAEAjN,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,EAAA,iBAAAoD,MAKA/G,EAAA4K,KAAAC,EAAA1I,OAAAS,MAAA,GACA5C,EAAAC,KAAA4K,EAAA1I,OAAAS,MAAA,SAAAX,EAAAsB,GACA/E,QAAAC,QAAA,QAAA2M,GAAAjK,QAAA,eAAAoC,GACA/E,QAAAC,QAAA,QAAA2M,GAAAjK,QAAA,YAAAoC,EAAAtB,WAIA,IAAA4I,EAAA1I,OAAA2K,WACA,IAAAjC,EAAA1I,OAAA2K,KAAArB,QAAA,CACA,IAAAsB,EAAA,yEACAlB,QAAAC,IAAA,uCAAAiB,GACAlB,QAAAC,IAAAjB,EAAA1I,OAAA2K,KAAArB,SACAI,QAAAC,IAAA,8BAAAiB,GAUAnQ,OAAA,YAAAwO,EAAA,6BAAA4B,aAQA9V,EAAA,6BAAA,IAAA,WCtCA,OArBAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAgP,iBAGAA,eAAA,SAAApC,QAEA,IAAAA,EAAA9D,KAAAmG,WAAA,IAAArC,EAAA9D,KAAAmG,KAAAC,UAAA,IAAAtC,EAAA9D,KAAAmG,KAAAC,WACAC,OAAAC,SAAAxC,EAAA9D,KAAAmG,KAAAC,UAGA,GAAAnN,EAAA4K,KAAAC,EAAA1I,cAAA,IAAA0I,EAAA9D,KAAAuG,cAEA,IAAAzC,EAAA9D,KAAAuG,QAAAH,UAAA,IAAAtC,EAAA9D,KAAAuG,QAAAH,WACAC,OAAAC,SAAAxC,EAAA9D,KAAAuG,QAAAH,gBASAjW,EAAA,4BAAA,IAAA,WCUA,OAjCAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAsP,eAGAA,aAAA,SAAA1C,GACA,GAAA,GAAA7K,EAAA4K,KAAAC,EAAA1I,cAAA,IAAA0I,EAAA9D,KAAAuG,cACA,IAAAzC,EAAA9D,KAAAuG,QAAAE,iBAAA,IAAA3C,EAAA9D,KAAAuG,QAAAE,gBAAA,CACA,IAAAC,EAAA5C,EAAA9D,KAAA0G,QACAD,EAAA5Q,OAAA,YAAA6Q,EAAA,0BAEAD,EAAArH,KAAA0E,EAAA9D,KAAAuG,QAAAE,iBAAAR,OAGA,IAAAU,EAAAF,EAAAG,SAAAC,IACAC,EAAAL,EAAAG,SAAAC,IAAAJ,EAAAM,cACAC,EAAAnR,OAAAwQ,QAAAY,YAAApR,OAAAwQ,QAAAa,SACAC,EAAAtR,OAAAwQ,QAAAY,YAEAD,EAAAF,GAAAK,EAAAR,GAIA9Q,OAAA,cAAAuR,QAAA,CACAH,UAAAR,EAAAG,SAAAC,IAAA,IACA,YAWA1W,EAAA,0BAAA,IAAA,WC4HA,OAhKAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WAEAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,cAAA,SAAAvB,GACA,QAAAA,EAAAgB,IAAA,eAAAD,KAAAyH,SAAAxI,KACAe,MAEAO,QAAAC,QAAA,cAAA8C,MAAA,gBAAAtD,KAAAgH,aAAAhH,MACAO,QAAAC,QAAA,mBAAA8C,MAAA,gBAAAtD,KAAAgH,aAAAhH,OAGAyH,SAAA,SAAAxI,GAOA,GANAA,EAAAiB,IAAA,gBAAAF,KAAA0H,eACAzI,EAAAiB,IAAA,wBAAAF,KAAAmQ,uBAKA,GAAAlR,EAAAgB,IAAA,WAAAxE,OAAA,CAEA,IAAAsM,EAAA9I,EAAAgB,IAAA,SAKA,GAAA,mBAAAhB,EAAAgB,IAAA,QAIA,IAAA2H,EAAA7F,EAAA8F,OAAA5I,EAAAgB,IAAA,YAAA,SAAA6H,GAAA,OAAA,GAAAA,EAAAF,YAEAjL,EADAiL,EAAA7F,EAAAzG,IAAAsM,GAAA,SAAAE,GAAA,OAAAA,EAAAnL,cAEA,GAAA,cAAAsC,EAAAgB,IAAA,QAAA,CAYA,QAJA,KAJA2H,EAAA7F,EAAA0E,KAAAxH,EAAAgB,IAAA,YAAA,SAAA6H,GAAA,OAAA,GAAAA,EAAAF,eAKAA,EAAA7F,EAAAsB,MAAApE,EAAAgB,IAAA,kBAGA,IAAA2H,QACA,IAAAA,EAAAjL,MACAA,EAAAiL,EAAAjL,WACA,QAAA,IAAAiL,EACAjL,EAAAiL,EAAAS,WAQA,IAAAN,GAAA,KAAAA,GACAC,MAAAC,QAAAF,GACA9I,EAAAiB,IAAA,QAAA6H,QACA,IAAAH,GACA3I,EAAAiB,IAAA,QAAAvD,KAKA+K,cAAA,WACA,IAAAQ,EAAA,GA4CA,OA1CAnG,EAAAC,KAAAhC,KAAAI,SAAA,SAAAgI,GAKA,GAAArG,EAAAkG,QAAAjI,KAAArD,QAGA,GAAA,oBAAAqD,KAAAD,MAAA,EAAAC,KAAArD,MAAAlB,SACA,GAAAsG,EAAA/F,QAAAgE,KAAArD,MAAA,GAAAtB,MAAA,KAAA+M,EAAAzL,OACA,IAAAiL,GAAA,OACA,IAAA,GAAA7F,EAAA/F,QAAAgE,KAAArD,MAAAyL,EAAAzL,OACAiL,GAAA,OAEA,GAAA7F,EAAAkG,QAAAjI,KAAArD,QAAAyL,EAAAzL,OAAAqD,KAAArD,MAEA,GAAA,GAAAyL,EAAAR,UAAA5H,KAAAN,YACA,IAAAM,KAAArD,MACAiL,GAAA,OAEAA,GAAA,OALA,IAAAA,GAAA,OAYA,IAAAQ,EAAAxI,UACAwI,EAAAxI,SAAA,GAGAwI,EAAAR,SAAAA,EACAQ,EAAA1C,QAAA1F,KAAApC,GACAwK,EAAA9I,QAAAU,KAAAV,QACA8I,EAAAW,aAAA/I,KAAArD,MACAyL,EAAAC,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAAxG,EAAAyG,OAAAJ,EAAAC,OAAAD,EAAAC,MAEAD,EAAAO,gBAAA3I,KAAA2I,gBACA,IAAAC,EAAArI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,oCACAgF,GAAAU,EAAAR,KACApI,MAEAkI,GAGAiI,sBAAA,WACA,IAAAC,EAAA,GAEA,mBAAApQ,KAAAD,OAIAqQ,GAHAA,GAAA,aAGA,WADApQ,KAAAqQ,YAAA,GACA,KAGA,OAAAD,GAGApJ,aAAA,SAAAvF,GACA,IAAAuH,EAAA,EACA5I,EAAAqB,EAAAxB,IAAA,WACA,GAAA,GAAAG,EAAA3E,OAIA,GAAA,mBAAAgG,EAAAxB,IAAA,QAIA8B,EAAAC,KAAAP,EAAAxB,IAAA,UAAA,SAAAkF,GACA,IAAA8D,EAAAlH,EAAA0E,KAAArG,GAAA,SAAA0H,GAAA,OAAAA,EAAAnL,OAAAwI,KACA6D,GAAAE,OAAAD,EAAAE,aAEA,CAIA,IAAAvB,EAAA7F,EAAA0E,KAAArG,GAAA,SAAA0H,GAAA,OAAArG,EAAAxB,IAAA,UAAA6H,EAAAnL,cAIA,IAAAiL,IACAA,EAAAnG,EAAAxB,IAAA,WAAA,IAEA+I,EAAApB,EAAAuB,KAGA,OAAAH,QAQA/P,EAAA,iCAAA,IAAA,WCjIA,OAlCAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAsP,eAGAA,aAAA,SAAA1C,GACA,IAAAvM,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAA0J,EAAA9D,KAAA0G,SAIA,GAAA,GAAAzN,EAAA4K,KAAAC,EAAA1I,QACA,OAAA,EAGA,GAAA0I,EAAA9D,KAAAwH,SAAAC,iBAEAlQ,EAAAJ,IAAA,UAAAuQ,MAAAnQ,EAAAJ,IAAA,iBACA,GAAA2M,EAAA9D,KAAAwH,SAAAG,eACAlQ,QAAAC,QAAA,WAAAO,QAAA,UAIA,GAAA6L,EAAA9D,KAAAwH,SAAAG,eAIApQ,EAAAU,QAAA,cAUA9H,EAAA,2BAAA,IAAA,WCmCA,OAvEAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,WAAA,aAAAR,KAAAyH,UACAlH,QAAAC,QAAA,WAAA8C,MAAA,gBAAAtD,KAAAgH,aAAAhH,OAGAyH,SAAA,SAAAxI,GACAA,EAAAiB,IAAA,wBAAAF,KAAA0Q,uBACAzR,EAAAiB,IAAA,gBAAAF,KAAA2Q,eACA1R,EAAAiB,IAAA,gBAAAF,KAAA0H,gBAGAiJ,cAAA,WACA,OAAA3Q,KAAA4Q,cACA,IAAA,OAEA,OADArQ,QAAAC,QAAA,OAAA0C,QAAA,eAAA,yBACA0F,CAAA5I,MAEA,IAAA,SAEA,OADAO,QAAAC,QAAA,OAAA0C,QAAA,eAAA,wBACA0F,CAAA5I,MAGA,IAAA,WAEA,OADAO,QAAAC,QAAA,OAAA0C,QAAA,eAAA,4BACA0F,CAAA5I,MAEA,QAEA,OADAO,QAAAC,QAAA,OAAA0C,QAAA,eAAA,0BACA0F,CAAA5I,QAIA0Q,sBAAA,WACA,GAAA,GAAA1Q,KAAA6Q,qBAEA,OADAtQ,QAAAC,QAAA,OAAA0C,QAAA,eAAA,4BACA0F,CAAA5I,OAIA0H,cAAA,WACA,IAAAmC,EAAA7J,KACAkI,EAAA,GAiBA,OAhBAnG,EAAAC,KAAAhC,KAAAI,SAAA,SAAAgI,GACA,GAAA,GAAAA,EAAAR,SACA,IAAAA,GAAA,OAEAA,GAAA,EAGAQ,EAAAR,SAAAA,EACAQ,EAAA1C,QAAAmE,EAAAjM,GACAwK,EAAA9I,QAAAuK,EAAAvK,QACA8I,EAAAW,aAAAc,EAAAlN,MAEA,IAAAiM,EAAArI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,oBAAA2G,EAAA+G,aAAA,WACA1I,GAAAU,EAAAR,MAGAF,GAGAlB,aAAA,SAAAvF,GAKA,OAHAA,EAAAxB,IAAA,iBACAwB,EAAAxB,IAAA,eASAhH,EAAA,yBAAA,IAAA,WCoCA,OA9GAsL,WAAA3K,OAAAkF,OAAA,CAEAgS,WAAA,GAEAC,cAAA,GAEAjR,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAyH,UACAzH,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAAgR,mBAGAvJ,SAAA,SAAAqJ,GACA9Q,KAAA8Q,WAAAA,EAEA,IAAA3D,EAAA2D,EAAA7Q,IAAA,UACAD,KAAAM,SAAAC,QAAAC,QAAA,QAAA2M,GAAA,SAAAnN,KAAAiR,cAEAjR,KAAAM,SAAAC,QAAAC,QAAA,WAAA,oBAAAR,KAAAkR,iBACAlR,KAAAM,SAAAC,QAAAC,QAAA,YAAA,oBAAAR,KAAAmR,mBAGAH,iBAAA,SAAAI,GACApR,KAAAqR,aAAAD,EAAAnR,IAAA,kBAGAgR,aAAA,SAAA5Q,GAEA,IAAAiR,EAAAjR,EAAAJ,IAAA,UAAA0B,OAEA4P,EAAA,GACAC,EAAA,GAEA,IAAA,IAAAvS,KAAAqS,EAAA,CAEA,IAAAtD,EAAAsD,EAAArS,GACAyG,EAAAsI,EAAA/N,IAAA,MAGA,GAAA,WAAA+N,EAAA/N,IAAA,QACAsR,EAAA7L,GAAAsI,OACA,GAAA,YAAAA,EAAA/N,IAAA,QAAA,CAEAuR,EADAC,EAAAzD,EAAA/N,IAAA,uBACA+N,GAIA,IAAA,IAAAyD,KAAAF,EAAA,CAEA,IAAAG,EAAAH,EAAAE,GAEAE,EAAAzI,OAAAwI,EAAAzR,IAAA,kBAEAuR,EAAAC,GAEAE,GAAAH,EAAAC,GAAAxR,IAAA,SAEA,GAAAyR,EAAAzR,IAAA,0BAEA0R,GAAAD,EAAAzR,IAAA,UAIAD,KAAA+Q,cAAAU,GAAAE,EAGA3R,KAAA4R,eAGAV,gBAAA,SAAAjS,GACA,IAAAwS,EAAAxS,EAAAgB,IAAA,MACA0R,EAAAzI,OAAAjK,EAAAgB,IAAA,kBAEA4R,EADA3I,OAAAjK,EAAAgB,IAAA,UACA0R,EACA3R,KAAA+Q,cAAAU,GAAAI,EAEA7R,KAAA4R,eAGAT,iBAAA,SAAAlS,GACA,IAAAwS,EAAAxS,EAAAgB,IAAA,sBACA6R,EAAAvR,QAAAC,QAAA,UAAA0C,QAAA,YAAAuO,GACAE,EAAAzI,OAAA4I,EAAA7R,IAAA,kBAIA4R,EAFA3I,OAAAjK,EAAAgB,IAAA,UAEA0R,EAEA3R,KAAA+Q,cAAAU,GAAAI,EAEA7R,KAAA4R,eAGAA,YAAA,WAEA,IAAAC,EAAA,EAEA,IAAA,IAAAH,KAAA1R,KAAA+Q,cACAc,GAAA3I,OAAAlJ,KAAA+Q,cAAAW,IAGAG,GAAA7R,KAAAqR,eAEAQ,GAAA3I,OAAAlJ,KAAAqR,eAGArR,KAAA8Q,WAAA5Q,IAAA,QAAA2R,EAAAE,QAAA,IACA/R,KAAA8Q,WAAA/P,QAAA,kBAMA9H,EAAA,4BAAA,IAAA,WC/FA,OAjBAsL,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAAgS,mBAGAA,iBAAA,SAAA/S,GACA,IAAAwS,EAAAxS,EAAAgB,IAAA,sBACAyR,EAAAnR,QAAAC,QAAA,UAAA0C,QAAA,YAAAuO,GAEAC,GACAA,EAAAxR,IAAA,uBAAA,SCPAjH,EAAA,mBAAA,IAAA,WAkCA,OAjCA2F,SAAAC,MAAAC,OAAA,CACAgB,WAAA,WAEAE,KAAAE,IAAA,SAAAF,KAAAG,WAAAC,QAAAC,UAAAJ,IAAA,OAEAD,KAAAE,IAAA,SAAA,IAEAK,QAAAC,QAAA,QAAAO,QAAA,aAAAf,MAEAA,KAAA4B,GAAA,eAAA5B,KAAAY,YAAAZ,OAWAgF,YAAA,SAAAvD,GACAlB,QAAAC,QAAA,QAAAO,QAAA,eAAAf,KAAAyB,IAGAwQ,WAAA,SAAAC,GACA3R,QAAAC,QAAA,QAAAO,QAAA,cAAAf,KAAAkS,IAGAtR,YAAA,WACAL,QAAAC,QAAA,QAAAO,QAAA,eAAAf,YAOA/G,EAAA,wBAAA,CAAA,qBAAA,SAAAkZ,GCpBA,OArBAvT,SAAAI,WAAAF,OAAA,CACAG,MAAAkT,EACAzQ,WAAA,QAEA5B,WAAA,SAAA6B,EAAAvB,GACAJ,KAAAI,QAAAA,EACA2B,EAAAC,KAAAL,GAAA,SAAA1C,QACA,IAAAA,EAAAmT,MACA,KAAAnT,EAAAmT,IAAAC,WAAAhE,SAAApP,EAAAmT,IAAA,GACAnT,EAAAmT,IAAArI,SAAA9K,EAAAmT,SAKA7R,QAAAC,QAAA,QAAAJ,EAAAC,UAAAJ,IAAA,OAAAqD,MAAA,WAAAtD,KAAAsS,QAAAtS,OAGAsS,QAAA,SAAAxO,GACA,OAAA9D,KAAA+D,UAAA,CAAAxJ,KAAAuJ,UChBA7K,EAAA,2BAAA,CAAA,0BAAA,SAAAsZ,GA8fA,OA7fAhO,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAwS,MAAA,GACAxS,KAAAyS,cAAA,GAEAzS,KAAAM,SAAAC,QAAAC,QAAA,QAAA,SAAAR,KAAA0S,eAGA1S,KAAAM,SAAAC,QAAAC,QAAA,UAAA,mBAAAR,KAAA2S,YAMA3S,KAAAM,SAAAC,QAAAC,QAAA,QAAA,eAAAR,KAAAgF,aAGAhF,KAAAM,SAAAC,QAAAC,QAAA,QAAA,cAAAR,KAAAiS,YAMA,IAAApI,EAAA7J,KACA+B,EAAAC,KAAAsG,WAAAsK,eAAAC,cAAA,SAAAC,GACAjJ,EAAAvJ,SAAAC,QAAAC,QAAA,UAAAsS,GAAA,aAAAjJ,EAAAkJ,qBAIA/S,KAAAM,SAAAC,QAAAC,QAAA,QAAA,eAAAR,KAAAgT,qBAGAhT,KAAAiT,KAAA,IAUAN,WAAA,SAAA9Q,QACA,IAAAA,EAAAzB,QAAA,WACAJ,KAAA0S,cAAA7Q,EAAAzB,QAAAC,YAWAqS,cAAA,SAAArS,GACA,IAAA6S,EAAA,IAAAX,EAAAlS,EAAAJ,IAAA,YAAA4S,aAAA,CAAAxS,UAAAA,IACAL,KAAAwS,MAAAnS,EAAAJ,IAAA,OAAAiT,EACA,IAAArJ,EAAA7J,KAEA+B,EAAAC,KAAAkR,EAAAvR,QAAA,SAAAwR,GAQAtJ,EAAAoJ,KAAAE,EAAAlT,IAAA,UAAA,EAEA4J,EAAAuJ,UAAAD,OAgBAC,UAAA,SAAAD,GAEA,IAAAtJ,EAAA7J,KAEAqT,EAAAF,EAAAlT,IAAA,MAEAqT,EAAAD,EASA1E,GAPAwE,EAAAlT,IAAA,QAOAoT,EAAAE,MAAA,IAAAC,OAAA,oBACA7E,IAQAA,EAAAA,EAAArT,KAAA,SAAA0S,GAEA,IAAAlK,EAAAkK,EAAApS,QAAA,SAAA,IAAAA,QAAA,IAAA,IAAAA,QAAA,UAAA,IAKA,GAFA6F,WAAAlB,QAAAC,QAAA,QAAA2S,EAAAlT,IAAA,WAAAiD,QAAA,iBAAAY,GAEA,oBAAArC,WAAA,CAEAA,WAAAvB,IAAA,SAAA,GAGAuB,WAAAG,GAAA,eAAAuR,EAAAnO,YAAAmO,GAEA,IAAA/L,EAAAyC,EAAA7C,aAAAvF,YAEAoI,EAAA4J,iBAAAN,EAAArP,EAAAsD,GAEAkM,EAAAzJ,EAAA6J,WAAA,QAAA5P,EAAAsD,EAAAkM,QAKA,IAAAd,EAAAa,EAAAE,MAAA,IAAAC,OAAA,kBACAhB,IAQAA,EAAAA,EAAAlX,KAAA,SAAA6N,GAEA,IAAA5O,EAAA4O,EAAAvN,QAAA,IAAA,IAAAA,QAAA,SAAA,IAEAsW,EAAAiB,EAAAhT,WAAA4D,UAAA,CAAAxJ,KAAAA,IAEA,QAAA,IAAA2X,EAAA,CAGAA,EAAAtQ,GAAA,eAAAuR,EAAAlB,WAAAkB,GAEA,IAAA/L,EAAA8K,EAAAjS,IAAA,SAEAqT,EAAAzJ,EAAA6J,WAAA,OAAAnZ,EAAA6M,EAAAkM,QAQAA,GAFAA,EAAAA,EAAA1X,QAAA,0BAAA,IAEAA,QAAA,YAAA,IAEA,IACAoE,KAAAoN,MAAA,uBAAAkG,EAAA,OAAAtT,KAAA2T,qBAAAL,GAAA,YACAH,EAAAjT,IAAA,QAAAgJ,OAAA0K,KAAAC,KAAA7T,KAAA2T,qBAAAL,KAAAvB,QAAAoB,EAAAlT,IAAA,SACA,MAAAvC,GAEAkQ,QAAAC,IAAAnQ,GAIA,QAAAyV,EAAAlT,IAAA,UAAAkT,EAAAjT,IAAA,QAAA,MAeAuT,iBAAA,SAAAN,EAAArP,EAAAsD,GACA,IAAAuH,EAAAwE,EAAAlT,IAAA,UACA0O,EAAA7K,GAAAsD,EACA+L,EAAAjT,IAAA,SAAAyO,IAaA3H,aAAA,SAAAvF,GAKA,IAAA9E,EAAA4D,QAAAC,QAAAiB,EAAAxB,IAAA,SAAAiD,QAAA,gBAAAzB,GAGA2F,EAAA3F,EAAAxB,IAAA,cACA,IAAAtD,IACAA,GAAA,IAAAA,KAEAyK,EAAAzK,GAIA,IAAAmX,EAAA,IAAAC,EAAAC,OAAAC,WAAAD,OAAAE,cAAAF,OAAAG,eACAC,EAAAN,EAAAO,cAAAjN,GACAkN,EAAAR,EAAAS,cAAAnN,GAaA,OAVAzK,OADA,IAAAyX,GAAAzV,OAAA6V,UAAAJ,GACAE,EAEA,EAIA7S,EAAAxB,IAAA,aACAtD,EAAA,GAGAA,GAgBA+W,WAAA,SAAA3T,EAAA+D,EAAAsD,EAAAiM,GACAA,EAAAA,GAAAF,UAAAlT,IAAA,MAEAwU,IAAA,IAAA1U,EAAA,IAAA+D,EAAA,IACA,IAAA4Q,EAAA,IAAAlB,OAAAiB,IAAA,KAEAE,QAAA,IAAA5U,EAAA,IAAA+D,EAAA,SACA,IAAA8Q,EAAA,IAAApB,OAAAmB,QAAA,KAKA,OAFAtB,GADAA,EAAAA,EAAAzX,QAAA8Y,EAAAtN,IACAxL,QAAAgZ,EAAAxN,IAYAyN,eAAA,SAAA1B,GACA,IAAAE,EAAAF,EAAAlT,IAAA,MACA4J,EAAA7J,KACA+B,EAAAC,KAAAmR,EAAAlT,IAAA,WAAA,SAAAtD,EAAAmH,GACAuP,EAAAxJ,EAAA6J,WAAA,QAAA5P,EAAAnH,EAAA0W,MAIA,IAAAb,EAAAa,EAAAE,MAAA,IAAAC,OAAA,kBAYA,OAXAhB,GACAzQ,EAAAC,KAAAwQ,GAAA,SAAArJ,GAEA,IAAA5O,EAAA4O,EAAAvN,QAAA,IAAA,IAAAA,QAAA,SAAA,IACAsW,EAAAiB,EAAAhT,WAAA4D,UAAA,CAAAxJ,KAAAA,IACA,QAAA,IAAA2X,EAAA,CACA,IAAA4C,EAAA,IAAAtB,OAAArK,EAAA,KACAkK,EAAAA,EAAAzX,QAAAkZ,EAAA5C,EAAAjS,IAAA,cAIAoT,GAWArO,YAAA,SAAAmO,EAAA1R,GAEA,IAAAqC,EAAArC,EAAAxB,IAAA,OACAtD,EAAAqD,KAAAgH,aAAAvF,GAEAzB,KAAAyT,iBAAAN,EAAArP,EAAAnH,GACA,IAAA2W,EAAAtT,KAAA6U,eAAA1B,GAIAG,GADAA,EAAAA,EAAA1X,QAAA,0BAAA,MACAA,QAAA,YAAA,IACA,IACAoE,KAAAoN,MAAA,uBAAAkG,EAAA,OAAAtT,KAAA2T,qBAAAL,GAAA,mBACAH,EAAAjT,IAAA,QAAAgJ,OAAA0K,KAAAC,KAAA7T,KAAA2T,qBAAAL,KAAAvB,QAAAoB,EAAAlT,IAAA,SACA,MAAAvC,GACAsC,KAAAoN,SAAAQ,QAAAC,IAAAnQ,GAEA,QAAAyV,EAAAlT,IAAA,UAAAkT,EAAAjT,IAAA,QAAA,MAMA6S,iBAAA,SAAAtR,GAEA,GAAAA,EAAAxB,IAAA,YAAA,iBAAAwB,EAAAxB,IAAA,WAAA,CAEA,IAAAuS,EAAA/Q,EAAAxB,IAAA,WAAAsT,MAAA,IAAAC,OAAA,kBACAhB,GACAzQ,EAAAC,KAAAwQ,GAAA,SAAAuC,GACAA,EAAAA,EAAAnZ,QAAA,SAAA,IAAAA,QAAA,IAAA,IAAAA,QAAA,KAAA,IACAoE,KAAAyS,cAAAsC,GAAA/U,KAAAyS,cAAAsC,IAAA,GACA/U,KAAAyS,cAAAsC,GAAAxY,KAAAkF,KACAzB,QAIAgT,oBAAA,SAAAG,GACA,IAAAtJ,EAAA7J,UACA,IAAAA,KAAAyS,cAAAU,EAAAlT,IAAA,UACA8B,EAAAC,KAAAhC,KAAAyS,cAAAU,EAAAlT,IAAA,UAAA,SAAAwB,GAEA,IAAA9E,EAAA,GAmBAqY,GAZArY,EADA,SAAA8E,EAAAxB,IAAA,QACAwB,EAAAxB,IAAA,SAGAwB,EAAAxB,IAAA,YASAsT,MAAA,IAAAC,OAAA,wCACAzR,EAAAC,KAAAgT,GAAA,SAAAC,GAEA,IAAAC,EAAA,IAAAD,EAAArZ,QAAA,mBACA,IAAAA,QAAA,kBAAA,IAAA,IAEAe,EAAAA,EAAAf,QAAAqZ,EAAAC,MAEA,IAAA1C,EAAA7V,EAAA4W,MAAA,IAAAC,OAAA,kBACAzR,EAAAC,KAAAwQ,GAAA,SAAArJ,GAGA,IAAA5O,EAAA4O,EAAAvN,QAAA,IAAA,IAAAA,QAAA,SAAA,IAAAA,QAAA,KAAA,IAWAuX,EAAAtJ,EAAA2I,MAAA/Q,EAAAxB,IAAA,WAAA8D,UAAA,CAAAxJ,KAAAA,IACAua,EAAA,IAAAtB,OAAArK,EAAA,KACA/B,EAAA+L,EAAAlT,IAAA,cAMA,IAAA,IACAmH,EAAAyC,EAAAsL,sBAAA/N,EAAA+L,IAWAxW,EADA,SAAA8E,EAAAxB,IAAA,QACAtD,EAAAf,QAAAkZ,EAAA,wBAAAva,EAAA,KACA6M,EAAA,WAEAA,KAIA3F,EAAAvB,IAAA,QAAAvD,GACAkN,EAAAoJ,KAAAE,EAAAlT,IAAA,UAEAwB,EAAAV,QAAA,YAEA8I,EAAAoJ,KAAAE,EAAAlT,IAAA,UAAA,MAKAqS,QAAA,SAAA/X,EAAA4S,GACA,OAAAnN,KAAAwS,MAAArF,GAAApJ,UAAA,CAAAxJ,KAAAA,KAGA0X,WAAA,SAAAkB,EAAAjB,GACA,IAAAoB,EAAAtT,KAAA6U,eAAA1B,GAGAG,GADAA,EAAAA,EAAA1X,QAAA,IAAA,IAAAA,QAAA,IAAA,KACAA,QAAA,YAAA,IACA,IACAoE,KAAAoN,MAAA,uBAAAkG,EAAA,OAAAtT,KAAA2T,qBAAAL,GAAA,kBACAH,EAAAjT,IAAA,QAAAgJ,OAAA0K,KAAAC,KAAA7T,KAAA2T,qBAAAL,KAAAvB,QAAAoB,EAAAlT,IAAA,SACA,MAAAvC,GACAkQ,QAAAC,IAAAnQ,GAEA,QAAAyV,EAAAlT,IAAA,UAAAkT,EAAAjT,IAAA,QAAA,MAUAiV,sBAAA,SAAAC,EAAAjC,GAmBA,OAjBA,IAAAY,EAAAC,OAAAC,WAAAD,OAAAE,cAAAF,OAAAG,eAEAI,cAAAa,EAAAjC,EAAAlT,IAAA,SAkBA0T,qBAAA,SAAAN,GACA,IAAAgC,EAAA,GACAC,EAAA,GACAC,EAAA,UACAzB,EAAA,IAAAC,EAAAC,OAAAC,WAAAD,OAAAE,cAAAF,OAAAG,eAuBA,OApBAd,GADAA,EAAAA,EAAAzX,QAAA,MAAA,KACAA,QAAA,UAAA,KACAP,MAAA,IAEAma,SAAA,SAAAC,GAEAF,EAAA5Z,KAAA8Z,GACAH,GAAAG,GAGA,EAAAH,EAAA7Z,SACA4Z,GAAAvB,EAAAO,cAAAiB,GACAA,EAAA,IAEAD,GAAAI,MAIA,EAAAH,EAAA7Z,SACA4Z,GAAAvB,EAAAO,cAAAiB,IAEAD,GAGAjI,MAAA,SAAAI,GACA2B,OAAAuG,qBAAA9H,QAAAC,IAAAL,SAQAvU,EAAA,kCAAA,IAAA,WCtcA,OA7DAsL,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAA1B,SAAA+W,MAAAnV,QAAA,cAAA,OAAAR,KAAA4V,sBAGAA,oBAAA,SAAAC,EAAApU,GAkBA,GAZAoU,EAAAC,QAAA,GACAD,EAAAC,QAAAC,GAAA,GAGAxV,QAAAC,QAAA,WAAAO,QAAA,OAAA8U,EAAApU,QAGA,IAAAoU,EAAAC,QAAAC,GAAAC,cACAH,EAAA3V,IAAA,UAAA,CAAA2V,EAAAC,QAAAC,GAAAC,oBAIA,IAAAH,EAAAC,QAAAC,GAAAE,WAAA,IAAAJ,EAAAC,QAAAC,GAAAG,SAAA,CAEA,IAAAC,EAAAN,EAAApc,OAAA0c,YAEA,IAAAN,EAAAC,QAAAC,GAAAG,WACAC,EAAAC,eAAAP,EAAAC,QAAAC,GAAAG,eAGA,IAAAL,EAAAC,QAAAC,GAAAE,YACA,IAAAJ,EAAAC,QAAAC,GAAAE,KAAAI,WACAF,EAAAE,SAAAC,SAAAT,EAAAC,QAAAC,GAAAE,KAAAI,eAGA,IAAAR,EAAAC,QAAAC,GAAAE,KAAAM,gBACAJ,EAAAE,SAAAG,UAAAX,EAAAC,QAAAC,GAAAE,KAAAM,oBAGA,IAAAV,EAAAC,QAAAC,GAAAE,KAAAQ,QACA9X,OAAA,4CAAAqD,MAAA,WACAhC,KAAA0W,KAAAb,EAAAC,QAAAC,GAAAE,KAAAQ,OAAAzW,KAAArD,WAKAkZ,EAAA3V,IAAA,SAAAiW,GAIAvc,OAAA+c,KAAAd,EAAAC,QAAAC,IAAAta,OAAA,IACAmS,QAAAC,IAAA,yDAAA,gCACAD,QAAAC,IAAA,0MASA5U,EAAA,wBAAA,IAAA,WC0NA,OAzRAsL,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,QAAA,aAAAR,KAAA4W,mBACA5W,KAAAM,SAAAC,QAAAC,QAAA,QAAA,cAAAR,KAAA6W,iBAGAD,kBAAA,SAAA3X,GACAA,EAAAiB,IAAA,oBAAAF,KAAA8W,mBACA7X,EAAAiB,IAAA,sBAAAF,KAAA+W,qBACA9X,EAAAiB,IAAA,kBAAAF,KAAAgX,iBACA/X,EAAAiB,IAAA,gBAAAF,KAAAqH,eAEApI,EAAAuC,SAAAxB,KAAAwB,UAGAsV,kBAAA,WACA,OAAA9W,KAAAiX,eAGAF,oBAAA,WACA,OAAA/W,KAAAkX,iBAGAF,gBAAA,WACA,QAAA,IAAAhX,KAAAmX,UAAA,GAAAnX,KAAAmX,SAIA,MAAA,mIAGAN,eAAA,SAAAO,GACAA,EAAAnY,MAAAiB,IAAA,KAAAkX,EAAAlS,IACA,IAAAA,EAAAvG,OAAAyY,EAAAlS,IAAAuB,KAAA,eAAA,GAIA,GAHA2Q,EAAA9W,SAAAC,QAAAC,QAAA,QAAA4W,EAAAnY,MAAAgB,IAAA,WAAA,gBAAAD,KAAAiB,aAAAmW,QAGA,IAAAA,EAAAnY,MAAAgB,IAAA,cAAA,aAAAmX,EAAAnY,MAAAgB,IAAA,aAEA,OADAtB,OAAAuG,GAAAmS,QACA,EAGA,IAAAC,EAAAF,EAAAnY,MAAAgB,IAAA,eAGA,IAAAqX,GAAA,WAAAA,IACAA,EAAAtX,KAAAuX,kBAAAvD,OAAAsD,YAEAF,EAAAnY,MAAAiB,IAAA,cAAAoX,IAGA,IAAAE,EAAA,CACAlY,QAAAX,OAAAuG,GAAAhE,KAAA,SACA9B,YAAAgY,EAAAnY,MAAAgB,IAAA,eACAwX,UAAA,SAAAC,EAAAzR,GACA,OAAAC,OAAAwR,EAAAzR,GAAA,GAAA0R,UAEAC,WAAA,SAAAC,EAAA5R,EAAAkQ,GACA,OAAAjQ,OAAA2R,GAAA5R,OAAAA,IAEAqR,WAAAA,EACAQ,UAAAR,EACAS,UAAA,EACAC,eAAAV,EACAW,KAAA,SACAC,YAAA,EACAC,cAAA,OACAhC,OAAA,CACAM,OAAA,CACAD,UAAAxC,OAAAoE,YACA9B,SAAAtC,OAAAyC,QAEAJ,SAAA,CACAG,UAAAxC,OAAAuC,cACAD,SAAAtC,OAAAqC,UAEAD,eAAApC,OAAAqE,cAKA,IAAAC,EAAA/X,QAAAC,QAAA,aAAA0C,QAAA,kBAAAsU,EAAAJ,QACA,IAAAkB,IACAd,EAAAc,GAGA,IAAAzC,EAAA0C,UAAArT,EAAAsS,GAEA,GAAAJ,EAAAnY,MAAAgB,IAAA,kBACA4V,EAAA2C,QAAAtS,SAAAD,OAAAqR,IACAF,EAAAnY,MAAAiB,IAAA,QAAAgG,SAAAD,OAAAqR,KAIA/W,QAAAC,QAAA,cAAAO,QAAA,OAAA8U,EAAAuB,EAAAnY,MAAAmY,GAEA7W,QAAAC,QAAA,aAAAO,QAAA,OAAA8U,EAAAuB,EAAAnY,MAAAmY,IAGAnW,aAAA,SAAAZ,GACA,GAAA,aAAAL,KAAAf,MAAAgB,IAAA,aACA,OAAA,EAEA,IAAAwY,EAAA9Z,OAAAqB,KAAAkF,IAAAuB,KAAA,SAAAtB,MACAuT,EAAA/Z,OAAAqB,KAAAkF,IAAAuB,KAAA,WAAAtB,MACAwT,EAAAha,OAAAqB,KAAAkF,IAAAuB,KAAA,SAAAtB,MACAyT,EAAA5Y,KAAAf,MAAAgB,IAAA,SACA4X,GAAA,EAGAA,EADA9V,EAAA8W,SAAAD,GACAA,EAAAf,KAEAe,EAGA,IAAAE,EAAA,CACAjB,KAAAA,EACAY,KAAAA,EACAC,OAAAA,EACAC,KAAAA,GAGA3Y,KAAAf,MAAAiB,IAAA,QAAA4Y,IAGAC,aAAA,SAAAtX,GACA,IACAuX,EAAAvX,EAAAxB,IAAA,oBACAgZ,EAAAxX,EAAAxB,IAAA,kBAEA,OAAA+Y,GAAAC,EACA,CAAAD,EAAAC,GACAD,EAEA,CAAAA,EADAC,EAAAD,EAPA,IASAC,EAEA,CADAD,EAAAC,EAVA,GAWAA,GAXA,IAiBAC,WAAA,SAAAzX,GACA,IACAuX,EAAAvX,EAAAxB,IAAA,oBAEA,OAAA+Y,EACA,IAAAG,KAAAH,EAAA,EAAA,GAJA,MAUAI,WAAA,SAAA3X,GACA,IACAwX,EAAAxX,EAAAxB,IAAA,kBAEA,OAAAgZ,EACA,IAAAE,KAAAF,EAAA,GAAA,IAJA,MAUA1B,kBAAA,SAAAD,GAyDA,OAFAA,GADAA,GADAA,GAHAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAHAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAHAA,GADAA,GADAA,GADAA,GAHAA,GADAA,GADAA,GADAA,GADAA,GAHAA,GAHAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,EAAAA,EAAA1b,QAAA,IAAA,QACAA,QAAA,IAAA,OACAA,QAAA,IAAA,SACAA,QAAA,IAAA,MACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,MACAA,QAAA,IAAA,KAGAA,QAAA,IAAA,MAGAA,QAAA,IAAA,QACAA,QAAA,IAAA,SACAA,QAAA,IAAA,OACAA,QAAA,IAAA,MACAA,QAAA,IAAA,KAGAA,QAAA,IAAA,KACAA,QAAA,IAAA,SACAA,QAAA,IAAA,SACAA,QAAA,IAAA,OAGAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KAGAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KAGAA,QAAA,IAAA,KACAA,QAAA,IAAA,KACAA,QAAA,IAAA,KAKAyL,cAAA,SAAA/H,GAIA,MAHA,iBAAAU,KAAAqZ,YACA/Z,GAAA,kBAEAA,GAKAkC,SAAA,WAEA,GAAA,aAAAxB,KAAAC,IAAA,aACA,OAAAD,KAAAC,IAAA,SAGA,IAAAiF,EAAAlF,KAAAC,IAAA,MACAwY,EAAA9Z,OAAAuG,GAAAuB,KAAA,SAAAtB,MACAuT,EAAA/Z,OAAAuG,GAAAuB,KAAA,WAAAtB,MACAwT,EAAAha,OAAAuG,GAAAuB,KAAA,SAAAtB,MACAyT,EAAA5Y,KAAAC,IAAA,SACA4X,GAAA,EAGAA,EADA9V,EAAA8W,SAAAD,GACAA,EAAAf,KAEAe,EAGA,IAAAjc,EAAA,GAcA,YAZA,IAAAkb,IACAlb,GAAAkb,QAGA,IAAAY,QAAA,IAAAC,IACA/b,GAAA,IAAA8b,EAAA,IAAAC,QAGA,IAAAC,IACAhc,GAAA,IAAAgc,GAGAhc,QAgBA1D,EAAA,6BAAA,IAAA,WC9PA,OA9BAsL,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,aAAA,aAAAR,KAAAsZ,eACAtZ,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAuZ,iBAGAD,cAAA,SAAAra,GACAsB,QAAAC,QAAA,aAAA8C,MAAA,kBAAAtD,KAAAwZ,eAAAxZ,KAAAf,EAAArB,KAGA4b,eAAA,SAAA5M,EAAAlH,GACA,IAAAzG,EAAAsB,QAAAC,QAAA,UAAA0C,QAAA,YAAAwC,GACAzG,EAAAiB,IAAA,QAAA0M,GACArM,QAAAC,QAAA,UAAA0C,QAAA,eAAAjE,EAAAgB,IAAA,MAAA,mBAGAsZ,eAAA,WACA,IAAAE,EAAA,EACA9a,OAAA,gBAAAqD,MAAA,WACA,IACA0X,WAAAlJ,MAAAiJ,GACA,MAAA/b,GACAkQ,QAAAC,IAAA,6CAEA4L,aAOAxgB,EAAA,+BAAA,IAAA,WCqCA,OArEAsL,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,gBAAA,aAAAR,KAAAsZ,gBAGAA,cAAA,SAAAra,GACA,MAAAkO,EAAAlO,EAAAgB,IAAA,UACA,IACAM,QAAAC,QAAA,QAAA2M,GAAApM,QAAA,iBAAA9B,GACAya,WAAAC,OAAA,WACAD,WAAAE,QAAA3a,EAAAgB,IAAA,YAAA,CACA4Z,OAAA,aACAC,MAAA,SAAAC,GACA9a,EAAAiB,IAAA,QAAA6Z,GACAxZ,QAAAC,QAAA,QAAA2M,GAAApM,QAAA,gBAAA9B,SAGA,MAAAvB,GAEAiB,OAAA2O,UAAA1L,GAAA,eAAAoY,IAEA,IAGAC,EAHAC,EAAAC,6BAIAlb,EAAAkB,WAAAwB,OAAA6T,SAAA/T,IACA,WAAAA,EAAAxB,IAAA,UACAga,EAAAxY,EAAAxB,IAAA,UAIAM,QAAAC,QAAA,UAAA0C,QAAA,YAAA+W,EAAA,uBAAAhb,EAAAkB,WAAAC,QAAAC,UAAAJ,IAAA,YAAAma,yBAGApa,KAAAqa,gCAAApb,EAAAib,EAAAI,SAAAL,EAAAD,QAIAK,gCAAA,SAAApb,EAAAqb,EAAAL,EAAAD,GAGA,KADAM,EAAA7e,QAAA,GAAA6e,EAAAC,SAAA,mBAAAD,EAAA7e,QAAA,GACA,CACA,IAAA+e,EAAAlN,SAAAC,cAAA,OACAiN,EAAAC,aAAA,KAAA,8BACAD,EAAAE,WAAAzb,EAAAkB,WAAAC,QAAAC,UAAAJ,IAAA,YAAA0a,sBASA,IAAAC,EAAA,IAAAC,YAAA,kBAAA,CAAAC,OAPA,CACAR,SAAAA,EACAS,QAAAP,EACAP,cAAAA,EACAD,WAAAA,KAIA1M,SAAA0N,cAAAJ,GAGA,MAAAK,EAAA3N,SAAA4N,uBAAA,iCACAlT,MAAAnO,UAAAG,MAAAK,KAAA4gB,GACAzF,SAAAzH,IACAA,EAAAoN,OAAAX,aAUAvhB,EAAA,wBAAA,IAAA,WCHA,OApEAsL,WAAA3K,OAAAkF,OAAA,CAEAsc,WAAA,GACAC,iBAAA,GAEAvb,WAAA,WACAE,KAAAM,SAAA1B,SAAA+W,MAAAnV,QAAA,eAAA,aAAAR,KAAAsb,6BAGAA,2BAAA,SAAA7Z,GACAzB,KAAAob,WAAA7e,KAAAkF,GAEA,IAAA0L,EAAA1L,EAAAxB,IAAA,UAEAD,KAAAM,SAAAC,QAAAC,QAAA,QAAA2M,GAAA,cAAA,SAAA9M,GAEA,IAAAkb,EAAA9Z,EAAAxB,IAAA,WAAAsT,MAAA,IAAAC,OAAA,mBACA+H,IAEAxZ,EAAAC,KAAAuZ,GAAA,SAAAC,GACA,IAAAC,EAAAD,EAAA5f,QAAA,UAAA,IAAAA,QAAA,IAAA,IACA6F,EAAApB,EAAAJ,IAAA,UAAA8D,UAAA,CAAAD,IAAA2X,SACA,IAAAha,IAEAzB,KAAAqb,iBAAA9e,KAAAkF,GACAzB,KAAAM,SAAAC,QAAAC,QAAA,SAAAiB,EAAAxB,IAAA,OAAA,oBAAAD,KAAA0b,yBACA1b,MAGAA,KAAA0b,0BACA1b,OAGA0b,qBAAA,SAAAja,GACAM,EAAAC,KAAAhC,KAAAob,YAAA,SAAAO,GACA,IAAAhf,EAAAgf,EAAA1b,IAAA,SACA8B,EAAAC,KAAAhC,KAAAqb,kBAAA,SAAA5Z,GAKA,IAAAuT,EAAArY,EAAA4W,MAAA,IAAAC,OAAA,yCACAzR,EAAAC,KAAAgT,GAAA,SAAAC,IAKA,EAAAA,EAAAjZ,QAAA,mBAAAyF,EAAAxB,IAAA,UACAtD,EAAAA,EAAAf,QAAAqZ,EAAA,UAAAxT,EAAAxB,IAAA,OAAA,SAIA,IAAAub,EAAA,UAAA/Z,EAAAxB,IAAA,OAAA,IAKAtD,EAAAA,EAAAf,QAAA4f,EAAA,yBACA/Z,EAAAxB,IAAA,OAAA,KACAwB,EAAAD,WAAA,aACAxB,MACA2b,EAAAzb,IAAA,QAAAvD,GACAgf,EAAA5a,QAAA,cACAf,YC7DA/G,EAAA,uBAAA,IAAA,WAkBA,OAjBAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,QAAA,cAAAR,KAAA4b,cAEArb,QAAAC,QAAA,QAAA8C,MAAA,YAAAtD,KAAA4b,eAGAA,aAAA,SAAAxE,GACAzY,OAAAyY,EAAAlS,IAAAuB,KAAA,YAAAzE,MAAA,WACArD,OAAAqB,MAAA6b,KAAA,UAAA,CACAC,MAAA,gBACAC,QAAApd,OAAAqB,MAAA8I,KAAA,mBAQA7P,EAAA,2BAAA,IAAA,WCLA,OAjBAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAS,QAAAC,QAAA,WAAA8C,MAAA,gBAAAtD,KAAAgH,aAAAhH,OAGAgH,aAAA,SAAAvF,GACA,GAAA,YAAAA,EAAAxB,IAAA,QAAA,CACA,IAAA0E,EAAApE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WACA+b,OAAA,IAAArX,EAAAA,EAAA1E,IAAA,kBAAA,GACAgc,EAAAtd,OAAA,gBAAAuJ,KAAA8T,GAAAtF,OACA,OAAAjV,EAAAxB,IAAA,SAAArE,QAAAqgB,EAAA,IAGA,OAAAxa,EAAAxB,IAAA,eCXAhH,EAAA,+BAAA,IAAA,WAwOA,OAvOAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,cAAAR,KAAAkc,kBACAlc,KAAAM,SAAAC,QAAAC,QAAA,YAAA,cAAAR,KAAAmc,YAGAnc,KAAAoc,iBAEApc,KAAAqc,eAAA,QAEA,IAAA1d,OAAA2d,aAEA3d,OAAA2d,WAAAlc,QAAAmc,MAAA,CACAC,MAAA,uCACAC,YAAA,yCACAC,aAAA,qCACAC,UAAA,uCACAC,WAAA,wCACAC,OAAA,oCACAC,QAAA,qCAEAC,KAAA,kCACAC,MAAA,iCAEAC,MAAA,8BACAC,KAAA,kCACAC,OAAA,8CAGAC,OAAA,oCACAC,KAAA,kCACAC,OAAA,oCACAC,MAAA,uCAEAC,MAAA,4BACAC,YAAA,gCAIAC,KAAA,2BACAC,OAAA,sBAIAC,MAAA,mCAGAC,UAAA,uCACAC,KAAA,2BACAC,cAAA,mCAMA7B,iBAAA,SAAA9E,GACA,GAAA,GAAAA,EAAAnY,MAAAgB,IAAA,gBACA,OAAA,EAKA,IAAA4J,EAAA7J,KASAge,EAAA,CACA,CAAA,iBAAA,CAAA,UACA,CAAA,YAAA,CAAA,OAAA,SAAA,YAAA,UACA,CAAA,QAAA,CAAA,KAAA,OACA,CAAA,YAAA,CAAA,cACA,CAAA,cAAA,CAAA,aAAA,WACA,CAAA,QAAA,CAAA,UACA,CAAA,UAAA,CAAA,OAAA,UAGA,GAAA5G,EAAAnY,MAAAgB,IAAA,mBAAA,GAAAge,aAAAC,KACAF,EAAAzhB,KAAA,CAAA,QAAA,CAAA,iBAGAoC,OAAAyY,EAAAlS,IAAAuB,KAAA,eAAA6V,WAAA,CACA0B,QAAAA,EACAG,QAAA,CACAC,WAxBA,SAAAC,GACA,OAAAxU,EAAAuU,WAAAC,IAwBAC,YAtBA,SAAAD,GACA,OAAAxU,EAAAyU,YAAAD,KAuBArO,OAAA,IACAuO,WAAA,CACAzC,MAAA,UACA0C,aAAA,GAEAC,cAAA,EACAC,UAAA,CACAC,SAAA,SAAAjhB,GACA0Z,EAAAnY,MAAAiB,IAAA,QAAAvB,OAAAqB,MAAAsc,WAAA,aAKA,IAAAsC,EAAAjgB,OAAAyY,EAAAlS,IAAAuB,KAAA,gBAAAoY,KAAA,kBAAApY,KAAA,UACAmY,EAAAE,aAAA,WACA,OAAAngB,OAAA,SAAA,CACAogB,MAAApgB,OAAAigB,GAAA1d,KAAA,SACAgH,KAAAlI,KAAAgf,gBAKAZ,WAAA,SAAAC,GACA,IAAAxU,EAAA7J,KACAif,EAAAtgB,OAAA2d,WAAA2C,GACAb,EAAA7d,QAAAC,QAAA,OAAA0C,QAAA,eAAA,4BACAgc,EAAA3e,QAAAC,QAAA,OAAA0C,QAAA,eAAA,8BACA,OAAA+b,EAAAE,YAAA,CACAF,EAAAG,OAAA,CACAC,UAAA,8BACAC,SAAAlB,EAAA,IACAmB,QAAAvL,OAAAwL,2BACAlT,MAAA,SAAA5O,GACAmM,EAAA4V,gBAAA/hB,EAAA2gB,IAEAvV,KAAA,CACA4W,OAAA,cAGAT,EAAAU,SAAA,CACAV,EAAAE,YAAA,CACAS,SAAA,CACAX,EAAAG,OAAA,CACAE,SAAAJ,EAAA,IACAK,QAAA,YAKAM,UAGAvB,YAAA,SAAAD,GACA,IAAAxU,EAAA7J,KACAif,EAAAtgB,OAAA2d,WAAA2C,GACAX,EAAA/d,QAAAC,QAAA,OAAA0C,QAAA,eAAA,6BACA,OAAA+b,EAAAG,OAAA,CACAC,UAAA,kBACAC,SAAAhB,EAAA,IACAiB,QAAAvL,OAAA8L,4BACAxT,MAAA,SAAA5O,GACAmM,EAAAkW,iBAAAriB,EAAA2gB,MAEAwB,UAGAE,iBAAA,SAAAriB,EAAA2gB,GAGA,GAFAA,EAAAnc,OAAA,oBAEAlC,KAAAoc,iBACApc,KAAAoc,iBAAA4D,WADA,CAMAhgB,KAAAoc,iBAAA6D,GAAAC,MAAAC,OAAA/D,iBAAA6D,GAAAC,MAAA,CACAE,MAAApM,OAAAqM,4BACAjB,OAAA,CAAA1I,KAAA,YAGA,IAAA7M,EAAA7J,KAGAA,KAAAoc,iBAAAxa,GAAA,UAAA,WAGA,IAAA0e,EAAAzW,EAAAuS,iBAAAmE,QAAAtgB,IAAA,aAAAoD,QAAAmd,SACA3W,EAAA4W,YAAAH,EAAAjC,MAIAre,KAAAoc,iBAAA4D,SAGAP,gBAAA,SAAA/hB,EAAA2gB,GACA,IAAAqC,EAAArC,EAAAnc,OAAA,sBACAmc,EAAAnc,OAAA,oBACA,IAAAwU,EAAAgK,EAAArO,WACArS,KAAAqc,eAAAgC,EAEA1f,OAAAjB,EAAA4I,QAAAC,QAAA,uCAAA3E,GAAA,oBAAA,SAAAlE,GACA,OAAA,KAGAiB,OAAAjB,EAAA4I,QAAAC,QAAA,uCAAA3E,GAAA,qBAAA,SAAAlE,GACAiB,OAAAjB,EAAA4I,QAAA8C,SAAAA,SAAA3C,KAAA,cAAAtB,IAAAuR,GACA/X,OAAAjB,EAAA4I,QAAA8C,SAAAA,SAAA3C,KAAA,aAAAka,YAIAxE,WAAA,SAAAze,GACA,IAAAkjB,EAAAjiB,OAAAjB,EAAA4I,QAAA8C,SAAA3C,KAAA,cACAoa,EAAAliB,OAAAjB,EAAA4I,QAAA8C,SAAA3C,KAAA,aACAqa,EAAAniB,OAAAjB,EAAA4I,QAAA8C,SAAA3C,KAAA,oBAEA,GADAzG,KAAAqc,eAAAna,OAAA,uBACAvD,OAAAjB,EAAA4I,QAAAya,SAAA,eAAA,CACA,IAAArK,EAAAkK,EAAAzb,MACA6b,EAAAH,EAAA1b,MACA8b,IAAAH,EAAA1mB,KAAA,WACA,GAAAsc,EAAAjb,QAAA,GAAAulB,EAAAvlB,QACAuE,KAAAqc,eAAAna,OAAA,oBAAA,CAAAwU,KAAAA,EAAAsK,IAAAA,EAAAC,YAAAA,IAGAL,EAAAzb,IAAA,IACA0b,EAAA1b,IAAA,IACA2b,EAAA1mB,KAAA,WAAA,GACAuE,OAAAjB,EAAA4I,QAAAC,QAAA,2BAAAW,YAAA,SAGAuZ,YAAA,SAAAP,EAAA7B,GACAA,EAAAnc,OAAA,uBACA,SAAAge,EAAAngB,KACAse,EAAAnc,OAAA,qBAAAge,EAAAc,KAEA3C,EAAAnc,OAAA,oBAAA,CAAAwU,KAAAwJ,EAAAgB,SAAAF,IAAAd,EAAAc,YAQA/nB,EAAA,8BAAA,IAAA,WCtMA,OAtCAsL,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,cAAA,aAAAR,KAAAyH,UACAzH,KAAAM,SAAAC,QAAAC,QAAA,cAAA,cAAAR,KAAAmhB,aAGA1Z,SAAA,SAAAxI,GACAA,EAAAiB,IAAA,gBAAAF,KAAAohB,gBAGAD,WAAA,SAAA/J,GACAzY,OAAAyY,EAAAlS,IAAAuB,KAAA,eAAA4a,UAIAD,cAAA,WAGA,IAFA,IAAAlZ,EAAAoF,SAAAC,cAAA,QAEAtS,EAAA,EAAAA,GAAA+E,KAAAshB,gBAAA,EAAArmB,IAAA,CACA,IAAA2N,EAAArI,QAAAC,QAAA,OAAA0C,QAAA,eAAA,kCACAqe,EAAAtmB,EAAA,EACAkM,EAAA,GAGAnH,KAAArD,OAAA4kB,IACApa,EAAA,WAEA,IAAAqa,EAAA5Y,EAAA,CAAAhL,GAAAoC,KAAApC,GAAA0B,QAAAU,KAAAV,QAAAiiB,IAAAA,EAAApa,QAAAA,EAAAuB,SAAA1I,KAAA0I,WACAR,EAAAyF,YACAL,SAAAmU,cAAAC,yBAAAF,IAGA,OAAAtZ,EAAA8W,gBAQA/lB,EAAA,yBAAA,IAAA,WCAA,OAzCAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAyH,WAGAA,SAAA,SAAAxI,GAEAe,KAAAM,SAAAC,QAAAC,QAAA,SAAAvB,EAAAgB,IAAA,OAAA,cAAAD,KAAAmc,YACAnc,KAAAM,SAAAC,QAAAC,QAAA,SAAAvB,EAAAgB,IAAA,OAAA,cAAAD,KAAA2hB,aAGAxF,WAAA,SAAAze,EAAAuB,GACA,IACAtC,EADAgC,OAAAjB,EAAAkkB,eACAxY,SAAA3C,KAAA,gBAAAtB,MACAnF,KAAA6hB,UAAA5iB,EAAAtC,IAGAglB,WAAA,SAAAzc,EAAAjG,EAAA4G,GACA,IAAAA,GACA7F,KAAA6hB,UAAA5iB,EAAAiG,EAAAC,QAGA0c,UAAA,SAAA5iB,EAAAtC,GACA,GAAAA,EAAA,CACA,IACAmlB,EAAA,CACAzZ,MAAA1L,EACAA,MAAAA,EACAiL,SAAA,GAJA3I,EAAAgB,IAAA,WAMA1D,KAAAulB,GAEA7iB,EAAAgB,IAAA,SACA1D,KAAAI,GAGAsC,EAAA8B,QAAA,mBC5BA9H,EAAA,iCAAA,IAAA,WA8DA,OA7DAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WAIAE,KAAA+hB,YAAA,GACA/hB,KAAAgiB,YAAA,GAKAzhB,QAAAC,QAAA,eAAA8C,MAAA,iBAAAtD,KAAAiiB,cAAAjiB,MACAO,QAAAC,QAAA,eAAA8C,MAAA,iBAAAtD,KAAAkiB,cAAAliB,MAKAO,QAAAC,QAAA,eAAA8C,MAAA,kBAAAtD,KAAAmiB,eAAAniB,MACAO,QAAAC,QAAA,eAAA8C,MAAA,kBAAAtD,KAAAoiB,eAAApiB,MAUAO,QAAAC,QAAA,iBAAA8C,MAAA,iBAAAtD,KAAAiiB,cAAAjiB,MACAO,QAAAC,QAAA,iBAAA8C,MAAA,iBAAAtD,KAAAkiB,cAAAliB,MAMAO,QAAAC,QAAA,iBAAA8C,MAAA,kBAAAtD,KAAAmiB,eAAAniB,MACAO,QAAAC,QAAA,iBAAA8C,MAAA,kBAAAtD,KAAAoiB,eAAApiB,OAOAiiB,cAAA,SAAAlkB,EAAAskB,GACAriB,KAAA+hB,YAAAM,GAAAtkB,GAGAokB,eAAA,WACA,OAAAniB,KAAA+hB,aAGAG,cAAA,SAAAnkB,EAAAskB,GACAriB,KAAAgiB,YAAAK,GAAAtkB,GAGAqkB,eAAA,WACA,OAAApiB,KAAAgiB,kBAOA/oB,EAAA,kBAAA,IAAA,WC+SA,OAvXAsL,WAAA+d,SAAAxjB,OAAA,CACAyjB,QAAA,MAEAziB,WAAA,WACAE,KAAAM,SAAAN,KAAAf,MAAA,WAAAe,KAAA6f,OAAA7f,MACAA,KAAAM,SAAAN,KAAAf,MAAA,yBAAAe,KAAAoB,gBAAApB,MACAA,KAAAM,SAAAN,KAAAf,MAAA,4BAAAe,KAAAsB,mBAAAtB,MACAA,KAAAM,SAAAN,KAAAf,MAAA,iBAAAe,KAAAwiB,kBAAAxiB,MAEAA,KAAA4I,SAAA,kBAAA5I,KAAAf,MAAAgB,IAAA,kBAGAtE,KAAA,SAAAsD,GACA2O,QAAAC,IAAA,0BAGAzM,gBAAA,WACA,IAAAC,EAAArB,KAAAf,MAAAgB,IAAA,mBACA,IAAAoB,IACA1C,OAAAqB,KAAAkF,IAAA+B,SAAA5F,GACArB,KAAAf,MAAAiB,IAAA,kBAAA,MAIAoB,mBAAA,WACA,IAAAD,EAAArB,KAAAf,MAAAgB,IAAA,sBACA,IAAAoB,IACA1C,OAAAqB,KAAAkF,IAAAgC,YAAA7F,GACArB,KAAAf,MAAAiB,IAAA,qBAAA,MAIAsiB,kBAAA,WACA,IAAA3iB,EAAAG,KAAAf,MAAAgB,IAAA,WACAtB,OAAA,iBAAAqB,KAAAkF,IAAAhE,KAAA,eAAAuhB,KAAAC,UAAA7iB,KAGA8iB,SAAA,WASA,GARA3iB,KAAA2K,IAAA3K,KAAA2K,IAAAiV,WACA5f,KAAA2K,IAAAiY,SACA5iB,KAAA6iB,WAAA7iB,KAAA2K,UAMA,IAAA3K,KAAAf,MAAAgB,IAAA,SAAA,IAAAtB,OAAA0P,KAAArO,KAAAf,MAAAgB,IAAA,SAAA,CACA,GAAA,UAAAD,KAAAf,MAAAgB,IAAA,QACA,IAAA6iB,EAAA9iB,KAAAf,MAAAgB,IAAA,oBAEA6iB,EAAA9iB,KAAAf,MAAAgB,IAAA,QAQA,GALAiJ,OAAA6Z,UAAA7Z,OAAA6Z,WAAA,SAAApmB,GAAA,MAAA,iBAAAA,GAAAqmB,SAAArmB,IAAAuO,KAAA+X,MAAAtmB,KAAAA,GACAuM,OAAA6Z,UAAAD,KACAA,EAAAA,EAAAzQ,YAGA,YAAAyQ,EAAA,CACA,IAAAne,EAAApE,QAAAC,QAAA,OAAA0C,QAAA,WAAAlD,KAAAf,MAAAgB,IAAA,WAEAiU,EAAAvP,EAAA1E,IAAA,iBAIA,UAAAiU,GAAA,KAAAA,EAAAgP,WAAA,KACAhP,EAAA,KAEA,IAAA8H,EAAArd,OAAA,UAAAuJ,KAAAvD,EAAA1E,IAAA,mBAAAyW,OAQAyM,EAAA,CACAC,oBARAlP,EAAAvV,OAAA,UAAAuJ,KAAAgM,GAAAwC,OASA2M,iBARA1kB,OAAA,UAAAuJ,KAAAvD,EAAA1E,IAAA,kBAAAyW,OASAsF,eAAAA,GAIAsH,EAAA3kB,OAAAA,OAAAqB,KAAAkF,IAAAuB,KAAA,eAAA,IACA,IAAA8c,YAAA5kB,OAAAqB,KAAAkF,IAAAuB,KAAA,eAAA,GAAA0c,GAGA,IAAA9E,EAAAre,KACAsjB,EAAA1hB,GAAA,UAAA,SAAAlE,GACA2gB,EAAApf,MAAAiB,IAAA,QAAAxC,EAAA4I,OAAA3J,eAGAgC,OAAAqB,KAAAkF,IAAAuB,KAAA,eAAAqc,KAAAA,GAIAviB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,cAAAf,OAGAwjB,gBAAA,WACA,IAAA3Z,EAAA7J,KACA,MAAA,CAEAyjB,cAAA,WACA,IAAAC,EAAA3hB,EAAA0E,KAAAzG,KAAA2jB,mBAAA,SAAAD,GACA,GAAA,EAAA/kB,OAAA,kBAAA+kB,GAAAjoB,OACA,OAAA,KAKA,OAFA8E,QAAAC,QAAA,OAAA0C,QAAA,eAAA,kBAAAwgB,EAEA9a,CAAA5I,OAGA4jB,YAAA,WAEA,OADArjB,QAAAC,QAAA,OAAA0C,QAAA,eAAA,uBACA0F,CAAA5I,OAGA6jB,mBAAA,WACA,IAAAvkB,EAAA,GAIA,YAHA,IAAAU,KAAAsH,qBACAhI,EAAAU,KAAAsH,mBAAAhI,IAEAA,GAGAwkB,kBAAA,WACA,IAAA1kB,EAAAY,KAAAZ,YAMA,YAJA,IAAAY,KAAA+jB,oBACA3kB,EAAAY,KAAA+jB,kBAAA3kB,IAGA,IAAAT,OAAA0P,KAAAjP,GACA,gBAAA2C,EAAAyG,OAAApJ,GAAA,IAEA,IAIA4kB,gBAAA,WACA,IAAAC,EAAA,cAAAjkB,KAAAD,KAAA,QAgBA,OAZAC,KAAAD,OAAAC,KAAAkkB,aACAD,EAAAA,EAAA,IAAAjkB,KAAAkkB,WAAA,cAGA,IAAAlkB,KAAAyJ,eAAA,EAAA9K,OAAA0P,KAAArO,KAAAyJ,eAAAhO,SACAwoB,GAAA,IAAAjkB,KAAAyJ,cAAA,SAGA,oBAAA0a,kBACAF,EAAAE,gBAAAF,IAGAA,GAGAG,cAAA,WACA,IAAA9kB,EAAAU,KAAAV,QAoBA,OAlBAU,KAAA+N,MACAzO,GAAA,YAEAA,EAAAA,EAAA1D,QAAA,WAAA,SAGA,IAAAoE,KAAA2C,eAAA,EAAAhE,OAAA0P,KAAArO,KAAA2C,eAAAlH,SACA6D,GAAA,IAAAU,KAAA2C,oBAOA,IAAA3C,KAAAqH,gBACA/H,EAAAU,KAAAqH,cAAA/H,IAGAA,GAGAqJ,gBAAA,WACA,YAAA,IAAAL,WAAAC,kBAAAD,WAAAC,kBAAA,SAGA8b,cAAA,WACA,OAAA,GAAArkB,KAAAskB,cACA,WAEA,IAIAC,cAAA,WACA,OAAA,GAAAvkB,KAAA0I,SACA,WAEA,IAIA8b,yBAAA,WACA,OAAA,GAAAxkB,KAAAykB,6BACA,qBAEA,IAIAC,gBAAA,WACA,MAAA,cAAA1kB,KAAA2kB,kBAAA,IAAAhmB,OAAA0P,KAAArO,KAAA4kB,aACA,cAAA5kB,KAAA4kB,YAAA,IAEA,IAIAC,YAAA,WAGA,YAAA,IAAA7kB,KAAA8kB,UAAA9kB,KAAA8kB,UAAA,IAGAC,gBAAA,WAIA,IAAAC,EAAA1X,SAAAC,cAAA,KACAyX,EAAAhG,UAAAhf,KAAA8kB,UAEA,IAAAG,GAAA,EAOA,IALA,GAAAtmB,OAAA0P,KAAA1P,OAAAqmB,GAAAtO,QAAAjb,QACA,EAAAkD,OAAAqmB,GAAAve,KAAA,OAAAhL,UACAwpB,GAAA,QAGA,IAAAjlB,KAAA8kB,WAAAG,EAAA,CACA,IAAAC,EAAA5X,SAAAC,cAAA,QAGA,OAFA2X,EAAAC,UAAAlhB,IAAA,KAAA,iBAAA,WACAihB,EAAAzK,aAAA,YAAAza,KAAA6kB,eACAK,EAAAE,UAEA,MAAA,IAIAC,eAAA,WACA,QAAA,IAAArlB,KAAAslB,UACA,MAAA,GAIA,IAIAC,EAAAC,EAKAC,EAAAC,EATAhP,EAAApJ,SAAAC,cAAA,KAEA,OADAmJ,EAAAsI,UAAAhf,KAAAslB,UACA,GAAA3mB,OAAA0P,KAAAqI,EAAAgE,WAAAjf,OAAA,IAGA+pB,EAAAlY,SAAAI,eAAA1N,KAAAslB,YACAC,EAAAjY,SAAAC,cAAA,MACAI,YAAA6X,GACA,GAAA7mB,OAAA0P,KAAA1P,OAAA4mB,GAAA7O,QAAAjb,QAEAgqB,EAAAnY,SAAAmU,cAAAC,yBAAA1hB,KAAAslB,YACAI,EAAApY,SAAAC,cAAA,QACA4X,UAAAlhB,IAAA,wBACAyhB,EAAA/X,YAAA8X,GACAC,EAAAN,WAEA,KAIAO,oBAAA,WAEA,OAAA3lB,KAAAN,MAEAM,KAAA4lB,QACA5lB,KAAA4lB,QAEA5lB,KAAAZ,YAIA,GAHAY,KAAArD,MAOAqD,KAAArD,OAIAkpB,yBAAA,SAAAzQ,GAIA,IAKAd,EALAc,EAAA/C,WAAAzW,QAAA,IAAA,MAIAA,QAAA,wBAAAoY,OAAAE,eACAtY,QAAA,KAAAoY,OAAAG,eAIA,OAFA5T,QAAAC,QAAA,OAAA0C,QAAA,WAAA2G,EAAA5K,MAAAgB,IAAA,WACAA,IAAA,YAAA6lB,gBACAxR,GAGAyR,gBAAA,WACA,MAAA,aAAA/lB,KAAAqZ,WAAA,iBAAArZ,KAAAqZ,aAQA2M,OAAA,CACA,qBAAA,cACA,oBAAA,aACA,oBAAA,aACA,eAAA,aACA,gBAAA,cACA,mBAAA,aAGAC,YAAA,SAAAvoB,GACA,IAAAwH,EAAAvG,OAAAjB,EAAAkkB,eACArhB,QAAAC,QAAA,WAAA0C,QAAA,eAAAgC,EAAAlF,KAAAf,QAGAinB,WAAA,SAAAxoB,GACA,IAAAwH,EAAAvG,OAAAjB,EAAAkkB,eACA/b,EAAAnI,EAAAmI,QACAtF,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,cAAAmE,EAAAlF,KAAAf,MAAA4G,GACAtF,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAAmE,EAAAlF,KAAAf,MAAA4G,GACAtF,QAAAC,QAAA,UAAAO,QAAA,cAAAmE,EAAAlF,KAAAf,MAAA4G,IAGAsgB,WAAA,SAAAzoB,GACA,IAAAwH,EAAAvG,OAAAjB,EAAAkkB,eACArhB,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,cAAAmE,EAAAlF,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAAmE,EAAAlF,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,cAAAmE,EAAAlF,KAAAf,QAGAmnB,WAAA,SAAA1oB,GACA6C,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,cAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,cAAArD,EAAAsC,KAAAf,QAGAonB,YAAA,SAAA3oB,GACA6C,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,eAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,eAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,eAAArD,EAAAsC,KAAAf,QAGAqnB,UAAA,SAAA5oB,GACA,IAAAwH,EAAAvG,OAAAjB,EAAAkkB,eACArhB,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,aAAAmE,EAAAlF,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,aAAAmE,EAAAlF,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,aAAAmE,EAAAlF,KAAAf,QAGAsnB,SAAA,WACAhmB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAAf,YAOA/G,EAAA,oBAAA,IAAA,WCrXA,OALAsL,WAAA+d,SAAAxjB,OAAA,CACAyjB,QAAA,aACA3Z,SAAA,6BAKA3P,EAAA,uBAAA,IAAA,WCIA,OAXAsL,WAAA+d,SAAAxjB,OAAA,CACAyjB,QAAA,aACA3Z,SAAA,uBAEA+Z,SAAA,WACA3iB,KAAA2K,IAAA3K,KAAA2K,IAAAiV,WACA5f,KAAA2K,IAAAiY,SACA5iB,KAAA6iB,WAAA7iB,KAAA2K,WAMA1R,EAAA,6BAAA,CAAA,yBAAA,SAAAutB,GCWA,OAxBAjiB,WAAAkiB,eAAA3nB,OAAA,CACAyjB,QAAA,YACAmE,UAAAF,EAEA1mB,WAAA,SAAAM,GACAJ,KAAAyB,WAAArB,EAAAqB,YAGAkhB,SAAA,WACA,GAAA3iB,KAAAyB,WAAAxB,IAAA,UAAA0B,OAAAlG,QACAuE,KAAAyB,WAAAH,mBAAA,YACAtB,KAAAyB,WAAAH,mBAAA,WACAtB,KAAAyB,WAAAL,gBAAA,WACApB,KAAAyB,WAAAF,YAAA,KAEAvB,KAAAyB,WAAAH,mBAAA,WACAtB,KAAAyB,WAAAL,gBAAA,WACApB,KAAAyB,WAAAL,gBAAA,YACApB,KAAAyB,WAAAF,YAAA,UASAtI,EAAA,mBAAA,IAAA,WCqBA,OAhDAsL,WAAA+d,SAAAxjB,OAAA,CACAyjB,QAAA,aACA3Z,SAAA,6BAEA9I,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAA,cAAAD,KAAA2mB,aACA3mB,KAAA4mB,MAAA5mB,KAAAf,MAAAgB,IAAA,eACAD,KAAA6f,UAGA8G,YAAA,SAAAzhB,EAAAjG,GACA,IAAAtC,EAAAgC,OAAAuG,GAAAC,MAEA0hB,EAAAlqB,EAAA0R,OAAAzS,QADA,QACA,KAAAP,MAAA,KACAyrB,EAAAD,EAAAprB,OACAsrB,EAAApqB,EAAAlB,OAOA,GAAA,cAAAuE,KAAAf,MAAAgB,IAAA,qBACA,QAAAD,KAAAf,MAAAgB,IAAA,oBACAtB,OAAAuG,GAAAhE,KAAA,YAAAlB,KAAAf,MAAAgB,IAAA,gBACAD,KAAA4mB,MAAA5mB,KAAAf,MAAAgB,IAAA,eAAA8mB,MACA,CACA/mB,KAAA4mB,MAAA5mB,KAAAf,MAAAgB,IAAA,eAAA6mB,EACA,IAAAE,EAAAhnB,KAAAf,MAAAgB,IAAA,eACA6mB,EAAAE,GACAroB,OAAAuG,GAAAC,IAAA0hB,EAAA7sB,MAAA,EAAAgtB,GAAAjrB,KAAA,MAIAiE,KAAA6f,UAGA2D,gBAAA,WACA,IAAA3Z,EAAA7J,KACA,MAAA,CACAinB,aAAA,WACA,OAAApd,EAAA+c,cASA3tB,EAAA,mBAAA,CAAA,6BAAA,qBAAA,SAAAiG,EAAAgoB,GCfA,OAnCA3iB,WAAA+d,SAAAxjB,OAAA,CACAyjB,QAAA,aACA3Z,SAAA,uBAEA9I,WAAA,WACAE,KAAAf,MAAA2C,GAAA,gBAAA5B,KAAAmnB,YAAAnnB,OAGA2iB,SAAA,WAKA,IAAAyE,EAAAzoB,OAAAqB,KAAAkF,IAAA0a,SAAA,kBAUA,GATA5f,KAAAqnB,oBAAA,IAAAnoB,EAAA,CAAAgG,GAAAkiB,EAAAjnB,WAAAH,KAAAf,MAAAgB,IAAA,UAAAwB,WAAAzB,KAAAf,QACA,EAAAe,KAAAf,MAAAgB,IAAA,UAAAxE,QACAuE,KAAAqnB,oBAAAxH,cAOA,IAAA7f,KAAAf,MAAAgB,IAAA,gBAAA,IAAAtB,OAAA0P,KAAArO,KAAAf,MAAAgB,IAAA,gBAAA,CACA,IAAAqnB,EAAA3oB,OAAAqB,KAAAkF,IAAA0a,SAAA,mBACA5f,KAAAunB,eAAA,IAAAL,EAAA,CAAAhiB,GAAAoiB,EAAAroB,MAAAe,KAAAf,UAIAkoB,YAAA,WACAnnB,KAAAqnB,oBAAAxH,eAOA5mB,EAAA,iCAAA,CAAA,kBAAA,oBAAA,qBAAA,SAAAuuB,EAAAC,EAAAC,GCkBA,OAtDAnjB,WAAAojB,WAAA7oB,OAAA,CACAyjB,QAAA,WAEAqF,QAAA,CACAH,YAAA,mBACAzZ,MAAA,YACA0Z,WAAA,mBAGA5nB,WAAA,WACAE,KAAAM,SAAAN,KAAAf,MAAA,iBAAAe,KAAA6f,OAAA7f,OAGA6nB,YAAA,WACA,OAAA7nB,KAAAf,MAAAgB,IAAA,WACA,wBAEA,kBAIA0iB,SAAA,WACA3iB,KAAAf,MAAAgB,IAAA,aACAD,KAAAynB,YAAA1Y,KAAA,IAAA0Y,EAAA,CAAAxoB,MAAAe,KAAAf,SACAe,KAAAgO,MAAAe,KAAA,IAAAyY,EAAA,CAAAvoB,MAAAe,KAAAf,SACAe,KAAA0nB,WAAA3Y,KAAA,IAAA2Y,EAAA,CAAAzoB,MAAAe,KAAAf,WAIAukB,gBAAA,WACA,MAAA,CACAsE,qBAAA,WACA,IAAAC,EAAA,UAAA/nB,KAAAX,UAAA,IAgBA,YAdA,IAAAW,KAAAgoB,WACAD,GAAA,QAAA/nB,KAAAgoB,SAAA,UAGA,IAAAhoB,KAAAioB,iBAAA,EAAAtpB,OAAA0P,KAAArO,KAAAioB,iBAAAxsB,SACAssB,GAAA/nB,KAAAioB,gBAAA,KAMAjoB,KAAAD,OAAAC,KAAAkkB,aACA6D,GAAA,IAAA/nB,KAAAkkB,WAAA,cAEA6D,UASA9uB,EAAA,qCAAA,CAAA,mCAAA,SAAAivB,GCrDA,OALA3jB,WAAAkiB,eAAA3nB,OAAA,CACAyjB,QAAA,iBACAmE,UAAAwB,OAKAjvB,EAAA,+BAAA,CAAA,uCAAA,SAAA4I,GCuBA,OA9BA0C,WAAAojB,WAAA7oB,OAAA,CACAyjB,QAAA,WACA3Z,SAAA,8BAEAgf,QAAA,CACAjZ,OAAA,yBAGAgU,SAAA,WACA3iB,KAAA2O,OAAAI,KAAA,IAAAlN,EAAA,CAAA1B,WAAAH,KAAAf,MAAAgB,IAAA,cAGAujB,gBAAA,WACA,MAAA,CACA7a,gBAAA,WACA,YAAA,IAAAL,WAAAC,kBAAAD,WAAAC,kBAAA,WAKAyd,OAAA,CACA,4BAAA,aAGAmC,UAAA,WACA5nB,QAAAC,QAAA,kBAAAO,QAAA,kBAAAf,KAAAf,aAOAhG,EAAA,mCAAA,CAAA,iCAAA,SAAAmvB,GC3BA,OALA7jB,WAAAkiB,eAAA3nB,OAAA,CACAyjB,QAAA,MACAmE,UAAA0B,OAKAnvB,EAAA,4BAAA,CAAA,qCAAA,SAAAovB,GCuCA,OA7CA9jB,WAAAojB,WAAA7oB,OAAA,CACAyjB,QAAA,MACA3Z,SAAA,0BAEAgf,QAAA,CACAU,KAAA,0BAGAxoB,WAAA,WAEAE,KAAAG,WAAAH,KAAAf,MAAAgB,IAAA,QAEAM,QAAAC,QAAA,kBAAAoB,GAAA,qBAAA5B,KAAA6f,OAAA7f,MAEAA,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAf,MAAAgB,IAAA,WAAA,gBAAAD,KAAAiB,eAIA0hB,SAAA,WACA3iB,KAAAsoB,KAAAvZ,KAAA,IAAAsZ,EAAA,CAAAloB,WAAAH,KAAAG,eAGAqjB,gBAAA,WACA,MAAA,CACA7a,gBAAA,WACA,YAAA,IAAAL,WAAAC,kBAAAD,WAAAC,kBAAA,WAKAyd,OAAA,CACA,yBAAA,UAGAuC,OAAA,SAAA7qB,GACA6C,QAAAC,QAAA,kBAAAO,QAAA,eAAArD,IAGAuD,aAAA,WACAjB,KAAAG,WAAAc,aAAAjB,KAAAf,MAAAgB,IAAA,eAQAhH,EAAA,oBAAA,CAAA,kBAAA,oBAAA,mBAAA,8BAAA,SAAAuuB,EAAAC,EAAAC,EAAAc,GCaA,OA5DAjkB,WAAAojB,WAAA7oB,OAAA,CACAyjB,QAAA,WAEAqF,QAAA,CACAH,YAAA,mBACAzZ,MAAA,YACA0Z,WAAA,mBAGA5nB,WAAA,WACAE,KAAAM,SAAAN,KAAAf,MAAA,iBAAAe,KAAA6f,OAAA7f,OAGA6nB,YAAA,WACA,OAAA7nB,KAAAf,MAAAgB,IAAA,WACA,wBAEA,kBAIA0iB,SAAA,WACA3iB,KAAAf,MAAAgB,IAAA,aACAD,KAAAynB,YAAA1Y,KAAA,IAAA0Y,EAAA,CAAAxoB,MAAAe,KAAAf,SACA,YAAAe,KAAAf,MAAAgB,IAAA,QACAD,KAAAgO,MAAAe,KAAA,IAAAyZ,EAAA,CAAAvpB,MAAAe,KAAAf,SAEAe,KAAAgO,MAAAe,KAAA,IAAAyY,EAAA,CAAAvoB,MAAAe,KAAAf,SAEAe,KAAA0nB,WAAA3Y,KAAA,IAAA2Y,EAAA,CAAAzoB,MAAAe,KAAAf,WAIAukB,gBAAA,WACA,MAAA,CACAsE,qBAAA,WACA,IAAAC,EAAA,UAAA/nB,KAAAX,UAAA,IAiBA,YAfA,IAAAW,KAAAgoB,WACAD,GAAA,QAAA/nB,KAAAgoB,SAAA,UAGA,IAAAhoB,KAAAioB,iBAAA,EAAAtpB,OAAA0P,KAAArO,KAAAioB,iBAAAxsB,SACAssB,GAAA/nB,KAAAioB,gBAAA,KAMAjoB,KAAAD,OAAAC,KAAAkkB,aACA6D,GAAA,IAAA/nB,KAAAkkB,WAAA,cAGA6D,UC9CA9uB,EAAA,wBAAA,CAAA,kBAAA,sBAAA,SAAAwvB,EAAAC,GAmBA,OAlBAnkB,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WAEAS,QAAAC,QAAA,SAAA8C,MAAA,gBAAAtD,KAAA2oB,cAEApoB,QAAAC,QAAA,SAAA8C,MAAA,kBAAAtD,KAAA4oB,iBAGAD,aAAA,SAAA1pB,GACA,OAAAwpB,GAGAG,eAAA,WACA,OAAAF,QCjBAzvB,EAAA,yBAAA,IAAA,WA2EA,OA1EAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WAIAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,YAAAR,KAAAwD,UACAxD,KAAAM,SAAAC,QAAAC,QAAA,UAAA,eAAAR,KAAAyD,aAKAlD,QAAAC,QAAA,QAAA8C,MAAA,aAAAtD,KAAA8N,gBAGAtK,SAAA,SAAA/B,EAAA6D,EAAAujB,GACA,IAAAxoB,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,gBAOA,IAAAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,SACAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAA,IAGAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAAqF,GAAAujB,EAKAtoB,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAAiD,QAAA,YAAA,eAAA7C,EAAAJ,IAAA,YAAA6oB,0BAGArlB,YAAA,SAAAhC,EAAA6D,GACA,IAAAjF,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAzB,EAAAxB,IAAA,WAEAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAA8B,EAAAgnB,KAAA1oB,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAAqF,GAMA,GAAAvD,EAAA4K,KAAAtM,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,gBACAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAGA,GAAA8B,EAAA4K,KAAAtM,EAAAJ,IAAA,iBAEAM,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAAiD,QAAA,eAAA,iBAIA4K,cAAA,SAAAX,GACA,IAAA9M,EAAAE,QAAAC,QAAA,OAAA0C,QAAA,WAAAiK,GACAjJ,GAAA,EAeA,OAbA7D,GAIA,IAAAA,EAAAJ,IAAA,UAAAxE,QACAsG,EAAAC,KAAA3B,EAAAJ,IAAA,UAAA0B,QAAA,SAAAoM,IACA7J,EAAAA,GAAA,IACA6J,EAAA9N,IAAA,OAAA8N,EAAA9N,IAAA,UAMAiE,QC1EAjL,EAAA,qBAAA,IAAA,WA8JA,OA7JAsL,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAgpB,wBAUAA,sBAAA,SAAA3oB,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAqD,MAAA,SAAAtD,KAAAipB,SAgBAA,OAAA,SAAA5oB,GAMAE,QAAAC,QAAA,SAAAO,QAAA,gBAAAV,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,gBAAAV,GAKA,IAAA6oB,EAAA3oB,QAAAC,QAAA,SAAA0C,QAAA,iBAAA7C,GAgBA,IAfA,IAAA6oB,IAGAnnB,EAAAC,KAAA3B,EAAAJ,IAAA,UAAA0B,QAAA,SAAAF,GACAA,EAAAvB,IAAA,SAAA,MAOAG,EAAAJ,IAAA,mBAAA6B,kBAIA,GADAvB,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAiD,QAAA,eAAA7C,GAIA,OAFAE,QAAAC,QAAA,SAAAO,QAAA,gBAAAV,QACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,gBAAAV,GAIA,IAAA,IAAA6oB,EAAA,CAGA,IAAAC,EAAApnB,EAAA8F,OAAAxH,EAAAJ,IAAA,UAAA0B,QAAA,SAAAoM,GAGA,MAAA,iBAAAA,EAAA9N,IAAA,OAAA,kBAAA8N,EAAA9N,IAAA,SASA,GAAA,GAAA8B,EAAA4K,KAAAwc,GAGA,OAFA5oB,QAAAC,QAAA,SAAAO,QAAA,gBAAAV,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,gBAAAV,IACA,EAQAE,QAAAC,QAAA,SAAAO,QAAA,yBAAAV,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,yBAAAV,GAMA,IAAA8M,EAAA9M,EAAAJ,IAAA,MACA0O,EAAA,GACA5M,EAAAC,KAAA3B,EAAAJ,IAAA,UAAA0B,QAAA,SAAAqM,GACA,IAAAob,EAAA,CAAAzsB,MAAAqR,EAAA/N,IAAA,SAAArC,GAAAoQ,EAAA/N,IAAA,OAGA0O,EAAAX,EAAA/N,IAAA,OAAAM,QAAAC,QAAAwN,EAAA/N,IAAA,SAAAiD,QAAA,iBAAAkmB,EAAApb,IAAAob,KAEA,IAAAtmB,EAAAzC,EAAAJ,IAAA,SACAqQ,EAAAjQ,EAAAJ,IAAA,mBACAqQ,EAAAtN,gBACA,IAAAqmB,EAAA5G,KAAAC,UAAA,CAAA9kB,GAAAuP,EAAAwB,OAAAA,EAAA2B,SAAAA,EAAAxN,MAAAA,IACAgG,EAAA,CACA+Q,OAAA,iBACAyP,SAAAhhB,WAAAoG,UACA3B,SAAAzE,WAAAyE,SACAsc,SAAAA,GAKA1qB,OAAA4qB,KAAA,CACAvI,IAAA1Y,WAAAkhB,UACAzpB,KAAA,OACA+I,KAAAA,EACA2gB,OAAA,EACAC,QAAA,SAAA5gB,EAAAmE,EAAAC,GACA,IACA,IAAAN,EAAA9D,EACAvI,QAAAC,QAAA,SAAAO,QAAA,kBAAA6L,EAAAK,EAAAC,EAAA7M,EAAAJ,IAAA,OACAM,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,kBAAA6L,EAAAK,EAAAC,GACAvO,OAAA2O,UAAAvM,QAAA,uBAAA,CAAA6L,SAAAA,EAAAhP,GAAAyC,EAAAJ,IAAA,QACA,MAAAvC,GACAkQ,QAAAC,IAAAnQ,GACAkQ,QAAAC,IAAA,eACAD,QAAAC,IAAAnQ,KAIAqQ,MAAA,SAAAb,EAAAD,EAAA0c,GAEA/b,QAAAC,IAAA,WAAA8b,GACA/b,QAAAC,IAAAX,GAEA,IACA,IAAAN,EAAAjO,OAAAirB,UAAA1c,EAAA2c,cACAtpB,QAAAC,QAAA,SAAAO,QAAA,kBAAA6L,EAAAK,EAAAC,EAAA7M,EAAAJ,IAAA,OACAM,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,kBAAA6L,EAAAK,EAAAC,GACA,MAAAxP,GACAkQ,QAAAC,IAAA,eAIAtN,QAAAC,QAAA,SAAAO,QAAA,kBAAA,QAAAkM,EAAAC,EAAAyc,YAWA1wB,EAAA,wBAAA,CAAA,sBAAA,SAAAivB,GC7JA,OANA3jB,WAAAkiB,eAAA3nB,OAAA,CACAyjB,QAAA,iBACAmE,UAAAwB,OCKAjvB,EAAA,6BAAA,CAAA,wBAAA,2BAAA,SAAA6wB,EAAA1nB,GAuDA,OAtDAmC,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,QAAA,oBAAAR,KAAA+pB,4BAGAA,0BAAA,SAAA1pB,GAIAE,QAAAC,QAAA,eAAA0C,QAAA,iBAAAlD,KAAAgqB,uBAAA,GAAAhqB,MAIAO,QAAAC,QAAA,eAAA0C,QAAA,iBAAAlD,KAAAiqB,uBAAA,GAAAjqB,OAGAgqB,uBAAA,SAAAhnB,EAAA3C,EAAAge,GACA,IAAAxc,EAAAxB,EAAAJ,IAAA,UAIAgD,EAAA1C,QAAAC,QAAA,eAAA0C,QAAA,mBAEA,GAAA,GADAnB,EAAAqB,QAAAH,OAAA5E,GACA5C,aAAA,IAAAuH,IAAA,GAAAA,aAAApE,SAAAI,WAAA,OAAAqB,EAAAJ,IAAA,UAEA,IAAAqR,EAAAvP,EAAAzG,IAAA0H,GAAA,SAAAc,GACA,OAAAzD,EAAAJ,IAAA,UAAA8D,UAAA,CAAAD,IAAAA,MACA9D,MAEAkqB,EAAA,IAAA9nB,EAAAkP,GAgBA,OAdAzP,EAAAD,GAAA,SAAA,SAAAzB,GACA,IAAAgqB,EAAA,GACAD,EAAAloB,MAAA,SAAAP,GACA,UAAAA,EAAAxB,IAAA,QACAkqB,EAAA5tB,KAAA4D,EAAA4D,UAAA,CAAAD,IAAArC,EAAAxB,IAAA,UAEAkqB,EAAA5tB,KAAAkF,MAIAyoB,EAAA9pB,QAAA,CAAAC,UAAAA,GACA6pB,EAAA1Z,MAAA2Z,MAGAD,GAGAD,uBAAA,WACA,OAAAH,QCtDA7wB,EAAA,+BAAA,IAAA,WAyBA,OAxBAsL,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WAMAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,oBAAAR,KAAAyD,aACAzD,KAAAM,SAAAC,QAAAC,QAAA,UAAA,cAAAR,KAAAyD,aACAzD,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAAyD,cAIAA,YAAA,SAAAyB,EAAAjG,GACAA,EAAAA,GAAAiG,EAIA3E,QAAAC,QAAA,UAAA0C,QAAA,eAAAjE,EAAAgB,IAAA,MAAA,sBAOAhH,EAAA,+BAAA,IAAA,WCwBA,OAtDA2F,SAAAC,MAAAC,OAAA,CAEAgB,WAAA,SAAAsqB,EAAAhqB,GAEAJ,KAAAqqB,mBAAAjqB,EAAAiqB,mBAEArqB,KAAAE,IAAA,QAAAF,KAAAqqB,mBAAApqB,IAAA,UAEAM,QAAAC,QAAA,kBAAA8C,MAAA,0BAAAtD,KAAAsqB,uBAAAtqB,MACAO,QAAAC,QAAA,kBAAA8C,MAAA,wBAAAtD,KAAAuqB,qBAAAvqB,MACAO,QAAAC,QAAA,kBAAA8C,MAAA,qBAAAtD,KAAAwqB,kBAAAxqB,MACAO,QAAAC,QAAA,kBAAA8C,MAAA,wBAAAtD,KAAAyqB,qBAAAzqB,OAIAsqB,uBAAA,SAAA3oB,GACA3B,KAAAG,WAAA,GACAH,KAAAG,WAAAwB,OAAAA,GAGA4oB,qBAAA,WACA,OAAAvqB,KAAAG,WAAAwB,QAGA6oB,kBAAA,WACA,IAAAJ,EAAApqB,KAAAuqB,uBACA,GAAAH,EAAA3uB,QAAA,EAAA,OAEA,IAAAkT,EAAA,GAQA,OAPA5M,EAAAC,KAAAooB,GAAA,SAAAM,GACA,MAAAC,EAAAD,EAAAzqB,IAAA,UAEA8B,EAAAC,KAAA2oB,EAAAhpB,QAAA,SAAAqM,GACAW,EAAApS,KAAAyR,SAGAW,GAGA8b,qBAAA,SAAA7sB,GACA,IAGAqB,EAHA0P,EAAA3O,KAAAwqB,oBACA,KAAA7b,EAAAlT,QAAA,GAQA,OALAsG,EAAAC,KAAA2M,GAAA,SAAAX,GACAA,EAAApQ,KAAAA,IACAqB,EAAA+O,MAGA/O,QAQAhG,EAAA,oCAAA,CAAA,+BAAA,2BAAA,SAAA2xB,EAAA/oB,GCqBA,OA9EAjD,SAAAI,WAAAF,OAAA,CACAG,MAAA2rB,EAEA9qB,WAAA,SAAA6B,EAAAvB,GACAJ,KAAAI,QAAAA,EAEAG,QAAAC,QAAA,kBAAAoB,GAAA,iBAAA5B,KAAA6qB,QAAA7qB,MACAO,QAAAC,QAAA,kBAAAoB,GAAA,kBAAA5B,KAAAmoB,UAAAnoB,MACAO,QAAAC,QAAA,kBAAAoB,GAAA,eAAA5B,KAAAuoB,OAAAvoB,OAIAuoB,OAAA,SAAA7qB,GAEA,MAAAotB,EAAAnsB,OAAAjB,EAAA4I,QAAAykB,KAAA,gBAAAjiB,KAAA,YACAuhB,EAAArqB,KAAAI,QAAAiqB,mBAAAzsB,KAAAktB,EAAA9qB,KAAAI,QAAAiqB,wBAAAhsB,EAEA,QAAAA,IAAAgsB,EAAA,CAEA,IAAA1b,EAAA,IAAA9M,EAAA7B,KAAAI,QAAA4qB,eAAA,CAAA3qB,UAAAL,KAAAI,QAAAC,UAAAgqB,mBAAAA,IAEArqB,KAAAiE,IAAA,CAAA0K,OAAAA,GAAA,CAAA0b,mBAAAA,IAEArqB,KAAA6qB,YAKA1C,UAAA,SAAAuC,GAEA1qB,KAAAmE,OAAAumB,GAEA1qB,KAAA6qB,WAGAA,QAAA,WACAtqB,QAAAC,QAAA,kBAAA0C,QAAA,0BAAAlD,KAAA2B,QAEAI,EAAAC,KAAAhC,KAAA2B,QAAA,SAAA+oB,EAAAO,GACA,IAAAtc,EAAA+b,EAAAzqB,IAAA,UACAyqB,EAAAxqB,IAAA,QAAA+qB,EAAA,GACAlpB,EAAAC,KAAA2M,EAAAhN,QAAA,SAAAqM,GAEAkd,MAAAC,OAAAnd,EAAApQ,IAAAvC,MAAA,KAAA,GAEA2S,EAAA9N,IAAA,KAAAgrB,MAAA,IAAAD,SAIA1qB,QAAAC,QAAA,kBAAAO,QAAA,uBAGAE,aAAA,SAAAqnB,GAEA,IAAA8C,EAAA9C,EAAA3mB,OACA,GAAAypB,EAAA3vB,OAAA,EAAA,CACA,IAAA4vB,EAAA,GAEAtpB,EAAAC,KAAAopB,GAAA,SAAAV,GACA,IAAA/b,EAAA+b,EAAAzqB,IAAA,UAEA8B,EAAAC,KAAA2M,EAAAhN,QAAA,SAAAqM,GAEA,IAAArR,EAAAqR,EAAA/N,IAAA,SACArC,EAAAoQ,EAAA/N,IAAA,MACAorB,EAAAztB,GAAA,CACAjB,MAAAA,EACAiB,GAAAA,SAKA2C,QAAAC,QAAA,WAAA0C,QAAA,eAAAlD,KAAAI,QAAAiqB,mBAAAgB,UAQApyB,EAAA,4BAAA,CAAA,oCAAA,2BAAA,SAAAovB,EAAAxmB,GC/DA,OAjBA0C,WAAA3K,OAAAkF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAAsrB,eAGAA,aAAA,SAAArsB,GACA,QAAA,IAAAA,EAAAkB,WAAAC,QAAAC,UACA,OAAA,EAGA,IAAAsO,EAAA,IAAA9M,EAAA5C,EAAAgB,IAAA,UAAA,CAAAI,UAAApB,EAAAkB,WAAAC,QAAAC,YACApB,EAAAiB,IAAA,OAAA,IAAAmoB,EAAA,CAAA,CAAA1Z,OAAAA,IAAA,CAAAqc,eAAA/rB,EAAAgB,IAAA,UAAAI,UAAApB,EAAAkB,WAAAC,QAAAC,UAAAgqB,mBAAAprB,WAOAhG,ECnBA,8BAAA,CACA,uBACA,yBACA,0BACA,0BACA,yBACA,4BACA,gCACA,6BACA,yBACA,0BACA,0BACA,2BACA,+BACA,2BACA,0BACA,4BACA,+BACA,0BACA,6BACA,4BACA,0BACA,iCACA,2BACA,yBACA,4BACA,2BACA,kCACA,wBACA,6BACA,+BACA,wBACA,uBACA,2BACA,+BACA,8BACA,yBACA,iCACA,wBACA,yBACA,qBACA,6BACA,+BACA,8BAEA,SACAsyB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAsEA,OApEA1pB,WAAA3K,OAAAkF,OAAA,CACAgB,WAAA,WAKA,IAAA8tB,EACA,IAAAC,EACA,IAAAC,EAKA,IAAAlC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAW,EACA,IAAAE,EACA,IAAAC,EACA,IAAAC,EACA,IAAAI,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAK,EACA,IAAAC,EAKA,IAAAzC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EAEA,IAAAM,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EAEA,IAAAE,EACA,IAAAI,EAEA,IAAAe,EAKA,IAAAd,EACA,IAAAC,EACA,IAAA3B,QAQAtyB,EAAA,mBAAA,IAAA,W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","file":"front-end.js","sourcesContent":["(function () {\n","/**\n * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/almond for details\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*jslint sloppy: true */\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n var main, req, makeMap, handlers,\n defined = {},\n waiting = {},\n config = {},\n defining = {},\n hasOwn = Object.prototype.hasOwnProperty,\n aps = [].slice,\n jsSuffixRegExp = /\\.js$/;\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @returns {String} normalized name\n */\n function normalize(name, baseName) {\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n foundI, foundStarMap, starI, i, j, part,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = (map && map['*']) || {};\n\n //Adjust any relative paths.\n if (name && name.charAt(0) === \".\") {\n //If have a base name, try to normalize against it,\n //otherwise, assume it is a top-level require that will\n //be relative to baseUrl in the end.\n if (baseName) {\n name = name.split('/');\n lastIndex = name.length - 1;\n\n // Node .js allowance:\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n }\n\n //Lop off the last part of baseParts, so that . matches the\n //\"directory\" and not name of the baseName's module. For instance,\n //baseName of \"one/two/three\", maps to \"one/two/three.js\", but we\n //want the directory, \"one/two\" for this normalization.\n name = baseParts.slice(0, baseParts.length - 1).concat(name);\n\n //start trimDots\n for (i = 0; i < name.length; i += 1) {\n part = name[i];\n if (part === \".\") {\n name.splice(i, 1);\n i -= 1;\n } else if (part === \"..\") {\n if (i === 1 && (name[2] === '..' || name[0] === '..')) {\n //End of the line. Keep at least one non-dot\n //path segment at the front so it can be mapped\n //correctly to disk. Otherwise, there is likely\n //no path mapping for a path starting with '..'.\n //This can still fail, but catches the most reasonable\n //uses of ..\n break;\n } else if (i > 0) {\n name.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n //end trimDots\n\n name = name.join(\"/\");\n } else if (name.indexOf('./') === 0) {\n // No baseName, so this is ID is resolved relative\n // to baseUrl, pull off the leading dot.\n name = name.substring(2);\n }\n }\n\n //Apply map config if available.\n if ((baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join(\"/\");\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = map[baseParts.slice(0, j).join('/')];\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && starMap[nameSegment]) {\n foundStarMap = starMap[nameSegment];\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function makeRequire(relName, forceSync) {\n return function () {\n //A version of a require function that passes a moduleName\n //value for items that may need to\n //look up paths relative to the moduleName\n var args = aps.call(arguments, 0);\n\n //If first arg is not require('string'), and there is only\n //one arg, it is the array form without a callback. Insert\n //a null so that the following concat is correct.\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\n return req.apply(undef, args.concat([relName, forceSync]));\n };\n }\n\n function makeNormalize(relName) {\n return function (name) {\n return normalize(name, relName);\n };\n }\n\n function makeLoad(depName) {\n return function (value) {\n defined[depName] = value;\n };\n }\n\n function callDep(name) {\n if (hasProp(waiting, name)) {\n var args = waiting[name];\n delete waiting[name];\n defining[name] = true;\n main.apply(undef, args);\n }\n\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\n throw new Error('No ' + name);\n }\n return defined[name];\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n /**\n * Makes a name map, normalizing the name, and using a plugin\n * for normalization if necessary. Grabs a ref to plugin\n * too, as an optimization.\n */\n makeMap = function (name, relName) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0];\n\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relName);\n plugin = callDep(prefix);\n }\n\n //Normalize according\n if (prefix) {\n if (plugin && plugin.normalize) {\n name = plugin.normalize(name, makeNormalize(relName));\n } else {\n name = normalize(name, relName);\n }\n } else {\n name = normalize(name, relName);\n parts = splitPrefix(name);\n prefix = parts[0];\n name = parts[1];\n if (prefix) {\n plugin = callDep(prefix);\n }\n }\n\n //Using ridiculous property names for space reasons\n return {\n f: prefix ? prefix + '!' + name : name, //fullName\n n: name,\n pr: prefix,\n p: plugin\n };\n };\n\n function makeConfig(name) {\n return function () {\n return (config && config.config && config.config[name]) || {};\n };\n }\n\n handlers = {\n require: function (name) {\n return makeRequire(name);\n },\n exports: function (name) {\n var e = defined[name];\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return (defined[name] = {});\n }\n },\n module: function (name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function (name, deps, callback, relName) {\n var cjsModule, depName, ret, map, i,\n args = [],\n callbackType = typeof callback,\n usingExports;\n\n //Use name if no relName\n relName = relName || name;\n\n //Call the callback to define the module, if necessary.\n if (callbackType === 'undefined' || callbackType === 'function') {\n //Pull out the defined dependencies and pass the ordered\n //values to the callback.\n //Default to [require, exports, module] if no deps\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relName);\n depName = map.f;\n\n //Fast path CommonJS standard dependencies.\n if (depName === \"require\") {\n args[i] = handlers.require(name);\n } else if (depName === \"exports\") {\n //CommonJS module spec 1.1\n args[i] = handlers.exports(name);\n usingExports = true;\n } else if (depName === \"module\") {\n //CommonJS module spec 1.1\n cjsModule = args[i] = handlers.module(name);\n } else if (hasProp(defined, depName) ||\n hasProp(waiting, depName) ||\n hasProp(defining, depName)) {\n args[i] = callDep(depName);\n } else if (map.p) {\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n args[i] = defined[depName];\n } else {\n throw new Error(name + ' missing ' + depName);\n }\n }\n\n ret = callback ? callback.apply(defined[name], args) : undefined;\n\n if (name) {\n //If setting exports via \"module\" is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n if (cjsModule && cjsModule.exports !== undef &&\n cjsModule.exports !== defined[name]) {\n defined[name] = cjsModule.exports;\n } else if (ret !== undef || !usingExports) {\n //Use the return value from the function.\n defined[name] = ret;\n }\n }\n } else if (name) {\n //May just be an object definition for the module. Only\n //worry about defining if have a module name.\n defined[name] = callback;\n }\n };\n\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n if (typeof deps === \"string\") {\n if (handlers[deps]) {\n //callback in this case is really relName\n return handlers[deps](callback);\n }\n //Just return the module wanted. In this scenario, the\n //deps arg is the module name, and second arg (if passed)\n //is just the relName.\n //Normalize module name, if it contains . or ..\n return callDep(makeMap(deps, callback).f);\n } else if (!deps.splice) {\n //deps is a config object, not an array.\n config = deps;\n if (config.deps) {\n req(config.deps, config.callback);\n }\n if (!callback) {\n return;\n }\n\n if (callback.splice) {\n //callback is an array, which means it is a dependency list.\n //Adjust args if there are dependencies\n deps = callback;\n callback = relName;\n relName = null;\n } else {\n deps = undef;\n }\n }\n\n //Support require(['a'])\n callback = callback || function () {};\n\n //If relName is a function, it is an errback handler,\n //so remove it.\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n }\n\n //Simulate async callback;\n if (forceSync) {\n main(undef, deps, callback, relName);\n } else {\n //Using a non-zero value because of concern for what old browsers\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n //If want a value immediately, use require('id') instead -- something\n //that works in almond on the global level, but not guaranteed and\n //unlikely to work in other AMD implementations.\n setTimeout(function () {\n main(undef, deps, callback, relName);\n }, 4);\n }\n\n return req;\n };\n\n /**\n * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n req.config = function (cfg) {\n return req(cfg);\n };\n\n /**\n * Expose module registry for debugging and tooling\n */\n requirejs._defined = defined;\n\n define = function (name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n }\n\n //This module may not have dependencies\n if (!deps.splice) {\n //deps is not an array, so probably means\n //an object literal or factory function for\n //the value. Adjust args.\n callback = deps;\n deps = [];\n }\n\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n waiting[name] = [name, deps, callback];\n }\n };\n\n define.amd = {\n jQuery: true\n };\n}());\n\ndefine(\"../lib/almond\", function(){});\n\n","define( 'models/fieldErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/fieldErrorCollection',['models/fieldErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/fieldModel',['models/fieldErrorCollection'], function( fieldErrorCollection ) {\n\tvar model = Backbone.Model.extend( {\n\t\tdefaults: {\n\t\t\tplaceholder: '',\n\t\t\tvalue: '',\n\t\t\tlabel_pos: '',\n\t\t\tclasses: 'ninja-forms-field',\n\t\t\treRender: false,\n\t\t\tmirror_field: false,\n\t\t\tconfirm_field: false,\n\t\t\tclean: true,\n\t\t\tdisabled: '',\n\t\t\tvisible: true,\n\t\t\tinvalid: false\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tvar type = this.get('type');\n\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'reset', this.resetModel );\n\n \t\tthis.bind( 'change', this.changeModel, this );\n \t\tthis.bind( 'change:value', this.changeValue, this );\n \t\tthis.set( 'errors', new fieldErrorCollection() );\n\n\t\t\tif (type === 'listimage') {\n\t\t\t\tthis.get = this.listimageGet;\n\t\t\t\tthis.set = this.listimageSet;\n\t\t\t}\n\n \t\t/*\n\t\t\t * Trigger an init event on two channels:\n\t\t\t * \n\t\t\t * fields\n\t\t\t * field-type\n\t\t\t *\n\t\t\t * This lets specific field types modify model attributes before anything uses them.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'init:model', this );\n\n\t\t\tif( 'undefined' != typeof this.get( 'parentType' ) ){\n\t\t\t\tnfRadio.channel( this.get( 'parentType' ) ).trigger( 'init:model', this );\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * When we load our form, fire another event for this field.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'loaded', this.formLoaded );\n\t\t\n\t\t\t/*\n\t\t\t * Before we submit our form, send out a message so that this field can be modified if necessary.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'before:submit', this.beforeSubmit );\n\t\t},\n\n\t\tlistimageGet: function(attr) {\n if(attr === 'options') {\n\t\t\t\t\tattr = 'image_options';\n\t\t\t}\n\n return Backbone.Model.prototype.get.call(this, attr);\n\t\t},\n\t\t\n\t\tlistimageSet: function(attributes, options) {\n\t\t\tif ('options' === attributes) {\n\t\t\t\tattributes = 'image_options';\n\t\t\t}\n\t\t\treturn Backbone.Model.prototype.set.call(this, attributes, options);\n\t\t},\n\n\t\tchangeModel: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:model', this );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:modelValue', this );\n\t\t},\n\n\t\taddWrapperClass: function( cl ) {\n\t\t\tthis.set( 'addWrapperClass', cl );\n\t\t},\n\n\t\tremoveWrapperClass: function( cl ) {\n\t\t\tthis.set( 'removeWrapperClass', cl );\n\t\t},\n\n\t\tsetInvalid: function( invalid ) {\n\t\t\tthis.set( 'invalid', invalid );\n\t\t},\n\n\t\tformLoaded: function() {\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'formLoaded', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'formLoaded', this );\n\t\t},\n\n\t\tbeforeSubmit: function( formModel ) {\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'before:submit', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'before:submit', this );\n\t\t},\n\n\t\t/**\n\t\t * Return the value of this field.\n\t\t * This method exists so that more complex fields can return more than just the field value.\n\t\t * Those advanced fields should create their own method with this name.\n\t\t * \n\t\t * @since 3.5\n\t\t * @return {string} Value of this field.\n\t\t */\n\t\tgetValue: function() {\n\t\t\treturn this.get( 'value' );\n\t\t}\n\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/fieldCollection',['models/fieldModel'], function( fieldModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: fieldModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n this.on( 'reset', function( fieldCollection ){\n nfRadio.channel( 'fields' ).trigger( 'reset:collection', fieldCollection );\n }, this );\n\t\t},\n\n\t\tvalidateFields: function() {\n\t\t\t_.each( this.models, function( fieldModel ) {\n\t\t\t\t// added here for help with multi-part part validation\n\t\t\t\tfieldModel.set( 'clean', false );\n\t\t\t\tnfRadio.channel( 'submit' ).trigger( 'validate:field', fieldModel );\n\t\t\t}, this );\n\t\t},\n\n\t\tshowFields: function() {\n\t\t\tthis.invoke( 'set', { visible: true } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t},\n\n\t\thideFields: function() {\n\t\t\tthis.invoke( 'set', { visible: false } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t}\n\t} );\n\treturn collection;\n} );\n\n","define( 'models/formErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/formErrorCollection',['models/formErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/formModel',[\n\t'models/fieldCollection',\n\t'models/formErrorCollection'\n\t], function(\n\t\tFieldCollection,\n\t\tErrorCollection\n\t) {\n\tvar model = Backbone.Model.extend({\n\t\tdefaults: {\n\t\t\tbeforeForm: '',\n\t\t\tafterForm: '',\n\t\t\tbeforeFields: '',\n\t\t\tafterFields: '',\n\t\t\twrapper_class: '',\n\t\t\telement_class: '',\n\t\t\thp: '',\n\t\t\tfieldErrors: {},\n\t\t\textra: {}\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\t// Loop over settings and map to attributes\n\t\t\t_.each( this.get( 'settings' ), function( value, setting ) {\n\t\t\t\tthis.set( setting, value );\n\t\t\t}, this );\n\n\t\t\tthis.set( 'loadedFields', this.get( 'fields' ) );\n\t\t\tthis.set( 'fields', new FieldCollection( this.get( 'fields' ), { formModel: this } ) );\n\t\t\tthis.set( 'errors', new ErrorCollection() );\n\n\t\t\t/*\n\t\t\t * Send out a radio message so that anyone who wants to filter our content data can register their filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'form' ).trigger( 'before:filterData', this );\n\n\t\t\t/*\n\t\t\t * Set our formContentData to our form setting 'formContentData'\n\t\t\t */\n\t\t\tvar formContentData = this.get( 'formContentData' );\n\n\t\t\t/*\n\t\t\t * The formContentData variable used to be fieldContentsData.\n\t\t\t * If we don't have a 'formContentData' setting, check to see if we have an old 'fieldContentsData'.\n\t\t\t * \n\t\t\t * TODO: This is for backwards compatibility and should be removed eventually. \n\t\t\t */\n\t\t\tif ( ! formContentData ) {\n\t\t\t\tformContentData = this.get( 'fieldContentsData' );\n\t\t\t}\n\t\t\t\n\t\t\tvar formContentLoadFilters = nfRadio.channel( 'formContent' ).request( 'get:loadFilters' );\n\t\t\t/* \n\t\t\t* Get our first filter, this will be the one with the highest priority.\n\t\t\t*/\n\t\t\tvar sortedArray = _.without( formContentLoadFilters, undefined );\n\t\t\tvar callback = _.first( sortedArray );\n\t\t\tformContentData = callback( formContentData, this, this );\n\t\t\t\n\t\t\tthis.set( 'formContentData', formContentData );\n\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'init:model', this );\n\n\t\t\t// Fields\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:fieldByKey', this.getFieldByKey, this );\n\n\t\t\t// Form Errors\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:error', this.addError, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:error', this.removeError, this );\n\n\t\t\t// Extra Data\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:extra', this.getExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:extra', this.addExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:extra', this.removeExtra, this );\n\t\t\n\t\t\t// Respond to requests to get this model.\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:form', \t this.getForm, \t this );\n\n\t\t\tnfRadio.channel( 'form' ).trigger( 'loaded', this );\n\t\t\tnfRadio.channel( 'form' ).trigger( 'after:loaded', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'loaded', \t this );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Fields\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetFieldByKey: function( key ) {\n\t\t\treturn this.get( 'fields' ).findWhere( { key: key } );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Form Errors\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\taddError: function( id, msg ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\terrors.add( { id: id, msg: msg } );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:error', this, id, msg );\n\t\t},\n\n\t\tremoveError: function( id ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\tvar errorModel = errors.get( id );\n\t\t\terrors.remove( errorModel );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:error', this, id );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Extra Data\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tif( 'undefined' == typeof key ) return extraData;\n\t\t\treturn extraData[ key ];\n\t\t},\n\n\t\taddExtra: function( key, value ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\textraData[ key ] = value;\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:extra', this, key, value );\n\t\t},\n\n\t\tremoveExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tdelete extraData[ key ];\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:extra', this, key );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Get this form\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\t\tgetForm: function() {\n\t\t\treturn this;\n\t\t}\n\t} );\n\n\treturn model;\n} );\n","define( 'models/formCollection',['models/formModel'], function( formModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: formModel\n\t} );\n\treturn collection;\n} );\n","/*\n * Handles setting up our form.\n *\n * Holds a collection of our fields.\n * Replies to requests for field data.\n * Updates field models.\n */\ndefine('controllers/formData',['models/formModel', 'models/formCollection', 'models/fieldCollection', 'models/formErrorCollection'], function( FormModel, FormCollection, FieldCollection, ErrorCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\t/*\n\t\t\t * Setup our field collections.\n\t\t\t */\n\t\t\tvar that = this;\n\n\t\t\t/*\n\t\t\t * Initialize our form collection (incase we have multiple forms on the page)\n\t\t\t */\n\t\t\tthis.collection = new FormCollection( nfForms );\n\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'loaded', this.collection );\n\t\t\tnfRadio.channel( 'app' ).trigger( 'forms:loaded', this.collection );\n\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:form', this.getForm, this );\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:forms', this.getForms, this );\n\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:field', this.getField, this );\n\t\t},\n\n\t\tgetForm: function( id ) {\n\t\t\treturn this.collection.get( id );\n\t\t},\n\n\t\tgetForms: function() {\n\t\t\treturn this.collection;\n\t\t},\n\n\t\tgetField: function( id ) {\n\t\t\tvar model = false;\n\t\t\t\n\t\t\t_.each( this.collection.models, function( form ) {\n\t\t\t\tif ( ! model ) {\n\t\t\t\t\tmodel = form.get( 'fields' ).get( id );\t\n\t\t\t\t}\t\t\t\n\t\t\t} );\n\n\t\t\tif(typeof model == \"undefined\"){\n\t\t\t\tmodel = nfRadio.channel( \"field-repeater\" ).request( 'get:repeaterFieldById', id );\n\t\t\t}\n\t\t\t\n\t\t\treturn model;\n\t\t}\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldError',['models/fieldErrorModel'], function( fieldErrorModel ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'fields' ).reply( 'add:error', this.addError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'remove:error', this.removeError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:error', this.getError );\n\t\t},\n\n\t\taddError: function( targetID, id, msg ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\terrors.add( { 'id': id, 'msg' : msg } );\n\t\t\tmodel.set( 'errors', errors );\n\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\tmodel.set( 'clean', false );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'add:error', model, id, msg );\n\t\t},\n\n\t\tremoveError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\n\t\t\tif ( 'undefined' != typeof targetError ) {\n\t\t\t\terrors.remove( targetError );\n\t\t\t\tmodel.set( 'errors', errors );\n\t\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\t\tnfRadio.channel( 'fields' ).trigger( 'remove:error', model, id );\n\t\t\t}\n\t\t},\n\n\t\tgetError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\t\t\tif ( 'undefined' != targetError ) {\n\t\t\t\treturn targetError;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * Controller responsible for replying to a Radio request stating that a field has been changed.\n *\n * This controller sends out a message to the field-specific channel, the field type channel,\n * and the public fields channel so that the data model can be updated.\n */\n\ndefine('controllers/changeField',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Reply to our request for changing a field.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'change:field', this.changeField );\n\n\t\t\t/*\n\t\t\t * If we blur our field, set the model attribute of 'clean' to false.\n\t\t\t * 'clean' tracks whether or not the user has every interacted with this element.\n\t\t\t * Some validation, like required, uses this to decide whether or not to add an error.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.blurField );\n\t\t},\n\n\t\tchangeField: function( el, model ) {\n\t\t\t// Get our current value.\n\t\t\tvar value = nfRadio.channel( model.get( 'type' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : nfRadio.channel( model.get( 'parentType' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : jQuery( el ).val();\n\n\t\t\t// Set our 'isUpdated' flag to false.\n\t\t\tmodel.set( 'isUpdated', false );\n\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\n\t\t\t/*\n\t\t\t * Send out a message saying that we've changed a field.\n\t\t\t * The first channel is field id/key specific.\n\t\t\t * The second channel is the field type, i.e. text, email, radio\n\t\t\t * The third channel is a generic 'field' channel.\n\t\t\t *\n\t\t\t * If the submitted value you wish to store in the data model isn't the same as the value received above,\n\t\t\t * you can set that model in the actions below and set the 'isUpdated' model attribute to true.\n\t\t\t * i.e. model.set( 'isUpdated', true );\n\t\t\t */\n\t\t\tnfRadio.channel( 'field-' + model.get( 'id' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( model.get( 'type' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:field', el, model );\n\n\t\t\t/*\n\t\t\t * Send a request out on our nfAdmin channel to update our field model.\n\t\t\t * If the field model has a 'isUpdated' property of false, nothing will be updated.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).request( 'update:field', model, value );\n\t\t},\n\n\t\tblurField: function( el, model ) {\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeEmail',[], function() {\n\tvar radioChannel = nfRadio.channel( 'email' );\n\t// var emailReg = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i;\n\tvar emailReg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\tvar errorID = 'invalid-email';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.emailKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tvar value = jQuery( el ).val();\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\temailChange: function( value, fieldID ) {\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\tif( emailReg.test( value ) ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\t\t\t\t}\t\t\t\t\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an email field, track their keypresses and add the appropriate class.\n\t\t * If the value validates as an email, add a class of nf-pass\n\t\t * If the value does not validate as email, add a class of nf-fail\n\t\t * \n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\temailKeyup: function( el, model, keyCode ) {\n\t\t\t\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid email.\n\t\t\t */\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t} else if ( ! emailReg.test( value ) && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t} else if ( emailReg.test( value ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeDate',[], function() {\n\tvar radioChannel = nfRadio.channel( 'date' );\n\tvar errorID = 'invalid-date';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.dateKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t\t\n\t\t\tthis.listenTo( radioChannel, 'change:extra', this.changeHoursMinutes, this)\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tthis.dateChange( model );\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tthis.dateChange( model );\n\t\t},\n\n\t\tdateChange: function( model ) {\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar format = model.get( 'date_format' );\n\n\t\t\t// If we are dealing with purely a time field, bail early.\n\t\t\tif ( 'time_only' == model.get( 'date_mode' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\t\tif( moment( value, format ).isValid() ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeDateErrorMsg );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an dat field, track their keypresses\n\t\t * and add the appropriate class.\n\t\t * If the value validates as an date, add a class of nf-pass\n\t\t * If the value does not validate as date, add a class of nf-fail\n\t\t *\n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\tdateKeyup: function( el, model, keyCode ) {\n\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t* Get our current date format\n\t\t\t */\n\t\t\tvar format = model.get( 'date_format' );\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid email.\n\t\t\t */\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\telse if ( ! moment( value, format ).isValid() && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeDateErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t}\n\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\telse if ( moment( value, format ).isValid() ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t},\n\n\t\tchangeHoursMinutes: function( e, fieldModel ) {\n\t\t\tlet type = '';\n\t\t\tlet container = jQuery( e.target ).closest( '.nf-field-element' );\n\n\t\t\t// Set our hour, minute, and ampm\n\t\t\tlet selected_hour = jQuery( container ).find( '.hour' ).val();\n\t\t\tlet selected_minute = jQuery( container ).find( '.minute' ).val();\n\t\t\tlet selected_ampm = jQuery( container ).find( '.ampm' ).val();\n\n\t\t\tfieldModel.set( 'selected_hour', selected_hour );\n\t\t\tfieldModel.set( 'selected_minute', selected_minute );\n\t\t\tfieldModel.set( 'selected_ampm', selected_ampm );\n\t\t\t// Trigger a change on our model.\n\t\t\tfieldModel.trigger( 'change:value', fieldModel );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * When we init our checkbox model, register our renderClasses() function\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'checkbox' ), 'init:model', this.registerRenderClasses );\n\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:required', this.validateRequired );\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:modelData', this.validateModelData );\n nfRadio.channel( 'checkbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'checkbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tbeforeUpdateField: function( el, model ) {\n\t\t\tvar checked = jQuery( el ).prop( 'checked' );\n\t\t\tif ( checked ) {\n\t\t\t\tvar value = 1;\n\t\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\t\t\t} else {\n\t\t\t\tvar value = 0;\n\t\t\t\tjQuery( el ).removeClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\treturn el[0].checked;\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\t\t\treturn model.get( 'value' ) != 0;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tif ( 1 == fieldModel.get( 'value' ) ) {\n\t\t\t\tcalcValue = fieldModel.get( 'checked_calc_value' );\n\t\t\t} else {\n\t\t\t\tcalcValue = fieldModel.get( 'unchecked_calc_value' );\n\t\t\t}\n\n\t\t\treturn calcValue;\n\t\t},\n\n\t\tregisterRenderClasses: function( model ) {\n\t\t\tif ( 'checked' == model.get( 'default_value' ) ) {\n\t\t\t\tmodel.set( 'value', 1 );\n\t\t\t} else {\n\t\t\t\tmodel.set( 'value', 0 );\n\t\t\t}\n\t\t\tmodel.set( 'customClasses', this.customClasses );\n\t\t\tmodel.set( 'customLabelClasses', this.customLabelClasses );\n\t\t\tmodel.set( 'maybeChecked', this.maybeChecked );\n\t\t},\n\n\t\tcustomClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tcustomLabelClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked-label';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked-label', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tmaybeChecked: function() {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\treturn ' checked';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckboxList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listcheckbox' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'terms' ), 'init:model', this.register );\n nfRadio.channel( 'listcheckbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'terms' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listcheckbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n nfRadio.channel( 'terms' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'options' ).length ) {\n var selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n }\n\n /*\n * This part is re-worked to take into account custom user-meta\n * values for fields.\n */\n\t var savedVal = model.get( 'value' );\n\t if( 'undefined' !== typeof savedVal && Array.isArray( savedVal ) ) {\n\t\t model.set( 'value', savedVal );\n\t } else if ( 'undefined' != typeof selected ) {\n\t\t model.set( 'value', selected );\n\t }\n },\n\n renderOptions: function() {\n var html = '';\n\n if ( '' == this.value || ( Array.isArray( this.value ) && 0 < this.value.length )\n || 0 < this.value.length ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n _.each( this.options, function( option, index ) {\n if( Array.isArray( this.value ) ) {\n \tif( Array.isArray( this.value[ 0 ] ) && -1 !== _.indexOf( this.value[ 0 ], option.value ) ) {\n \t\tvalueFound = true;\n\t }\n else if( _.indexOf( this.value, option.value ) ) {\n valueFound = true;\n\t }\n }\n\n if ( option.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.fieldID = this.id;\n option.classes = this.classes;\n option.index = index;\n option.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n \n var selected = false;\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t if( Array.isArray( this.value ) && 0 < this.value.length ) {\n\t \tif ( -1 !== _.indexOf( this.value[ 0 ].split( ',' ), option.value )\n\t\t || -1 !== _.indexOf( this.value, option.value ) ) {\n\t\t\t selected = true;\n\t \t}\n\t } else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t selected = true;\n\t } else if ( ( 1 == option.selected && this.clean ) && 'undefined' === typeof this.value ) {\n\t\t selected = true;\n\t }\n\n\n // else if( ( option.selected && \"0\" != option.selected ) && this.clean ){\n\t // isSelected = true;\n\t // } else {\n\t // var testValues = _.map( this.value, function( value ) {\n\t // return value.toString();\n\t // } );\n\t //\n\t // option.isSelected = ( -1 != testValues.indexOf( option.value.toString() ) );\n\t // }\n\t option.selected = selected;\n\t option.isSelected = selected;\n\t option.required = this.required;\n option.maybeFilterHTML = this.maybeFilterHTML;\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-option' );\n html += template( option );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n var calc_value = 0;\n var options = fieldModel.get( 'options' );\n if ( 0 != options.length ) {\n _.each( fieldModel.get( 'value' ), function( val ) {\n var tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n calc_value = Number( calc_value ) + Number( tmp_opt.calc );\n } );\n }\n return calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n } else if ( Array.isArray( selected ) ) {\n \tvar optionArray = selected[0].split( ',' );\n \tvar valueIndex = optionArray.indexOf( value );\n \tif( -1 !== valueIndex) {\n \t\toptionArray.splice( valueIndex, 1 );\n\t }\n \tselected = optionArray.join( ',' );\n }\n }\n\n // if ( 1 == model.get( 'show_other' ) ) {\n // model.set( 'reRender', true );\n // }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldImageList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listimage' ), 'init:model', this.register );\n nfRadio.channel( 'listimage' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listimage' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'image_options' ).length ) {\n var selected = _.filter( model.get( 'image_options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n }\n\n /*\n * This part is re-worked to take into account custom user-meta\n * values for fields.\n */\n\t var savedVal = model.get( 'value' );\n\t if( 'undefined' !== typeof savedVal && Array.isArray( savedVal ) ) {\n\t\t model.set( 'value', savedVal );\n\t } else if ( 'undefined' != typeof selected ) {\n\t\t model.set( 'value', selected );\n\t }\n },\n\n renderOptions: function() {\n var html = '';\n \n if ( '' == this.value || ( Array.isArray( this.value ) && 0 < this.value.length )\n || 0 < this.value.length ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n if (this.allow_multi_select === 1) {\n this.old_classname = 'list-checkbox';\n this.image_type = 'checkbox';\n } else {\n this.image_type = 'radio';\n }\n\n if(this.list_orientation === 'horizontal') {\n this.flex_direction = 'row';\n } else {\n this.flex_direction = 'column';\n }\n var that = this;\n\n var num_columns = parseInt(this.num_columns) || 1;\n var current_column = 1;\n var current_row = 1;\n \n _.each( this.image_options, function( image, index ) {\n if (!this.show_option_labels) {\n image.label = '';\n } else {\n image.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(image.label) : image.label;\n }\n if( Array.isArray( this.value ) ) {\n \tif( Array.isArray( this.value[ 0 ] ) && -1 !== _.indexOf( this.value[ 0 ], image.value ) ) {\n \t\tvalueFound = true;\n\t }\n else if( _.indexOf( this.value, image.value ) ) {\n valueFound = true;\n\t }\n }\n\n if ( image.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof image.visible ) {\n image.visible = true;\n }\n \n if(that.list_orientation === 'horizontal' && current_column <= num_columns) {\n image.styles = \"margin:auto;grid-column: \" + current_column + \"; grid-row = \" + current_row;\n\n if(current_column === num_columns) {\n current_column = 1;\n current_row += 1;\n } else {\n current_column += 1;\n }\n }\n\n image.image_type = that.image_type; \n image.fieldID = this.id;\n image.classes = this.classes;\n image.index = index;\n\n var selected = false;\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t if( Array.isArray( this.value ) && 0 < this.value.length ) {\n\t \tif ( -1 !== _.indexOf( this.value[ 0 ].split( ',' ), image.value )\n\t\t || -1 !== _.indexOf( this.value, image.value ) ) {\n\t\t\t selected = true;\n\t \t}\n\t } else if ( ! _.isArray( this.value ) && image.value == this.value ) {\n\t\t selected = true;\n\t } else if ( ( 1 == image.selected && this.clean ) && ('undefined' === typeof this.value || '' === this.value)) {\n\t\t selected = true;\n\t }\n\n\t image.selected = selected;\n\t image.isSelected = selected;\n\t image.required = this.required;\n image.maybeFilterHTML = this.maybeFilterHTML;\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-option' );\n html += template( image );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n value: this.value,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 1 == parseInt( fieldModel.get( 'allow_multi_select' ) ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += Number( tmp_opt.calc );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * If we have a selcted value, use it.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n\n if(model.get('allow_multi_select') !== 1) {\n var selected = jQuery( el ).val();\n var options = model.get('image_options');\n _.each(options, function(option, index) {\n if(option.value === selected) {\n option.isSelected = true;\n option.selected = true;\n } else {\n option.isSelected = false;\n option.selected = false;\n }\n if(!option.isSelected) {\n option.selected = false;\n jQuery(\"#nf-field-\" + option.fieldID + \"-\" + index).removeClass('nf-checked');\n jQuery(\"#nf-label-field-\" + option.fieldID + \"-\" + index).removeClass('nf-checked-label');\n } else {\n jQuery(\"#nf-field-\" + option.fieldID + \"-\" + index).addClass('nf-checked');\n jQuery(\"#nf-label-field-\" + option.fieldID + \"-\" + index).addClass('nf-checked-label');\n }\n });\n } else {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n } else if ( Array.isArray( selected ) ) {\n var optionArray = selected[0].split( ',' );\n var valueIndex = optionArray.indexOf( value );\n if( -1 !== valueIndex) {\n optionArray.splice( valueIndex, 1 );\n }\n selected = optionArray.join( ',' );\n }\n }\n }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRadio',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:modelValue', this.changeModelValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'init:model', this.register );\n\t\t\tnfRadio.channel( 'listradio' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\t\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:field', this.updateCheckedClass, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherText', this.renderOtherText );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\n\t\t\t\tif ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', selected.value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tchangeModelValue: function( model ) {\n\t\t\tif ( 1 == model.get( 'show_other' ) ) {\n\t\t\t\t// model.set( 'reRender', true );\n\t\t\t\tmodel.trigger( 'reRender');\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\t\t\tif ( '' == this.value ) {\n\t\t\t\tvar valueFound = true;\n\t\t\t} else {\n\t\t\t\tvar valueFound = false;\n\t\t\t}\n\t\t\t\n\t\t\t_.each( this.options, function( option, index ) {\n\t\t\t\tif ( option.value == this.value ) {\n\t\t\t\t\tvalueFound = true;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.selected = false;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.index = index;\n\t\t\t\toption.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n\t\t\t\toption.required = this.required;\n\n\t\t\t\t/*\n\t\t\t\t * If we haven't edited this field yet, use the default checked\n\t\t\t\t */\n\t\t\t\tif ( this.clean && 1 == this.selected ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else if ( this.value == option.value ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else {\n\t\t\t\t\toption.selected = false;\n\t\t\t\t}\n\n option.maybeFilterHTML = this.maybeFilterHTML;\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-option' );\n\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\tif ( 1 == this.show_other ) {\n\t\t\t\tif ( 'nf-other' == this.value ) {\n\t\t\t\t\tvalueFound = false;\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.id,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.value,\n\t\t\t\t\trenderOtherText: this.renderOtherText,\n\t\t\t\t\tvalueFound: valueFound\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other' );\n\t\t\t\thtml += template( data );\n\t\t\t}\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherText: function() {\n\t\t\tif ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n\t\t\t\tif ( 'nf-other' == this.currentValue ) {\n\t\t\t\t\tthis.currentValue = '';\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.fieldID,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.currentValue\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other-text' );\n\t\t\t\treturn template( data );\n\t\t\t}\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t\n /*\n * Default to 0, in case we have no selection.\n */\n var calc_value = 0;\n \n\t\t\tif ( 0 != fieldModel.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( fieldModel.get( 'options' ), function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t},\n\n\t\tupdateCheckedClass: function( el, model ) {\n\t\t\tjQuery( '[name=\"' + jQuery( el ).attr( 'name' ) + '\"]' ).removeClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'ul' ).find( 'label' ).removeClass( 'nf-checked-label' );\n\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'li' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\n\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldNumber',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'number' ), 'init:model', this.maybeMinDefault );\n this.listenTo( nfRadio.channel( 'number' ), 'keyup:field', this.validateMinMax );\n },\n\n maybeMinDefault: function( model ) {\n\n if( '' == model.get( 'value' ) && '' == model.get( 'placeholder' ) ){\n var min = model.get( 'num_min' );\n model.set( 'placeholder', min );\n }\n },\n\n validateMinMax: function( el, model ) {\n var $el = jQuery( el );\n var value = parseFloat( $el.val() );\n var min = $el.attr( 'min' );\n var max = $el.attr( 'max' );\n var step = parseFloat( $el.attr( 'step' ) );\n\n if( min && value < min ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-min', formModel.get( 'settings' ).fieldNumberNumMinError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-min' );\n }\n\n if ( max && value > max ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-max', formModel.get( 'settings' ).fieldNumberNumMaxError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-max' );\n }\n\n var testValue = Math.round( parseFloat( value ) * 1000000000 );\n var testStep = Math.round( parseFloat( step ) * 1000000000 );\n\n if( value && 0 !== testValue % testStep ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-step', formModel.get( 'settings' ).fieldNumberIncrementBy + step );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-step' );\n }\n }\n\n });\n\n return controller;\n} );\n","define( 'controllers/mirrorField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\n\tvar controller = Marionette.Object.extend( {\n\t\tlisteningModel: '',\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerMirror );\n\t\t},\n\n\t\tregisterMirror: function( model ) {\n\t\t\tif ( model.get( 'mirror_field' ) ) {\n\t\t\t\tthis.listeningModel = model;\n\t\t\t\tvar targetID = model.get( 'mirror_field' );\n\t\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetID ), 'change:modelValue', this.changeValue );\n\t\t\t}\n\t\t},\n\n\t\tchangeValue: function( targetModel ) {\n\t\t\tthis.listeningModel.set( 'value', targetModel.get( 'value' ) );\n\t\t\t// this.listeningModel.set( 'reRender', true );\n\t\t\tthis.listeningModel.trigger( 'reRender' );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define( 'controllers/confirmField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar errorID = 'confirm-mismatch';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerConfirm );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.confirmKeyup );\n\t\t},\n\n\t\tregisterConfirm: function( confirmModel ) {\n\t\t\tif ( ! confirmModel.get( 'confirm_field' ) ) return;\n\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', function( formModal ){\n\t\t\t\tthis.registerConfirmListeners( confirmModel );\n\t\t\t});\n\t\t},\n\n\t\tregisterConfirmListeners: function( confirmModel ) {\n\t\t\t\n\t\t\tvar targetModel = nfRadio.channel( 'form-' + confirmModel.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\n\t\t\t//TODO: Add better handling for password confirm fields on the front end.\n\t\t\tif( 'undefined' == typeof targetModel ) return;\n\n\t\t\ttargetModel.set( 'confirm_with', confirmModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + confirmModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t},\n\n\t\tchangeValue: function( model ) {\n\t\t\tif ( 'undefined' == typeof model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t} else {\n\t\t\t\tvar targetModel = model;\n\t\t\t\tvar confirmModel = radioChannel.request( 'get:field', targetModel.get( 'confirm_with' ) );\n\t\t\t}\n\t\t\tvar targetID = targetModel.get( 'id' );\n\t\t\tvar confirmID = confirmModel.get( 'id' );\n\n\t\t\tif ( '' == confirmModel.get( 'value' ) || confirmModel.get( 'value' ) == targetModel.get( 'value' ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t} else {\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t}\n\t\t},\n\t\t\n\t\tconfirmKeyup: function( el, model, keyCode ) {\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tif ( model.get( 'confirm_field' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar confirmID = model.get( 'id' );\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t\tvar compareValue = targetModel.get( 'value' );\n\t\t\t\tvar confirmValue = currentValue;\n\t\t\t} else if ( model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'confirm_with' ) );\n\t\t\t\tvar confirmID = confirmModel.get( 'id' );\n\t\t\t\tvar confirmValue = confirmModel.get( 'value' );\n\t\t\t\tvar compareValue = confirmValue;\n\t\t\t}\n\n\t\t\tif ( 'undefined' !== typeof confirmModel ) {\n\t\t\t\tif ( '' == confirmValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else if ( currentValue == compareValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/updateFieldModel',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'update:field', this.updateField );\n\t\t},\n\n\t\tupdateField: function( model, value ) {\n\t\t\tif ( ! model.get( 'isUpdated' ) ) {\n\t\t\t\tmodel.set( 'value', value );\n\t\t\t\tmodel.set( 'isUpdated', true );\n\t\t\t\t/*\n\t\t\t\t * If we're working with an array, it won't trigger a change event on the value attribute.\n\t\t\t\t * Instead, we have to manually trigger a change event.\n\t\t\t\t */ \n\t\t\t\tif ( _.isArray( value ) ) {\n\t\t\t\t\tmodel.trigger( 'change:value', model );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitButton',['controllers/submitButton'], function( submitButton ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tbound: {},\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'init:model', this.registerHandlers );\n\t\t},\n\n\t\tregisterHandlers: function( fieldModel ) {\n\t\t\tif ( 'undefined' != typeof this.bound[ fieldModel.get( 'id' ) ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'click:field', this.click, this );\n\t\t\t/*\n\t\t\t * Register an interest in the 'before:submit' event of our form.\n\t\t\t */\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'before:submit', this.beforeSubmit, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:failed', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:response', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'enable:submit', this.maybeEnable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'disable:submit', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'processingLabel', this.processingLabel, fieldModel );\n\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'add:error', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'remove:error', this.maybeEnable, fieldModel );\n\t\t\t\n\t\t\tthis.bound[ fieldModel.get( 'id') ] = true;\n\t\t},\n\n\t\tclick: function( e, fieldModel ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'submit', formModel );\n\t\t},\n\n\t\tbeforeSubmit: function() {\n\t\t\tthis.set( 'disabled', true );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'formID' ) ).trigger( 'processingLabel', this );\n\t\t},\n\n\t\tmaybeDisable: function( fieldModel ) {\n\n\t\t\tif( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) return;\n\n\t\t\tthis.set( 'disabled', true );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tmaybeEnable: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * If the field reporting the error is not on the same form as the submit button, return false;\n\t\t\t */\n\t\t\tif ( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', this.get( 'formID' ) );\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' ) ) ) {\n\t\t\t\tthis.set( 'disabled', false );\n\t\t\t\tthis.trigger( 'reRender' );\n\t\t\t}\n\t\t},\n\n\t\tprocessingLabel: function() {\n\t\t\tif ( this.get( 'label' ) == this.get( 'processing_label' ) ) return false;\n\n\t\t\tthis.set( 'oldLabel', this.get( 'label' ) );\n\t\t\tthis.set( 'label', this.get( 'processing_label' ) );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tresetLabel: function( response ) {\n\t\t\tif ( 'undefined' != typeof response.errors &&\n\t\t\t\t 'undefined' != typeof response.errors.nonce &&\n\t\t\t\t _.size( response.errors.nonce ) > 0 ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.nonce.new_nonce && 'undefined' != typeof response.errors.nonce.nonce_ts ) {\n\t\t\t\t\t// Do not reset label for nonce errors, which will re-submit the form.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( 'undefined' != typeof this.get( 'oldLabel' ) ) {\n\t\t\t\tthis.set( 'label', this.get( 'oldLabel' ) );\n\t\t\t}\n\t\t\tthis.set( 'disabled', false );\n\t\t\tthis.trigger( 'reRender' );\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitDebug',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitDebug );\n },\n\n submitDebug: function( response, textStatus, jqXHR, formID ) {\n\n if( 'undefined' == typeof response.debug ) return;\n\n /* Form Debug Messages */\n if( 'undefined' != typeof response.debug.form ) {\n var debugMessages = document.createElement( 'span' );\n _.each(response.debug.form, function (message, index) {\n var messageText = document.createTextNode( message );\n debugMessages.appendChild( messageText );\n debugMessages.appendChild(\n document.createElement( 'br' )\n );\n });\n jQuery('.nf-debug-msg').html( debugMessages );\n }\n\n /* Console Debug Messages */\n if( 'undefined' != typeof response.debug.console ) {\n var style = '';\n console.log( '%c%s', style, 'NINJA SUPPORT' );\n _.each(response.debug.console, function (message, index) {\n console.log( message );\n });\n console.log( '%c%s', style, 'END NINJA SUPPORT' );\n }\n }\n\n });\n\n return controller;\n} );\n\n","define('controllers/getFormErrors',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function( model ) {\n\t\t\tnfRadio.channel( 'form' ).reply( 'get:errors', this.getFormErrors );\n\t\t},\n\n\t\tgetFormErrors: function( formID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\tvar errors = false;\n\t\t\t\n\t\t\tif ( formModel ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have any errors on our form model.\n\t\t\t\t */\n\t\t\t\tif ( 0 !== formModel.get( 'errors' ).length ) {\n\t\t\t\t\t_.each( formModel.get( 'errors' ).models, function( error ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ error.get( 'id' ) ] = error.get( 'msg' );\n\t\t\t\t\t} );\t\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t_.each( formModel.get( 'fields' ).models, function( field ) {\n\t\t\t\t\tif ( field.get( 'type' ) != 'submit' && field.get( 'errors' ).length > 0 ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ field.get( 'id' ) ] = field.get( 'errors' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn errors;\n\t\t},\n\t});\n\n\treturn controller;\n} );\n","define('controllers/validateRequired',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'keyup:field', this.validateKeyup );\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.validateModelData );\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'validate:field', this.validateModelData );\n\t\t},\n\t\t\n\t\tvalidateKeyup: function( el, model, keyCode ) {\n\t\t\tif ( 1 != model.get( 'required' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( ! model.get( 'clean' ) ) {\n\t\t\t\tthis.validateRequired( el, model );\n\t\t\t}\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:required', el, model );\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tvar maskPlaceholder = model.get( 'mask' );\n\t\t\tif ( maskPlaceholder ) {\n\t\t\t\tmaskPlaceholder = maskPlaceholder.replace( /9/g, '_' );\n\t\t\t\tmaskPlaceholder = maskPlaceholder.replace( /a/g, '_' );\n\t\t\t\tmaskPlaceholder = maskPlaceholder.replace( /\\*/g, '_' );\n\t\t\t}\n\n // If the field has a mask...\n // AND that mask is equal to the current value... \n if ( maskPlaceholder && currentValue === maskPlaceholder ) {\n // If we have a pre-existing error...\n if ( 0 < model.get( 'errors' ).length ) {\n // Persist that error.\n defaultReqValidation = false;\n }\n }\n // If our value is an empty string...\n if ( ! jQuery.trim( currentValue ) ) {\n // Throw an error.\n defaultReqValidation = false;\n }\n\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) || model.get( 'clean' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * If we already have a required error on this model, return false\n\t\t\t */\n\t\t\tif ( model.get( 'errors' ).get( 'required-error' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcurrentValue = model.get( 'value' );\n\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tif ( ! jQuery.trim( currentValue ) ) {\n\t\t\t\tdefaultReqValidation = false;\n\t\t\t}\n\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:modelData', model );\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\n\t\t},\n\n\t\tmaybeError: function( valid, model ) {\n\t\t\tif ( ! valid ) {\n\n\t\t\t\tvar formModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:form' );\n\n\t\t\t\tif( 'undefined' != typeof formModel ) {\n\t\t\t\t\tnfRadio.channel('fields').request('add:error', model.get('id'), 'required-error', formModel.get('settings').validateRequiredField);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n\t\t\t}\t\t\t\n\t\t}\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/submitError',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitErrors );\n\t\t},\n\n\t\tsubmitErrors: function( response, textStatus, jqXHR, formID ) {\n\n\t\t\t// Check for nonce error.\n\t\t\tif ( _.size( response.errors.nonce ) > 0 ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.nonce.new_nonce && 'undefined' != typeof response.errors.nonce.nonce_ts ) {\n\t\t\t\t\t// Update nonce from response.\n\t\t\t\t\tnfFrontEnd.ajaxNonce = response.errors.nonce.new_nonce;\n\t\t\t\t\tnfFrontEnd.nonce_ts = response.errors.nonce.nonce_ts;\n\t\t\t\t\t// Re-submit form.\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'submit', formModel );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.fields ) > 0 ) {\n\t\t\t\t_.each( response.errors.fields, function( data, fieldID ) {\n if ( typeof( data ) === 'object' ) {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, data.slug, data.message );\n } else {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, 'required-error', data );\n }\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.form ) > 0 ) {\n\t\t\t\t_.each( response.errors.form, function( msg, errorID ) {\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'remove:error', errorID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'add:error', errorID, msg );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( 'undefined' != typeof response.errors.last ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.last.message ) {\n\t\t\t\t\tvar style = 'background: rgba( 255, 207, 115, .5 ); color: #FFA700; display: block;';\n\t\t\t\t\tconsole.log( '%c NINJA FORMS SUPPORT: SERVER ERROR', style );\n\t\t\t\t\tconsole.log( response.errors.last.message );\n\t\t\t\t\tconsole.log( '%c END SERVER ERROR MESSAGE', style );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t */\n\t\t\t/*\n\t\t\t * Re-show any hidden fields during a form submission re-start.\n\t\t\t */\n\t\t\tjQuery( '#nf-form-' + formID + '-cont .nf-field-container' ).show();\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/actionRedirect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionRedirect );\n\t\t},\n\n\t\tactionRedirect: function( response ) {\n\n\t\t\tif ( 'undefined' != typeof response.data.halt && 'undefined' != typeof response.data.halt.redirect && '' != response.data.halt.redirect ) {\n\t\t\t\twindow.location = response.data.halt.redirect;\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.redirect && '' != response.data.actions.redirect ) {\n\t\t\t\t\twindow.location = response.data.actions.redirect;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/actionSuccess',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.success_message && '' != response.data.actions.success_message ) {\n\t\t\t\t\tvar form_id = response.data.form_id;\n\t\t\t\t\tvar success_message = jQuery( '#nf-form-' + form_id + '-cont .nf-response-msg' );\n\t\t\t\t\t\n\t\t\t\t\tsuccess_message.html( response.data.actions.success_message ).show();\n\t\t\t\t\t\n\t\t\t\t\t//Let's check if the success message is already fully visible in the viewport without scrolling\n\t\t\t\t\tvar top_of_success_message = success_message.offset().top;\n\t\t\t\t\tvar bottom_of_success_message = success_message.offset().top + success_message.outerHeight();\n\t\t\t\t\tvar bottom_of_screen = jQuery(window).scrollTop() + jQuery(window).height();\n\t\t\t\t\tvar top_of_screen = jQuery(window).scrollTop();\n\n\t\t\t\t\tvar the_element_is_visible = ((bottom_of_screen > bottom_of_success_message) && (top_of_screen < top_of_success_message));\n\n\t\t\t\t\tif(!the_element_is_visible){\n\t\t\t\t\t\t//The element isn't visible, so let's scroll to the success message as in the previous release, but with a short animation\n\t\t\t\t\t\tjQuery('html, body').animate({\n\t\t\t\t\t\t\tscrollTop: ( success_message.offset().top - 50 )\n\t\t\t\t\t\t}, 300 );\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldSelect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'init:model', function( model ){\n\t\t\t\tif( 'list' == model.get( 'parentType' ) ) this.register( model );\n\t\t\t}, this );\n\n\t\t\tnfRadio.channel( 'listselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\tnfRadio.channel( 'listmultiselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherAttributes', this.renderOtherAttributes );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t//Check to see if there is a value set for the field\n\t\t\t\tvar savedVal = model.get( 'value' );\n\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\tselected = _.map( selected, function( opt ) { return opt.value } );\n\t\t\t\t\tvar value = selected;\n\t\t\t\t} else if ( 'listradio' !== model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = _.first( model.get( 'options' ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof selected\n\t\t\t\t\t\t&& 'undefined' != typeof selected.value ) {\n\t\t\t\t\t\tvar value = selected.value;\n\t\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\t\tvar value = selected.label;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t/*\n\t * This part is re-worked to take into account custom user-meta\n\t * values for fields.\n\t */\n\t\t\t\tif( 'undefined' !== typeof savedVal && '' !== savedVal\n\t\t\t\t\t&& Array.isArray( savedVal ) ) {\n\t\t\t\t\tmodel.set( 'value', savedVal );\n\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\n\t\t\t_.each( this.options, function( option ) {\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t\t\t\tif ( _.isArray( this.value ) ) {\n // If we have a multiselect list...\n // AND it has selected values...\n\t\t\t\t\tif( 'listmultiselect' === this.type && 0 < this.value.length &&\n\t\t\t\t\t\t-1 != _.indexOf( this.value[ 0 ].split( ',' ), option.value ) ) {\n\t\t\t\t\t\tvar selected = true;\n\t\t\t\t\t} else if( -1 != _.indexOf( this.value, option.value ) ) {\n\t\t\t\t\t\tvar selected = true;\n\t\t\t\t\t}\n\t\t\t\t} else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else if ( ( 1 == option.selected && this.clean )\n\t\t\t\t\t&& 'undefined' === typeof this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else {\n\t\t\t\t\tvar selected = false;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n\t\t\t\toption.selected = selected;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n\t\t\t\t\n option.maybeFilterHTML = this.maybeFilterHTML;\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listselect-option' );\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherAttributes: function() {\n\t\t\tvar otherAttributes = '';\n\n\t\t\tif( 'listmultiselect' == this.type ){\n\t\t\t\totherAttributes = otherAttributes + ' multiple';\n\n\t\t\t\tvar multiSize = this.multi_size || 5;\n\t\t\t\totherAttributes = otherAttributes + ' size=\"' + multiSize + '\"';\n\t\t\t}\n\n\t\t\treturn otherAttributes;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == fieldModel.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += Number( tmp_opt.calc );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = fieldModel.get( 'options' )[0];\n\t\t\t\t\t}\t\t\n\t\t\t\t\tcalc_value = selected.calc;\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/coreSubmitResponse',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', response.data.form_id );\n\t\t\t/*\n\t\t\t * If we have errors, don't hide or clear.\n\t\t\t */\n\t\t\tif ( 0 != _.size( response.errors ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.clear_complete ) {\n\t\t\t\t// nfRadio.channel( 'form-' + response.data.form_id ).trigger( 'reset' );\n\t\t\t\tformModel.get( 'fields' ).reset( formModel.get( 'loadedFields' ) );\n if ( 1 != response.data.settings.hide_complete ) {\n nfRadio.channel( 'captcha' ).trigger( 'reset' );\n }\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.hide_complete ) {\n\t\t\t\t/**\n\t\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t\t */\n\t\t\t\tformModel.trigger( 'hide' );\n\t\t\t\t// jQuery( '.nf-fields' ).hide();\n\t\t\t\t// jQuery( '.nf-form-title' ).hide();\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldProduct',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'product' ), 'init:model', this.register );\n nfRadio.channel( 'product' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderProductQuantity', this.renderProductQuantity );\n model.set( 'renderProduct', this.renderProduct );\n model.set( 'renderOptions', this.renderOptions );\n },\n\n renderProduct: function(){\n switch( this.product_type ) {\n case 'user':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-textbox' );\n return template( this );\n break;\n case 'hidden':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-hidden' );\n return template( this );\n break;\n\n case 'dropdown':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-dropdown' );\n return template( this );\n break;\n default:\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-single' );\n return template( this );\n }\n },\n\n renderProductQuantity: function(){\n if ( 1 == this.product_use_quantity ) {\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-quantity' );\n return template( this );\n }\n },\n\n renderOptions: function() {\n var that = this;\n var html = '';\n _.each( this.options, function( option ) {\n if ( 1 == option.selected ) {\n var selected = true;\n } else {\n var selected = false;\n }\n\n option.selected = selected;\n option.fieldID = that.id;\n option.classes = that.classes;\n option.currentValue = that.value;\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-' + that.product_type + '-option' );\n html += template( option );\n } );\n\n return html;\n },\n\n getCalcValue: function( fieldModel ) {\n\n var product_price = fieldModel.get( 'product_price' );\n var product_quantity = fieldModel.get( 'value' );\n\n return product_price * product_quantity;\n }\n });\n\n return controller;\n} );\n\n","define('controllers/fieldTotal',[], function() {\n var controller = Marionette.Object.extend( {\n\n totalModel: {},\n\n productTotals: {},\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'total' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'shipping' ), 'init:model', this.registerShipping );\n },\n\n register: function( totalModel ){\n this.totalModel = totalModel;\n\n var formID = totalModel.get( 'formID' );\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'loaded', this.onFormLoaded );\n\n this.listenTo( nfRadio.channel( 'product' ), 'change:modelValue', this.onChangeProduct );\n this.listenTo( nfRadio.channel( 'quantity' ), 'change:modelValue', this.onChangeQuantity );\n },\n\n registerShipping: function( shippingModel ){\n this.shippingCost = shippingModel.get( 'shipping_cost' );\n },\n\n onFormLoaded: function( formModel ){\n\n var fieldModels = formModel.get( 'fields' ).models;\n\n var productFields = {};\n var quantityFields = {};\n\n for( var model in fieldModels ){\n\n var field = fieldModels[ model ];\n var fieldID = field.get( 'id' );\n\n // TODO: Maybe use switch\n if( 'product' == field.get( 'type' ) ){\n productFields[ fieldID ] = field;\n } else if( 'quantity' == field.get( 'type' ) ){\n var productID = field.get( 'product_assignment' );\n quantityFields[ productID ] = field;\n }\n }\n\n for( var productID in productFields ){\n\n var product = productFields[ productID ];\n\n var productPrice = Number( product.get( 'product_price' ) );\n\n if( quantityFields[ productID ] ){\n\n productPrice *= quantityFields[ productID ].get( 'value' );\n\n } else if( 1 == product.get( 'product_use_quantity' ) ){\n\n productPrice *= product.get( 'value' );\n\n }\n\n this.productTotals[ productID ] = productPrice;\n }\n\n this.updateTotal();\n },\n\n onChangeProduct: function( model ){\n var productID = model.get( 'id' );\n var productPrice = Number( model.get( 'product_price' ) );\n var productQuantity = Number( model.get( 'value' ) );\n var newTotal = productQuantity * productPrice;\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n onChangeQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var productField = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n var productPrice = Number( productField.get( 'product_price' ) );\n\n var quantity = Number( model.get( 'value' ) );\n\n var newTotal = quantity * productPrice;\n\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n updateTotal: function(){\n\n var newTotal = 0;\n\n for( var product in this.productTotals ){\n newTotal += Number( this.productTotals[ product ] );\n }\n\n if( newTotal && this.shippingCost ) {\n // Only add shipping if there is a cost.\n newTotal += Number(this.shippingCost);\n }\n\n this.totalModel.set( 'value', newTotal.toFixed( 2 ) );\n this.totalModel.trigger( 'reRender' );\n }\n });\n\n return controller;\n});\n","define('controllers/fieldQuantity',[], function() {\n var controller = Marionette.Object.extend( {\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'quantity' ), 'init:model', this.registerQuantity );\n },\n\n registerQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var product = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n\n if( product ) {\n product.set('product_use_quantity', 0);\n }\n },\n\n });\n\n return controller;\n});\n","/**\n * Model that represents a calculation.\n *\n * On init, we trigger a radio message so that controllers can do things when a calc model inits.\n */\ndefine( 'models/calcModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\t\tinitialize: function() {\n\t\t\t// Set our form id\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\t// Set our initial fields object to empty. This will hold our key/value pairs.\n\t\t\tthis.set( 'fields', {} );\n\t\t\t// Trigger a radio message to let controllers know we've inited this model.\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'init:model', this );\n\t\t\t// When we change the value of this calculation, send out a radio message\n\t\t\tthis.on( 'change:value', this.changeValue, this );\n\t\t},\n\n\t\t/**\n\t\t * Trigger a radio message when a field present in our calculation changes\n\t\t *\n\t\t * The listener that triggers/calls this function is in controllers/calculations\n\t\t * \n\t\t * @since 3.0\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( fieldModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:field', this, fieldModel );\n\t\t},\n\n\t\tchangeCalc: function( targetCalcModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:calc', this, targetCalcModel );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:value', this );\n\t\t}\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/calcCollection',['models/calcModel'], function( CalcModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: CalcModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n _.each( models, function( model ) {\n \tif( 'undefined' == typeof model.dec ) return;\n if ( '' === model.dec.toString().trim() ) model.dec = 2;\n model.dec = parseInt( model.dec );\n } );\n\t\t\t/*\n\t\t\t * Respond to requests for our calc model\n\t\t\t */\n\t\t\tnfRadio.channel( 'form-' + options.formModel.get( 'id' ) ).reply( 'get:calc', this.getCalc, this );\n\t\t},\n\n\t\tgetCalc: function( key ) {\n\t\t\treturn this.findWhere( { name: key } );\n\t\t}\n\t} );\n\treturn collection;\n} );\n","/**\n * Controller responsible for keeping up with calculations.\n */\ndefine('controllers/calculations',['models/calcCollection'], function( CalcCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.calcs = {};\n\t\t\tthis.displayFields = {};\n\t\t\t// When our form initialises, check to see if there are any calculations that need to be tracked.\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', this.registerCalcs );\n \n // When our collection gets reset, reset calculation tracking as well.\n this.listenTo( nfRadio.channel( 'fields' ), 'reset:collection', this.resetCalcs );\n\n\t\t\t// When a calc model is initialised, run a setup function.\n\t\t\t// this.listenTo( nfRadio.channel( 'calc' ), 'init:model', this.setupCalc );\n\n\t\t\t// When a field referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:field', this.changeField );\n\n\t\t\t// When a calculation referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:calc', this.changeCalc );\n\n\t\t\t/*\n\t\t\t * Listen to our field model init for fields that want to display calc values.\n\t\t\t * If that field has a calc merge tag, replace it with the default calc value.\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t_.each( nfFrontEnd.use_merge_tags.calculations, function( fieldType ) {\n\t\t\t\tthat.listenTo( nfRadio.channel( 'fields-' + fieldType ), 'init:model', that.initDisplayField );\n\t\t\t} );\n\t\t\t\n\t\t\t// When we change our calc value, update any display fields.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:value', this.updateDisplayFields );\n\n\t\t\t// Set an init variable so that we only call reRender on the display field on change, not on init.\n\t\t\tthis.init = {};\n\t\t},\n \n /**\n * Passthrough function to reset tracking of calculations when the fieldCollection is reset.\n * \n * @since 3.2\n * @param backbone.collection fieldCollection\n * @return void\n */\n resetCalcs: function( fieldCollection ) {\n if( 'undefined' != typeof( fieldCollection.options.formModel ) ) {\n this.registerCalcs( fieldCollection.options.formModel ); \n }\n },\n\n\t\t/**\n\t\t * When our form loads, create a collection out of any calculations.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model formModel\n\t\t * @return void\n\t\t */\n\t\tregisterCalcs: function( formModel ) {\n\t\t\tvar calcCollection = new CalcCollection( formModel.get( 'settings' ).calculations, { formModel: formModel } );\n\t\t\tthis.calcs[ formModel.get( 'id' ) ] = calcCollection;\n\t\t\tvar that = this;\n\n\t\t\t_.each( calcCollection.models, function( calcModel ) {\n\t\t\t\t/*\n\t\t\t\t * We set a property on our init variable for the calc model we're looping over.\n\t\t\t\t * This property is set to true so that when we make changes to the calc model on the next line\n\t\t\t\t * the field view doesn't try to redraw itself.\n\t\t\t\t * If we don't do this, the 'reRender' attribute of the model will be set before the view is initialized,\n\t\t\t\t * which means that setting 'reRender' to true will never re-render the view.\n\t\t\t\t */\n\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = true;\n\t\t\t\t// Setup our calculation models with initial values and register listeners for calc-related fields.\n\t\t\t\tthat.setupCalc( calcModel );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * When a calculation model is instantiated from the registerCalcs function:\n\t\t *\n\t\t * Use a regex to get an array of the field keys\n\t\t * Setup an initial key/values array\n\t\t * Check for any references to other calculations\n\t\t * Set the initial value of our calculation\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @return void\n\t\t */\n\t\tsetupCalc: function( calcModel ) {\n\t\t\t// Setup our that var so we can access 'this' context in our loop.\n\t\t\tvar that = this;\n\t\t\t// Get our equation\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\t// We want to keep our original eq intact, so we use a different var for string replacment.\n\t\t\tvar eqValues = eq;\n // Store the name for debugging later.\n var calcName = calcModel.get( 'name' );\n\n\t\t\t/* TODO:\n\t\t\t * It might be possible to refactor these two if statements.\n\t\t\t * The difficulty is that each has a different method of retreiving the specific data model.\n\t\t\t */\n\t\t\t// Check to see if we have any field merge tags in our equation.\n\t\t\tvar fields = eq.match( new RegExp( /{field:(.*?)}/g ) );\n\t\t\tif ( fields ) {\n\t\t\t\t/*\n\t\t\t\t * fields is now an array of field keys that looks like:\n\t\t\t\t * ['{field:key'], ['{field:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our field keys to setup our field key array and hook up our field change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tfields = fields.map( function( field ) {\n\t\t\t\t\t// field will be {field:key}\n\t\t\t\t\tvar key = field.replace( ':calc}', '' ).replace( '}', '' ).replace( '{field:', '' );\n\n\t\t\t\t\t// Get our field model\n\t\t\t\t\tfieldModel = nfRadio.channel( 'form-' + calcModel.get( 'formID' ) ).request( 'get:fieldByKey', key );\n\n if( 'undefined' == typeof fieldModel ) return;\n\n fieldModel.set( 'clean', false );\n\n\t\t\t\t\t// Register a listener in our field model for value changes.\n\t\t\t\t\tfieldModel.on( 'change:value', calcModel.changeField, calcModel );\n\t\t\t\t\t// Get our calc value from our field model.\n\t\t\t\t\tvar calcValue = that.getCalcValue( fieldModel );\n\t\t\t\t\t// Add this field to our internal key/value object.\n\t\t\t\t\tthat.updateCalcFields( calcModel, key, calcValue );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'field', key, calcValue, eqValues );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check to see if we have any calc merge tags in our equation.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t/*\n\t\t\t\t * calcs is now an array of calc keys that looks like:\n\t\t\t\t * ['{calc:key'], ['{calc:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our calc keys to setup our calc key array and hook up our calc change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tcalcs = calcs.map( function( calc ) {\n\t\t\t\t\t// calc will be {calc:name}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\t// Get our calc model\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n\n\t\t\t\t\tif( 'undefined' == typeof targetCalcModel ) return;\n\n\t\t\t\t\t// Listen for changes on our calcluation, since we need to update our calc when it changes.\n\t\t\t\t\ttargetCalcModel.on( 'change:value', calcModel.changeCalc, calcModel );\n\t\t\t\t\t// // Get our calc value from our calc model.\n\t\t\t\t\tvar calcValue = targetCalcModel.get( 'value' );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'calc', name, calcValue, eqValues );\n\t\t\t\t} );\n\n\t\t\t}\n\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, 0 );\n // Scrub line breaks.\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n\t\t\t// Evaluate the equation and update the value of this model.\n\t\t\ttry {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Setup)');\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation(eqValues) ) ).toFixed( calcModel.get( 'dec' ) ) );\n\t\t\t} catch( e ) {\n //console.log( calcName );\n\t\t\t\tconsole.log( e );\n\t\t\t}\n \n // If for whatever reason, we got NaN, reset that to 0.\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\n\t\t},\n\n\t\t/**\n\t\t * Update an item in our key/value pair that represents our fields and calc values.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @param string \t\t\tkey\n\t\t * @param string \t\t\tcalcValue\n\t\t * @return void\n\t\t */\n\t\tupdateCalcFields: function( calcModel, key, calcValue ) {\n\t\t\tvar fields = calcModel.get( 'fields' );\n\t\t\tfields[ key ] = calcValue;\n\t\t\tcalcModel.set( 'fields', fields );\n\t\t},\n\n\t\t/**\n\t\t * Get a calc value from a field model.\n\t\t *\n\t\t * Sends a request to see if there's a special calc value\n\t\t * Uses the value of the field if there is not.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model fieldModel\n\t\t * @return value\n\t\t */\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * Send out a request on the field type and parent type channel asking if they need to modify the calc value.\n\t\t\t * This is helpful for fields like lists that can have a different calc_value than selected value.\n\t\t\t */\n\t\t\tvar value = nfRadio.channel( fieldModel.get( 'type' ) ).request( 'get:calcValue', fieldModel );\n\t\t\t\n\t\t\t// Preset with our field value.\n\t\t\tvar calcValue = fieldModel.get( 'value' );\n\t\t\tif( 'undefined' !== typeof value ) {\n\t\t\t\tif( value || 0 === value ) {\n\t\t\t\t\t// If we got a valid number, use that instead.\n\t\t\t\t\tcalcValue = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\t\t\tvar machineNumber = localeConverter.numberDecoder(calcValue);\n\t\t\tvar formattedNumber = localeConverter.numberEncoder(calcValue);\n\n\t\t\tif ( 'undefined' !== typeof machineNumber && jQuery.isNumeric( machineNumber ) ) {\n\t\t\t\tvalue = formattedNumber;\n\t\t\t} else {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\t// }\n\n\t\t\tif ( ! fieldModel.get( 'visible' ) ) {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\n\t\t\treturn value;\n\t\t},\n\n\t\t/**\n\t\t * Replace instances of key with calcValue. This is used to replace one key at a time.\n\t\t *\n\t\t * If no eq is passed, use calcModel eq.\n\t\t *\n\t\t * Returns a string with instances of key replaced with calcValue.\n\t\t * \n\t\t * @since version\n\t\t * @param string \tkey \n\t\t * @param string \tcalcValue \n\t\t * @param string \teq \n\t\t * @return string \teq \n\t\t */\n\t\treplaceKey: function( type, key, calcValue, eq ) {\n\t\t\teq = eq || calcModel.get( 'eq' );\n\n\t\t\ttag = '{' + type + ':' + key + '}';\n\t\t\tvar reTag = new RegExp( tag, 'g' );\n\n\t\t\tcalcTag = '{' + type + ':' + key + ':calc}';\n\t\t\tvar reCalcTag = new RegExp( calcTag, 'g' );\n\n\t\t\teq = eq.replace( reTag, calcValue );\n\t\t\teq = eq.replace( reCalcTag, calcValue );\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Takes a calcModel and returns a string eq with all keys replaced by their appropriate calcValues.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @return string\t\t\teq\n\t\t */\n\t\treplaceAllKeys: function( calcModel ) {\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\tvar that = this;\n\t\t\t_.each( calcModel.get( 'fields' ), function( value, key ) {\n\t\t\t\teq = that.replaceKey( 'field', key, value, eq );\n\t\t\t} );\n\n\t\t\t// If we have any calc merge tags, replace those as well.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calc ) {\n\t\t\t\t\t// calc will be {calc:key}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n if( 'undefined' == typeof targetCalcModel ) return;\n\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\teq = eq.replace( re, targetCalcModel.get( 'value' ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Function that's called when a field within the calculation changes.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @param backbone.model fieldModel\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( calcModel, fieldModel ) {\n\t\t\n\t\t\tvar key = fieldModel.get( 'key' );\n\t\t\tvar value = this.getCalcValue( fieldModel );\n\t\t\t\n\t\t\tthis.updateCalcFields( calcModel, key, value );\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, '0' );\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Change Field)');\n\t\t\t calcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation(eqValues) ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n if(this.debug())console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\t\t\n\t\t},\n\n\t\tinitDisplayField: function( fieldModel ) {\n\n\t\t\tif( ! fieldModel.get( 'default' ) || 'string' != typeof fieldModel.get( 'default' ) ) return;\n\n\t\t\tvar calcs = fieldModel.get( 'default' ).match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calcName ) {\n\t\t\t\t\tcalcName = calcName.replace( '{calc:', '' ).replace( '}', '' ).replace( ':2', '' );\n\t\t\t\t\tthis.displayFields[ calcName ] = this.displayFields[ calcName ] || [];\n\t\t\t\t\tthis.displayFields[ calcName ].push( fieldModel );\n\t\t\t\t}, this );\n\t\t\t}\n\t\t},\n\n\t\tupdateDisplayFields: function( calcModel ) {\n\t\t\tvar that = this;\n\t\t\tif ( 'undefined' != typeof this.displayFields[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t_.each( this.displayFields[ calcModel.get( 'name' ) ], function( fieldModel ) {\n\n\t\t\t\t\tvar value = '';\n\n\t\t\t\t\t/**\n\t\t\t\t\t * if we have a html field, we want to use the actual\n\t\t\t\t\t * value and re-evaluate\n\t\t\t\t **/\n\t\t\t\t\tif( \"html\" === fieldModel.get( 'type' ) ) {\n\t\t\t\t\t\tvalue = fieldModel.get( 'value' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// if not a html field, use default to re-evaluate\n\t\t\t\t\t\tvalue = fieldModel.get( 'default' );\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t This is a fix for the issue of the merge tags being\n\t\t\t\t\t display'd\n\t\t\t\t\t */\n\n\t\t\t\t\t// Find spans with calc data-key values\n\t\t\t\t\tvar spans = value.match( new RegExp( //g ));\n\t\t\t\t\t_.each( spans, function( spanVar ) {\n\t\t\t\t\t\t// transform the span back into a merge tag\n\t\t\t\t\t\tvar tmpCalcTag = \"{\" + spanVar.replace(\"(.*?)<\\/span>/, \"\" ) + \"}\";\n\n\t\t\t\t\t\tvalue = value.replace( spanVar, tmpCalcTag );\n\t\t\t\t\t} );\n\t\t\t\t\tvar calcs = value.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\t\t\t_.each( calcs, function( calc ) {\n//\t\t\t\t\t\tvar rounding = false;\n\t\t\t\t\t\t// calc will be {calc:key} or {calc:key:2}\n\t\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' ).replace( ':2', '' );\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * TODO: Bandaid for rounding calculations to two decimal places when displaying the merge tag.\n\t\t\t\t\t\t * Checks to see if we have a :2. If we do, remove it and set our rounding variable to true.\n\t\t\t\t\t\t */\n//\t\t\t\t\t\tif ( -1 != name.indexOf( ':2' ) ) {\n//\t\t\t\t\t\t\trounding = true;\n//\t\t\t\t\t\t\tname = name.replace( ':2', '' );\n//\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar calcModel = that.calcs[ fieldModel.get( 'formID' ) ].findWhere( { name: name } );\n\t\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\t\tvar calcValue = calcModel.get( 'value' ) ;\n//\t\t\t\t\t\tif ( rounding ) {\n//\t\t\t\t\t\t\tcalcValue = calcValue.toFixed( 2 );\n//\t\t\t\t\t\t\trounding = false;\n//\t\t\t\t\t\t}\n\t\t\t\t\t\t\n if( 'undefined' != typeof( calcValue ) ) {\n calcValue = that.applyLocaleFormatting( calcValue, calcModel );\n\t\t\t\t\t\t}\n /*\n * We replace the merge tag with the value\n\t\t\t\t\t\t * surrounded by a span so that we can still find it\n\t\t\t\t\t\t * and not affect itself or other field merge tags\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Unless this isn't a html field, then we just set\n\t\t\t\t\t\t * value to calcValue\n\t\t\t\t\t\t*/\n if( \"html\" === fieldModel.get( 'type' ) ) {\n\t value = value.replace(re, \"\"\n\t\t + calcValue + \"\");\n } else {\n \tvalue = calcValue;\n }\n\t\t\t\t\t} );\n\t\t\t\t\t\n\t\t\t\t\tfieldModel.set( 'value', value );\n\t\t\t\t\tif ( ! that.init[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t\t\t// fieldModel.set( 'reRender', true );\n\t\t\t\t\t\tfieldModel.trigger( 'reRender' );\n\t\t\t\t\t}\n\t\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = false;\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\n\t\tgetCalc: function( name, formID ) {\n\t\t\treturn this.calcs[ formID ].findWhere( { name: name } );\n\t\t},\n\n\t\tchangeCalc: function( calcModel, targetCalcModel ) {\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\t\t\t\n\t\t\teqValues = eqValues.replace( '[', '' ).replace( ']', '' );\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Change Calc)');\n\t\t\t calcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation( eqValues ) ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\t\t},\n \n /**\n * Function to apply Locale Formatting to Calculations\n * @since Version 3.1\n * @param Str number\n * \n * @return Str\n */\n applyLocaleFormatting: function( number, calcModel ) {\n\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\tvar formattedNumber = localeConverter.numberEncoder(number, calcModel.get('dec'));\n \n // // Split our string on the decimal to preserve context.\n // var splitNumber = number.split('.');\n // // If we have more than one element (if we had a decimal point)...\n // if ( splitNumber.length > 1 ) {\n // // Update the thousands and remerge the array.\n // splitNumber[ 0 ] = splitNumber[ 0 ].replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n // var formattedNumber = splitNumber.join( nfi18n.decimal_point );\n // }\n // // Otherwise (we had no decimal point)...\n // else {\n // // Update the thousands.\n // var formattedNumber = number.replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n // }\n return formattedNumber;\n\t\t},\n\t\t\n\t\tlocaleDecodeEquation: function( eq ) {\n\t\t\tvar result = '';\n\t\t\tvar expression = '';\n\t\t\tvar pattern = /[0-9.,]/;\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\t\t\t// This pattern accounts for all whitespace characters (including thin space).\n\t\t\teq = eq.replace( /\\s/g, '' );\n\t\t\teq = eq.replace( / /g, '' );\n\t\t\tvar characters = eq.split('');\n\t\t\t// foreach ( characters as character ) {\n\t\t\tcharacters.forEach( function( character ) {\n\t\t\t\t// If the character is numeric or '.' or ','\n\t\t\t\tif (pattern.test(character)) {\n\t\t\t\t\texpression = expression + character;\n\t\t\t\t} else {\n\t\t\t\t\t// If we reach an operator char, append the expression to the result\n\t\t\t\t\tif ( 0 < expression.length ) {\n\t\t\t\t\t\tresult = result + localeConverter.numberDecoder( expression );\n\t\t\t\t\t\texpression = '';\n\t\t\t\t\t}\n\t\t\t\t\tresult = result + character;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// The following catches the case of the last character being a digit.\n\t\t\tif ( 0 < expression.length ) {\n\t\t\t\tresult = result + localeConverter.numberDecoder( expression );\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\n\t\tdebug: function(message) {\n\t\t\tif ( window.nfCalculationsDebug || false ) console.log(message);\n\t\t}\n\t\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/dateBackwardsCompat',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( Backbone.Radio.channel( 'pikaday-bc' ), 'init', this.dateBackwardsCompat );\t\n },\n\n dateBackwardsCompat: function( dateObject, fieldModel ) {\n \n /**\n * Start backwards compatibility for old pikaday customisation\n */\n // Legacy properties\n dateObject.pikaday = {};\n dateObject.pikaday._o = {};\n\n //Old hook for Pikaday Custom code\n nfRadio.channel( 'pikaday' ).trigger( 'init', dateObject, fieldModel );\n\n // If we've set a disableDayFn property in custom code, hook it up to Flatpickr\n if ( typeof dateObject.pikaday._o.disableDayFn !== 'undefined') {\n dateObject.set( 'disable', [ dateObject.pikaday._o.disableDayFn ] );\n }\n\n //Compatibility for i18n pikaday function\n if ( typeof dateObject.pikaday._o.i18n !== 'undefined' || typeof dateObject.pikaday._o.firstDay !== 'undefined') {\n\n let locale = dateObject.config.locale;\n\n if ( typeof dateObject.pikaday._o.firstDay !== 'undefined') {\n locale.firstDayOfWeek = dateObject.pikaday._o.firstDay;\n }\n\n if ( typeof dateObject.pikaday._o.i18n !== 'undefined') {\n if ( typeof dateObject.pikaday._o.i18n.weekdays !== 'undefined') {\n locale.weekdays.longhand = dateObject.pikaday._o.i18n.weekdays;\n }\n\n if ( typeof dateObject.pikaday._o.i18n.weekdaysShort !== 'undefined') {\n locale.weekdays.shorthand = dateObject.pikaday._o.i18n.weekdaysShort;\n }\n \n if ( typeof dateObject.pikaday._o.i18n.months !== 'undefined') {\n jQuery( '.flatpickr-monthDropdown-months > option' ).each( function() {\n this.text = dateObject.pikaday._o.i18n.months[ this.value ];\n } );\n }\n }\n\n dateObject.set( 'locale', locale );\n \n }\n\n if ( Object.keys(dateObject.pikaday._o).length > 0 ) {\n console.log(\"%cDeprecated Ninja Forms Pikaday custom code detected.\", \"color: Red; font-size: large\");\n console.log(\"You are using deprecated Ninja Forms Pikaday custom code. Support for this custom code will be removed in a future version of Ninja Forms. Please contact Ninja Forms support for more details.\");\n }\n\n }\n\n });\n\n return controller;\n});\n","define('controllers/fieldDate',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'date' ), 'init:model', this.registerFunctions );\n this.listenTo( nfRadio.channel( 'date' ), 'render:view', this.initDatepicker );\n },\n\n registerFunctions: function( model ) {\n model.set( 'renderHourOptions', this.renderHourOptions );\n model.set( 'renderMinuteOptions', this.renderMinuteOptions );\n model.set( 'maybeRenderAMPM', this.maybeRenderAMPM );\n model.set( 'customClasses', this.customClasses );\n // Overwrite the default getValue() method.\n model.getValue = this.getValue;\n },\n\n renderHourOptions: function() {\n return this.hours_options;\n },\n\n renderMinuteOptions: function() {\n return this.minutes_options;\n },\n\n maybeRenderAMPM: function() {\n if ( 'undefined' == typeof this.hours_24 || 1 == this.hours_24 ) {\n return;\n }\n\n return '
';\n },\n\n initDatepicker: function ( view ) {\n view.model.set( 'el', view.el );\n var el = jQuery( view.el ).find( '.nf-element' )[0];\n view.listenTo( nfRadio.channel( 'form-' + view.model.get( 'formID' ) ), 'before:submit', this.beforeSubmit, view );\n\n // If we are using a time_only date_mode, then hide the date input.\n if ( 'undefined' != typeof view.model.get( 'date_mode' ) && 'time_only' == view.model.get( 'date_mode' ) ) {\n jQuery( el ).hide();\n return false;\n }\n\n var dateFormat = view.model.get( 'date_format' );\n \n // For \"default\" date format, convert PHP format to JS compatible format.\n if( '' == dateFormat || 'default' == dateFormat ){\n dateFormat = this.convertDateFormat( nfi18n.dateFormat );\n // Make sure this is a deep conversion of the original model.\n view.model.set('date_format', dateFormat);\n }\n\n var dateSettings = {\n classes: jQuery( el ).attr( \"class\" ),\n placeholder: view.model.get( 'placeholder' ),\n parseDate: function (datestr, format) {\n return moment(datestr, format, true).toDate();\n },\n formatDate: function (date, format, locale) {\n return moment(date).format(format);\n },\n dateFormat: dateFormat,\n altFormat: dateFormat,\n altInput: true,\n ariaDateFormat: dateFormat,\n mode: \"single\",\n allowInput: true,\n disableMobile: \"true\",\n locale: {\n months: {\n shorthand: nfi18n.monthsShort,\n longhand: nfi18n.months\n },\n weekdays: {\n shorthand: nfi18n.weekdaysShort,\n longhand: nfi18n.weekdays\n },\n firstDayOfWeek: nfi18n.startOfWeek,\n }\n }; \n \n // Filter our datepicker settings object.\n let filteredDatePickerSettings = nfRadio.channel( 'flatpickr' ).request( 'filter:settings', dateSettings, view );\n if ( 'undefined' != typeof filteredDatePickerSettings ) {\n dateSettings = filteredDatePickerSettings;\n }\n\n var dateObject = flatpickr( el, dateSettings );\n\n if ( 1 == view.model.get( 'date_default' ) ) {\n dateObject.setDate( moment().format(dateFormat) );\n view.model.set( 'value', moment().format(dateFormat) );\n }\n\n //Trigger Pikaday backwards compatibility\n nfRadio.channel( 'pikaday-bc' ).trigger( 'init', dateObject, view.model, view );\n\n nfRadio.channel( 'flatpickr' ).trigger( 'init', dateObject, view.model, view );\n },\n\n beforeSubmit: function( formModel ) {\n if ( 'date_only' == this.model.get( 'date_mode' ) ) {\n return false;\n }\n let hour = jQuery( this.el ).find( '.hour' ).val();\n let minute = jQuery( this.el ).find( '.minute' ).val();\n let ampm = jQuery( this.el ).find( '.ampm' ).val();\n let current_value = this.model.get( 'value' );\n let date = false;\n\n if ( _.isObject( current_value ) ) {\n date = current_value.date;\n } else {\n date = current_value;\n }\n\n let date_value = {\n date: date,\n hour: hour,\n minute: minute,\n ampm: ampm,\n };\n\n this.model.set( 'value', date_value );\n },\n\n getYearRange: function( fieldModel ) {\n var yearRange = 10;\n var yearRangeStart = fieldModel.get( 'year_range_start' );\n var yearRangeEnd = fieldModel.get( 'year_range_end' );\n\n if( yearRangeStart && yearRangeEnd ){\n return [ yearRangeStart, yearRangeEnd ];\n } else if( yearRangeStart ) {\n yearRangeEnd = yearRangeStart + yearRange;\n return [ yearRangeStart, yearRangeEnd ];\n } else if( yearRangeEnd ) {\n yearRangeStart = yearRangeEnd - yearRange;\n return [ yearRangeStart, yearRangeEnd ];\n }\n\n return yearRange;\n },\n\n getMinDate: function( fieldModel ) {\n var minDate = null;\n var yearRangeStart = fieldModel.get( 'year_range_start' );\n\n if( yearRangeStart ) {\n return new Date( yearRangeStart, 0, 1 );\n }\n\n return minDate;\n },\n\n getMaxDate: function( fieldModel ) {\n var maxDate = null;\n var yearRangeEnd = fieldModel.get( 'year_range_end' );\n\n if( yearRangeEnd ) {\n return new Date( yearRangeEnd, 11, 31 );\n }\n\n return maxDate;\n },\n \n convertDateFormat: function( dateFormat ) {\n // http://php.net/manual/en/function.date.php\n // https://github.com/dbushell/Pikaday/blob/master/README.md#formatting **** Switched to flatpickr ***\n // Note: Be careful not to add overriding replacements. Order is important here.\n\n /** Day */\n dateFormat = dateFormat.replace( 'D', 'ddd' ); // @todo Ordering issue?\n dateFormat = dateFormat.replace( 'd', 'DD' );\n dateFormat = dateFormat.replace( 'l', 'dddd' );\n dateFormat = dateFormat.replace( 'j', 'D' );\n dateFormat = dateFormat.replace( 'N', '' ); // Not Supported\n dateFormat = dateFormat.replace( 'S', '' ); // Not Supported\n dateFormat = dateFormat.replace( 'w', 'd' );\n dateFormat = dateFormat.replace( 'z', '' ); // Not Supported\n\n /** Week */\n dateFormat = dateFormat.replace( 'W', 'W' );\n\n /** Month */\n dateFormat = dateFormat.replace( 'M', 'MMM' ); // \"M\" before \"F\" or \"m\" to avoid overriding.\n dateFormat = dateFormat.replace( 'F', 'MMMM' );\n dateFormat = dateFormat.replace( 'm', 'MM' );\n dateFormat = dateFormat.replace( 'n', 'M' );\n dateFormat = dateFormat.replace( 't', '' ); // Not Supported\n\n // Year\n dateFormat = dateFormat.replace( 'L', '' ); // Not Supported\n dateFormat = dateFormat.replace( 'o', 'YYYY' );\n dateFormat = dateFormat.replace( 'Y', 'YYYY' );\n dateFormat = dateFormat.replace( 'y', 'YY' );\n\n // Time - Not supported\n dateFormat = dateFormat.replace( 'a', '' );\n dateFormat = dateFormat.replace( 'A', '' );\n dateFormat = dateFormat.replace( 'B', '' );\n dateFormat = dateFormat.replace( 'g', '' );\n dateFormat = dateFormat.replace( 'G', '' );\n dateFormat = dateFormat.replace( 'h', '' );\n dateFormat = dateFormat.replace( 'H', '' );\n dateFormat = dateFormat.replace( 'i', '' );\n dateFormat = dateFormat.replace( 's', '' );\n dateFormat = dateFormat.replace( 'u', '' );\n dateFormat = dateFormat.replace( 'v', '' );\n\n // Timezone - Not supported\n dateFormat = dateFormat.replace( 'e', '' );\n dateFormat = dateFormat.replace( 'I', '' );\n dateFormat = dateFormat.replace( 'O', '' );\n dateFormat = dateFormat.replace( 'P', '' );\n dateFormat = dateFormat.replace( 'T', '' );\n dateFormat = dateFormat.replace( 'Z', '' );\n\n // Full Date/Time - Not Supported\n dateFormat = dateFormat.replace( 'c', '' );\n dateFormat = dateFormat.replace( 'r', '' );\n dateFormat = dateFormat.replace( 'u', '' );\n\n return dateFormat;\n },\n\n customClasses: function( classes ) {\n if ( 'date_and_time' == this.date_mode ) {\n classes += ' date-and-time';\n }\n return classes;\n },\n\n // This function is called whenever we want to know the value of the date field.\n // Since it could be a date/time field, we can't return just the value.\n getValue: function() {\n\n if ( 'date_only' == this.get( 'date_mode' ) ) {\n return this.get( 'value' );\n }\n\n let el = this.get( 'el' );\n let hour = jQuery( el ).find( '.hour' ).val();\n let minute = jQuery( el ).find( '.minute' ).val();\n let ampm = jQuery( el ).find( '.ampm' ).val();\n let current_value = this.get( 'value' );\n let date = false;\n\n if ( _.isObject( current_value ) ) {\n date = current_value.date;\n } else {\n date = current_value;\n }\n\n let value = '';\n\n if ( 'undefined' != typeof date ) {\n value += date;\n }\n\n if ( 'undefined' != typeof hour && 'undefined' != typeof minute ) {\n value += ' ' + hour + ':' + minute;\n }\n\n if ( 'undefined' != typeof ampm ) {\n value += ' ' + ampm;\n }\n\n return value;\n\n // let date_value = {\n // date: date,\n // hour: hour,\n // minute: minute,\n // ampm: ampm,\n // };\n\n // this.model.set( 'value', date_value );\n }\n });\n\n return controller;\n});\n\n","define('controllers/fieldRecaptcha',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha' ), 'init:model', this.initRecaptcha );\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.resetRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\n \t\tnfRadio.channel( 'recaptcha' ).reply( 'update:response', this.updateResponse, this, model.id );\n },\n\n updateResponse: function( response, fieldID ) {\n \tvar model = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\tmodel.set( 'value', response );\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n },\n\n resetRecaptcha: function() {\n\t\t\tvar recaptchaID = 0;\n\t\t\tjQuery( '.g-recaptcha' ).each( function() {\n\t\t\t\ttry {\n\t\t\t\t\tgrecaptcha.reset( recaptchaID );\n\t\t\t\t} catch( e ){\n\t\t\t\t\tconsole.log( 'Notice: Error trying to reset grecaptcha.' );\n\t\t\t\t}\n\t\t\t\trecaptchaID++;\n\t\t\t} );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRecaptchaV3',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha_v3' ), 'init:model', this.initRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\n\t const formID = model.get( 'formID' );\n\t\t\ttry{\n\t\t\t\tnfRadio.channel( 'form-' + formID ).trigger( 'disable:submit', model );\n\t\t\t\tgrecaptcha.ready( function() {\n\t\t\t\t\tgrecaptcha.execute( model.get( 'site_key' ), {\n\t\t\t\t\t\taction: 'register'\n\t\t\t\t\t} ).then( function( token ) {\n\t\t\t\t\t\tmodel.set( 'value', token );\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formID ).trigger( 'enable:submit', model );\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t} catch (e) {\n\t\t\t\t//Wait for the form to fully load and display error\n\t\t\t\tjQuery(document).on( 'nfFormReady', (layoutView) => {\n\t\t\t\t\t//Get consent details as recaptcha failed to load\n\t\t\t\t\tlet consent = nf_check_recaptcha_consent();\n\t\t\t\t\n\t\t\t\t\t//Get submit button\n\t\t\t\t\tlet submitFieldID;\n\t\t\t\t\tmodel.collection.models.forEach( (fieldModel) => {\n\t\t\t\t\t\tif(fieldModel.get(\"type\") === \"submit\"){\n\t\t\t\t\t\t\tsubmitFieldID = fieldModel.get(\"id\");\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\t//Display generic error\n\t\t\t\t\tnfRadio.channel( 'fields' ).request(\"add:error\", submitFieldID, \"recaptcha-v3-missing\", model.collection.options.formModel.get(\"settings\").recaptchaConsentMissing );\n\t\t\t\t\t//Create error message and add possible interaction with cookie consent depending on consent result\n\t\t\t\t\t//Display filterable error to add consent\n\t\t\t\t\tthis.nf_build_default_consent_action(model, consent.services, submitFieldID, layoutView );\n\t\t\t\t});\n\t\t\t}\n },\n\t\tnf_build_default_consent_action: function ( model, services, submitFieldID, layoutView ) {\n\t\t\t//Return if no consent management is detected\n\t\t\tconst returnIf = services.length <= 1 && services.includes(\"missing_cookie\") || services.length <= 0;\n\t\t\tif( !returnIf ){ \n\t\t\t\tlet actionElement = document.createElement(\"div\");\n\t\t\t\tactionElement.setAttribute(\"id\", \"nf_recaptcha_consent_event\");\n\t\t\t\tactionElement.innerText += model.collection.options.formModel.get(\"settings\").recaptchaConsentEvent;\n\n\t\t\t\tconst detailData = {\n\t\t\t\t\t\"services\": services,\n\t\t\t\t\t\"element\": actionElement,\n\t\t\t\t\t\"submitFieldID\": submitFieldID, \n\t\t\t\t\t\"layoutView\": layoutView\n\t\t\t\t}\n\t\t\t\t//Allow filtering of the element before printing it\n\t\t\t\tlet nf_consent_link_event = new CustomEvent('nf_consent_link', {detail: detailData});\n\t\t\t\tdocument.dispatchEvent(nf_consent_link_event);\n\n\t\t\t\t//Append action to error element\n\t\t\t\tconst genericErrorElements = document.getElementsByClassName(\"nf-error-recaptcha-v3-missing\");\n\t\t\t\tconst genericErrorElementsList = Array.prototype.slice.call(genericErrorElements);\n\t\t\t\tgenericErrorElementsList.forEach( (error) => {\n\t\t\t\t\terror.append( actionElement );\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n });\n\n return controller;\n} );\n","define('controllers/fieldHTML',[], function() {\n var controller = Marionette.Object.extend({\n\n htmlFields: [],\n trackedMergeTags: [],\n\n initialize: function () {\n this.listenTo( Backbone.Radio.channel( 'fields-html' ), 'init:model', this.setupFieldMergeTagTracking );\n },\n\n setupFieldMergeTagTracking: function( fieldModel ) {\n this.htmlFields.push( fieldModel );\n\n var formID = fieldModel.get( 'formID' );\n\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'init:model', function( formModel ){\n\n var mergeTags = fieldModel.get( 'default' ).match( new RegExp( /{field:(.*?)}/g ) );\n if ( ! mergeTags ) return;\n\n _.each( mergeTags, function( mergeTag ) {\n var fieldKey = mergeTag.replace( '{field:', '' ).replace( '}', '' );\n var fieldModel = formModel.get( 'fields' ).findWhere({ key: fieldKey });\n if( 'undefined' == typeof fieldModel ) return;\n\n this.trackedMergeTags.push( fieldModel );\n this.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'change:modelValue', this.updateFieldMergeTags );\n }, this );\n\n // Let's get this party started!\n this.updateFieldMergeTags();\n }, this );\n },\n\n updateFieldMergeTags: function( fieldModel ) {\n _.each( this.htmlFields, function( htmlFieldModel ){\n var value = htmlFieldModel.get( 'value' );\n _.each( this.trackedMergeTags, function( fieldModel ){\n\n /* Search the value for any spans with mergetag data-key\n * values\n */\n var spans = value.match( new RegExp( //g ) );\n\t _.each( spans, function( spanVar ) {\n\t /* See if the span string contains the current\n * fieldModel's key. If so replace the span with a\n * merge tag for evaluation.\n */\n if( -1 < spanVar.indexOf( \"data-key=\\\"field:\" + fieldModel.get( 'key' ) ) ) {\n\t value = value.replace( spanVar, \"{field:\" + fieldModel.get( 'key' ) + \"}\" );\n }\n\t } );\n\n var mergeTag = '{field:' + fieldModel.get( 'key' ) + '}';\n\t /* We replace the merge tag with the value\n\t * surrounded by a span so that we can still find it\n\t * and not affect itself or other field merge tags\n\t */\n value = value.replace( mergeTag, \"\"\n + fieldModel.getValue() + \"\" );\n }, this ) ;\n htmlFieldModel.set( 'value', value );\n htmlFieldModel.trigger( 'reRender' );\n }, this );\n }\n\n });\n\n return controller;\n});\n\n","/**\n * When a form is loaded, enable any help text that appears on the page.\n */\ndefine('controllers/helpText',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'render:view', this.initHelpText );\n\n\t\t\tnfRadio.channel( 'form' ).reply( 'init:help', this.initHelpText );\n\t\t},\n\n\t\tinitHelpText: function( view ) {\n\t\t\tjQuery( view.el ).find( '.nf-help' ).each( function() {\n\t\t\t\tvar jBox = jQuery( this ).jBox( 'Tooltip', {\n\t\t\t\t\ttheme: 'TooltipBorder',\n\t\t\t\t\tcontent: jQuery( this ).data( 'text' )\n\t\t\t\t});\n\t\t\t} );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldTextbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n nfRadio.channel( 'textbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n if('currency' == fieldModel.get('mask')){\n var form = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n var currencySymbol = ('undefined' !== typeof form) ? form.get( 'currencySymbol' ) : '';\n var currencySymbolDecoded = jQuery('