{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/modules/user/analytics.js","webpack:////node_modules/mixpanel-browser/dist/mixpanel.cjs.js","webpack:////node_modules/regenerator-runtime/runtime.js","webpack:///./app/javascript/packs/application.js","webpack:///./app/javascript/application_entry.js","webpack:///./app/javascript/modules/user/utm_to_cookie.js","webpack:////node_modules/@babel/runtime/regenerator/index.js","webpack:////node_modules/js-cookie/dist/js.cookie.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","installedCssChunks","__webpack_require__","exports","module","l","e","promises","Promise","resolve","reject","href","fullhref","p","existingLinkTags","document","getElementsByTagName","dataHref","tag","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","jsonpScriptSrc","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","head","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","s","setupMixpanel","MixpanelToken","mixpanel_token","mixpanel","init","debug","mix_panel_debug","mixpanel_identify","identify","people","set","mixpanel_email","setCookiesForMeasurementProtocol","GTAG_POLL_MAX_EXECUTIONS","maybe_start_polling","ga_measurement_id","__rise_gtm_poll","setInterval","fetch_client_id","__rise_gtm_poll_ex","clearInterval","warn","dataLayer","arguments","id","Cookies","ga_debug_mode","set_cookie_client_id","readyState","addEventListener","setGtmPreviewCookie","cookieValue","listenForFAQEvents","dataset","gaEvent","classList","contains","pushSelectContentEvent","innerText","matches","content_type","content_id","log","concat","_typeof","obj","iterator","constructor","window$1","Config","DEBUG","LIB_VERSION","loc","hostname","navigator","userAgent","location","referrer","screen","width","height","at","ch","text","escapee","next","number","string","white","array","T","ArrayProto","Array","FuncProto","Function","ObjProto","toString","windowConsole","navigator$1","document$1","windowOpera","opera","nativeBind","nativeForEach","forEach","nativeIndexOf","indexOf","nativeMap","map","nativeIsArray","isArray","breaker","_","trim","str","replace","isUndefined","apply","each","arg","args","toArray","critical","log_func_with_prefix","func","prefix","console_with_prefix","context","_bound","isFunction","TypeError","this","ctor","self","result","bind_instance_methods","escapeHTML","escaped","isString","extend","source","prop","f","test","x","isArguments","iterable","values","arr","callback","results","item","keys","include","found","includes","needle","inherit","subclass","superclass","isObject","isEmptyObject","isDate","isNumber","isElement","nodeType","encodeDates","v","k","formatDate","timestamp","Date","now","pad","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","safewrap","safewrap_class","klass","functions","safewrap_instance_methods","strip_empty_properties","ret","truncate","val","JSONEncode","mixed_val","quote","escapable","meta","lastIndex","a","charCodeAt","holder","gap","mind","partial","toJSON","isFinite","String","join","JSONDecode","SyntaxError","charAt","hex","uffff","parseInt","fromCharCode","word","base64Encode","h1","h2","h3","h4","bits","b64","ac","enc","tmp_arr","utf8Encode","start","end","stringl","utftext","c1","substring","UUID","se","Math","random","ua","buffer","xor","byte_array","j","tmp","unshift","UA","BLOCKED_UA_STRS","isBlockedUA","toLowerCase","HTTPBuildQuery","formdata","arg_separator","use_val","use_key","encodeURIComponent","getQueryParam","url","param","RegExp","exec","decodeURIComponent","cookie","nameEQ","ca","split","parse","set_seconds","seconds","is_cross_subdomain","is_secure","is_cross_site","domain_override","cdomain","expires","secure","domain","extract_domain","date","setTime","getTime","toGMTString","days","new_cookie_val","remove","_localStorageSupported","localStorageSupported","storage","forceCheck","supported","localStorage","cheap_guid","setItem","getItem","removeItem","is_supported","force_check","msg","register_event","fixEvent","preventDefault","stopPropagation","returnValue","cancelBubble","element","handler","oldSchool","useCapture","ontype","old_handler","new_handler","old_handlers","old_result","new_result","makeHandler","TOKEN_MATCH_REGEX","dom_query","getAllChildren","bad_whitespace","hasClass","elem","selector","className","getElementsBySelector","token","tagName","foundCount","elements","currentContextIndex","tokens","currentContext","getElementById","nodeName","token_match","match","checkFunction","attrName","attrOperator","attrValue","lastIndexOf","query","info","campaignParams","campaign_keywords","kw","params","kwkey","URL","searchEngine","search","searchInfo","keyword","browser","user_agent","vendor","browserVersion","regex","parseFloat","os","device","referringDomain","properties","people_properties","pageviewInfo","page","maxlen","guid","SIMPLE_DOMAIN_MATCH_REGEX","DOMAIN_MATCH_REGEX","domain_regex","parts","tld","JSONStringify","JSONParse","JSON","stringify","DomTracker","create_properties","event_handler","after_track_handler","mixpanel_instance","mp","track","event_name","user_callback","that","override_event","options","props","get_config","track_callback","timeout_occured","callback_fired","LinkTracker","evt","new_tab","which","metaKey","ctrlKey","FormTracker","submit","logger$2","SharedLock","storageKey","pollIntervalMS","timeoutMS","withLock","lockedCB","errorCB","pid","startTime","keyX","keyY","keyZ","reportError","delay","cb","loop","waitFor","predicate","getSetY","valY","criticalSection","logger$1","RequestQueue","lock","memQueue","enqueue","flushInterval","queueEntry","succeeded","storedQueue","readFromStorage","saveToStorage","fillBatch","batchSize","batch","idsInBatch","orphaned","filterOutIDsAndInvalid","items","idSet","filteredItems","removeItemsByID","ids","updatePayloads","existingItems","itemsToUpdate","newItems","newPayload","storageEntry","queue","clear","logger","RequestBatcher","libConfig","sendRequest","sendRequestFunc","beforeSendHook","stopped","flush","stop","timeoutID","resetBatchSize","resetFlush","scheduleFlush","flushMS","requestInProgress","currentBatchSize","dataForRequest","transformedItems","payload","batchSendCallback","res","removeItemsFromQueue","unloading","xhr_req","retryMS","headers","retryAfter","min","halvedBatchSize","max","floor","requestOptions","method","verbose","ignore_json_errors","timeout_ms","transport","GDPR_DEFAULT_PERSISTENCE_PREFIX","optIn","_optInOut","optOut","hasOptedIn","_getStorageValue","hasOptedOut","ignoreDnt","win","nav","hasDntOn","dntValue","_hasDoNotTrackFlagOn","optedOut","addOptOutCheckMixpanelLib","_addOptOutCheck","addOptOutCheckMixpanelPeople","_get_config","addOptOutCheckMixpanelGroup","clearOptInOut","_getStorage","_getStorageKey","crossSubdomainCookie","cookieDomain","persistenceType","persistencePrefix","optValue","cookieExpiration","secureCookie","crossSiteCookie","trackEventName","trackProperties","getConfigValue","SET_ACTION","SET_ONCE_ACTION","UNSET_ACTION","ADD_ACTION","APPEND_ACTION","UNION_ACTION","REMOVE_ACTION","apiActions","set_action","to","$set","_is_reserved_property","unset_action","$unset","set_once_action","$set_once","union_action","list_name","$union","append_action","$append","remove_action","$remove","delete_action","MixpanelGroup","_init","group_key","group_id","_mixpanel","_group_key","_group_id","_send_request","set_once","unset","union","date_encoded_data","_track_or_batch","endpoint","batcher","request_batchers","groups","conf","SET_QUEUE_KEY","SET_ONCE_QUEUE_KEY","UNSET_QUEUE_KEY","ADD_QUEUE_KEY","APPEND_QUEUE_KEY","REMOVE_QUEUE_KEY","UNION_QUEUE_KEY","PEOPLE_DISTINCT_ID_KEY","ALIAS_ID_KEY","CAMPAIGN_IDS_KEY","EVENT_TIMERS_KEY","RESERVED_PROPERTIES","MixpanelPersistence","config","campaign_params_saved","storage_type","load","update_config","upgrade","save","disabled","entry","old_cookie_name","old_cookie","upgrade_from_old_lib","register_once","_expire_notification_campaigns","expire_days","cross_subdomain","cross_site","cookie_domain","default_value","default_expiry","register","unregister","campaigns_shown","EXPIRY_TIME","campaign_id","update_campaign_params","update_search_keyword","update_referrer_info","get_referrer_info","safe_merge","set_disabled","set_cookie_domain","set_cross_site","set_cross_subdomain","set_secure","get_cross_subdomain","_add_to_people_queue","q_key","_get_queue_key","q_data","set_q","_get_or_create_queue","set_once_q","unset_q","add_q","union_q","remove_q","append_q","_pop_from_people_queue","enqueued_obj","append_obj","q","_get_queue","queued_action","default_val","set_event_timer","timers","remove_event_timer","OPERATOR_KEY","PROPERTY_KEY","WINDOW_KEY","UNIT_KEY","VALUE_KEY","HOUR_KEY","DAY_KEY","WEEK_KEY","MONTH_KEY","EVENT_PROPERTY","LITERAL_PROPERTY","AND_OPERATOR","OR_OPERATOR","IN_OPERATOR","NOT_IN_OPERATOR","PLUS_OPERATOR","MINUS_OPERATOR","MUL_OPERATOR","DIV_OPERATOR","MOD_OPERATOR","EQUALS_OPERATOR","NOT_EQUALS_OPERATOR","GREATER_OPERATOR","LESS_OPERATOR","GREATER_EQUAL_OPERATOR","LESS_EQUAL_OPERATOR","BOOLEAN_OPERATOR","DATETIME_OPERATOR","LIST_OPERATOR","NUMBER_OPERATOR","STRING_OPERATOR","NOT_OPERATOR","DEFINED_OPERATOR","NOT_DEFINED_OPERATOR","NOW_LITERAL","toNumber","Number","isNaN","toBoolean","evaluateEquality","op","_isArrayEqual","_isEqual","evaluateSelector","evaluateOperator","evaluateAnd","evaluateOr","leftValue","rightValue","evaluateIn","evaluatePlus","evaluateArithmetic","compare","localeCompare","evaluateComparison","evaluateBoolean","evaluateDateTime","evaluateList","evaluateNumber","evaluateString","b","evaluateDefined","evaluateNot","evaluateOperand","out","evaluateWindow","filters","MixpanelNotification","notif_data","persistence","resource_protocol","cdn_host","message_id","body","cta","notif_type","style","title","video_width","VIDEO_WIDTH","video_height","VIDEO_HEIGHT","display_triggers","dest_url","image_url","thumb_image_url","video_url","clickthrough","mini","notif_width","NOTIF_WIDTH_MINI","NOTIF_WIDTH","_set_client_config","imgs_to_preload","_init_image_html","_init_video","ANIM_TIME","MARKUP_PREFIX","BG_OPACITY","NOTIF_TOP","NOTIF_START_TOP","NOTIF_HEIGHT_MINI","THUMB_BORDER_SIZE","THUMB_IMG_SIZE","THUMB_OFFSET","round","show","body_el","_init_styles","_init_notification_el","_preload_images","_attach_and_animate","dismiss","marked_as_shown","_mark_delivery","notif_attr","notif_start","notif_goal","exiting_el","showing_video","_get_el","_get_notification_display_el","use_transitions","_remove_class","_add_class","_remove_notification_el","_animate_els","el","attr","goal","class_name","anims","mss","done_cb","start_time","ai","anim","time_diff","in_progress","cur_time","anim_diff","anim_dir","suffix","shown","_get_shown_campaigns","notification_el","notif_el","_mark_as_shown","click_el","show_video","_track_event","_switch_to_video","tracking_cb","open","_matches_event_data","event_data","display_trigger","_browser_lte","version","browser_versions","img_html","thumb_img_html","notification_html","video_src","video_html","cancel_html","close_html","play_html","youtube_video","yt_custom","vimeo_video","video_iframe","flip_animate","main_html","innerHTML","style_vals","bg","bg_actions","bg_hover","bg_light","border_gray","cancel_opacity","mini_hover","text_title","text_main","text_tagline","text_hover","shadow","video_shadow","mini_shadow","thumb_total_size","anim_seconds","notif_media_queries","notif_styles","doc_width","doc_height","VENDOR_STYLES","VENDOR_PREFIXES","si","pi","media_queries","create_style_text","style_text","head_el","style_el","style_defs","st","mq_defs","mqt","mq","create_media_query_text","documentElement","styleSheet","cssText","textContent","youtube_match","vimeo_match","_yt_video_ready","firstScriptTag","insertBefore","get_style","style_name","styles","defaultView","getComputedStyle","currentStyle","extra_props","all_loaded_cb","preloaded_imgs","img_objs","img","Image","complete","imgs_loaded","_video_progress_checker","visibility","get_browser_version","browser_ex","ActiveXObject","scrollWidth","offsetWidth","clientWidth","scrollHeight","offsetHeight","clientHeight","ie_ver","sample_styles","is_css_compatible","rule","toUpperCase","overlay","video_ready","video_inited","progress_bar","progress_time","progress_el","ytplayer","video_duration","update_video_time","current_time","secs","mins","hours","clickx","pageX","getBoundingClientRect","left","init_type","mixpanel_master","MixpanelPeople","increment","by","$add","append","track_charge","amount","clear_charges","delete_user","_identify_called","get_distinct_id","device_id","get_property","user_id","had_persisted_distinct_id","_enqueue","status","conf_var","_flags","identify_called","_flush_one_queue","action","action_method","queue_to_params_fn","_this","queued_data","action_params","response","_flush","_set_callback","_add_callback","_append_callback","_set_once_callback","_union_callback","_unset_callback","_remove_callback","$append_queue","$remove_queue","$append_item","append_callback","pop","$remove_item","remove_callback","IDENTITY_FUNC","NOOP_FUNC","PRIMARY_INSTANCE_NAME","USE_XHR","XMLHttpRequest","ENQUEUE_REQUESTS","sendBeacon","DEFAULT_CONFIG","DOM_LOADED","MixpanelLib","create_mplib","instance","_cached_groups","_user_decide_check_complete","_events_tracked_before_user_decide_check_complete","_execute_array","encode_data_for_request","json_data","_loaded","set_config","__dom_loaded_queue","__request_queue","__disabled_events","_batch_requests","init_batchers","flush_on_unload","events","ev","unpersisted_superprops","_gdpr_init","uuid","_set_default_superprops","_dom_loaded","_track_dom","has_opted_out_tracking","DomClass","dt","_prepare_callback","jsc","randomized_cb","callback_string","DEFAULT_OPTIONS","body_data","use_post","use_sendBeacon","verbose_mode","req","headerValue","headerName","setRequestHeader","withCredentials","onreadystatechange","responseText","statusText","send","async","defer","fn_name","alias_calls","other_calls","tracking_calls","execute","calls","caller","are_batchers_initialized","batcher_for","attrs","queue_suffix","_run_hook","start_batch_senders","stop_batch_senders","disable","disable_all_events","truncated_data","should_send_immediately","send_request_options","request_enqueued_or_initiated","send_request_immediately","skip_hooks","_event_is_disabled","start_timestamp","duration_in_ms","toFixed","property_blacklist","blacklisted_prop","_check_and_handle_triggered_notifications","set_group","group_ids","add_group","old_values","remove_group","old_value","idx","splice","track_with_groups","tracking_props","_create_map_key","_remove_group_from_cache","get_group","map_key","group","track_pageview","track_links","track_forms","time_event","REGISTER_DEFAULTS","options_for_register","days_or_options","_register_single","new_distinct_id","previous_distinct_id","_check_and_handle_notifications","reset","alias","original","name_tag","prop_name","hook_name","property_name","_show_notification","distinct_id","notifications","notif","_handle_user_decide_check_complete","has_opted_in_tracking","opt_in_tracking","opt_out_tracking","clear_opt_in_out_tracking","_gdpr_update_persistence","_gdpr_call_func","instances","override_mp_init_func","dom_loaded_handler","done","inst","attachEvent","toplevel","frameElement","doScroll","do_scroll_check","add_dom_loaded_handler","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","configurable","writable","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","state","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","fn","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iteratorMethod","displayName","isGeneratorFunction","genFun","mark","setPrototypeOf","__proto__","awrap","iter","reverse","skipTempReset","prev","rootRecord","rval","exception","handle","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","require","Application","_classCallCheck","URLSearchParams","tn","Analytics","onready","_onready","_regeneratorRuntime","_callee","_yield$import","ScholarApp","_context","querySelectorAll","itemTitle","parentElement","toggle","querySelector","app","Header","factory","assign","api","converter","defaultAttributes","attributes","toUTCString","escape","stringifiedAttributes","attributeName","write","cookies","jar","foundKey","read","withAttributes","withConverter","freeze","path"],"mappings":";2hBACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GAKAK,EAAI,EAAGC,EAAW,GACpCD,EAAIF,EAASI,OAAQF,IACzBH,EAAUC,EAASE,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBV,IAAYU,EAAgBV,IACpFI,EAASO,KAAKD,EAAgBV,GAAS,IAExCU,EAAgBV,GAAW,EAE5B,IAAID,KAAYG,EACZI,OAAOC,UAAUC,eAAeC,KAAKP,EAAaH,KACpDa,EAAQb,GAAYG,EAAYH,IAKlC,IAFGc,GAAqBA,EAAoBf,GAEtCM,EAASC,QACdD,EAASU,OAATV,EAGF,CAIA,IAAIW,EAAmB,CAAC,EAGpBC,EAAqB,CACxB,EAAG,GAMAN,EAAkB,CACrB,EAAG,GAWJ,SAASO,EAAoBlB,GAG5B,GAAGgB,EAAiBhB,GACnB,OAAOgB,EAAiBhB,GAAUmB,QAGnC,IAAIC,EAASJ,EAAiBhB,GAAY,CACzCI,EAAGJ,EACHqB,GAAG,EACHF,QAAS,CAAC,GAUX,OANAN,EAAQb,GAAUU,KAAKU,EAAOD,QAASC,EAAQA,EAAOD,QAASD,GAG/DE,EAAOC,GAAI,EAGJD,EAAOD,OACf,CAIAD,EAAoBI,EAAI,SAAuBrB,GAC9C,IAAIsB,EAAW,GAKZN,EAAmBhB,GAAUsB,EAASX,KAAKK,EAAmBhB,IACzB,IAAhCgB,EAAmBhB,IAFX,CAAC,EAAI,EAAE,EAAI,EAAE,EAAI,EAAE,EAAI,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,GAE3EA,IACtDsB,EAASX,KAAKK,EAAmBhB,GAAW,IAAIuB,SAAQ,SAASC,EAASC,GAIzE,IAHA,IAAIC,EAAO,QAAU,CAAC,GAAK,cAAc,GAAK,kBAAkB,GAAK,2BAA2B1B,IAAUA,GAAW,IAAM,CAAC,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,EAAI,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,YAAYA,GAAW,aAC5hB2B,EAAWV,EAAoBW,EAAIF,EACnCG,EAAmBC,SAASC,qBAAqB,QAC7C5B,EAAI,EAAGA,EAAI0B,EAAiBxB,OAAQF,IAAK,CAChD,IACI6B,GADAC,EAAMJ,EAAiB1B,IACR+B,aAAa,cAAgBD,EAAIC,aAAa,QACjE,GAAe,eAAZD,EAAIE,MAAyBH,IAAaN,GAAQM,IAAaL,GAAW,OAAOH,GACrF,CACA,IAAIY,EAAoBN,SAASC,qBAAqB,SACtD,IAAQ5B,EAAI,EAAGA,EAAIiC,EAAkB/B,OAAQF,IAAK,CACjD,IAAI8B,EAEJ,IADID,GADAC,EAAMG,EAAkBjC,IACT+B,aAAa,gBAChBR,GAAQM,IAAaL,EAAU,OAAOH,GACvD,CACA,IAAIa,EAAUP,SAASQ,cAAc,QACrCD,EAAQF,IAAM,aACdE,EAAQE,KAAO,WACfF,EAAQG,OAAShB,EACjBa,EAAQI,QAAU,SAASC,GAC1B,IAAIC,EAAUD,GAASA,EAAME,QAAUF,EAAME,OAAOC,KAAOlB,EACvDmB,EAAM,IAAIC,MAAM,qBAAuB/C,EAAU,cAAgB2C,EAAU,KAC/EG,EAAIE,KAAO,wBACXF,EAAIH,QAAUA,SACP3B,EAAmBhB,GAC1BqC,EAAQY,WAAWC,YAAYb,GAC/BZ,EAAOqB,EACR,EACAT,EAAQX,KAAOC,EAEJG,SAASC,qBAAqB,QAAQ,GAC5CoB,YAAYd,EAClB,IAAGe,MAAK,WACPpC,EAAmBhB,GAAW,CAC/B,KAKD,IAAIqD,EAAqB3C,EAAgBV,GACzC,GAA0B,IAAvBqD,EAGF,GAAGA,EACF/B,EAASX,KAAK0C,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAI/B,SAAQ,SAASC,EAASC,GAC3C4B,EAAqB3C,EAAgBV,GAAW,CAACwB,EAASC,EAC3D,IACAH,EAASX,KAAK0C,EAAmB,GAAKC,GAGtC,IACIC,EADAC,EAAS1B,SAASQ,cAAc,UAGpCkB,EAAOC,QAAU,QACjBD,EAAOE,QAAU,IACbzC,EAAoB0C,IACvBH,EAAOI,aAAa,QAAS3C,EAAoB0C,IAElDH,EAAOX,IAnGV,SAAwB7C,GACvB,OAAOiB,EAAoBW,EAAI,OAAS,CAAC,GAAK,cAAc,GAAK,kBAAkB,GAAK,2BAA2B5B,IAAUA,GAAW,IAAM,CAAC,EAAI,uBAAuB,EAAI,uBAAuB,EAAI,uBAAuB,EAAI,uBAAuB,EAAI,uBAAuB,EAAI,uBAAuB,EAAI,uBAAuB,EAAI,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,uBAAuB,GAAK,wBAAwBA,GAAW,WAC52B,CAiGgB6D,CAAe7D,GAG5B,IAAI8D,EAAQ,IAAIf,MAChBQ,EAAmB,SAAUb,GAE5Bc,EAAOf,QAAUe,EAAOhB,OAAS,KACjCuB,aAAaL,GACb,IAAIM,EAAQtD,EAAgBV,GAC5B,GAAa,IAAVgE,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYvB,IAAyB,SAAfA,EAAMH,KAAkB,UAAYG,EAAMH,MAChE2B,EAAUxB,GAASA,EAAME,QAAUF,EAAME,OAAOC,IACpDiB,EAAMK,QAAU,iBAAmBnE,EAAU,cAAgBiE,EAAY,KAAOC,EAAU,IAC1FJ,EAAMM,KAAO,iBACbN,EAAMvB,KAAO0B,EACbH,EAAMnB,QAAUuB,EAChBF,EAAM,GAAGF,EACV,CACApD,EAAgBV,QAAWqE,CAC5B,CACD,EACA,IAAIX,EAAUY,YAAW,WACxBf,EAAiB,CAAEhB,KAAM,UAAWK,OAAQY,GAC7C,GAAG,MACHA,EAAOf,QAAUe,EAAOhB,OAASe,EACjCzB,SAASyC,KAAKpB,YAAYK,EAC3B,CAED,OAAOjC,QAAQiD,IAAIlD,EACpB,EAGAL,EAAoBwD,EAAI7D,EAGxBK,EAAoByD,EAAI3D,EAGxBE,EAAoB0D,EAAI,SAASzD,EAASkD,EAAMQ,GAC3C3D,EAAoB4D,EAAE3D,EAASkD,IAClC9D,OAAOwE,eAAe5D,EAASkD,EAAM,CAAEW,YAAY,EAAMC,IAAKJ,GAEhE,EAGA3D,EAAoBgE,EAAI,SAAS/D,GACX,qBAAXgE,QAA0BA,OAAOC,aAC1C7E,OAAOwE,eAAe5D,EAASgE,OAAOC,YAAa,CAAEC,MAAO,WAE7D9E,OAAOwE,eAAe5D,EAAS,aAAc,CAAEkE,OAAO,GACvD,EAOAnE,EAAoBoE,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnE,EAAoBmE,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKlF,OAAOmF,OAAO,MAGvB,GAFAxE,EAAoBgE,EAAEO,GACtBlF,OAAOwE,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnE,EAAoB0D,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,EAAM,EAAEC,KAAK,KAAMD,IAC9I,OAAOF,CACR,EAGAvE,EAAoB2E,EAAI,SAASzE,GAChC,IAAIyD,EAASzD,GAAUA,EAAOoE,WAC7B,WAAwB,OAAOpE,EAAgB,OAAG,EAClD,WAA8B,OAAOA,CAAQ,EAE9C,OADAF,EAAoB0D,EAAEC,EAAQ,IAAKA,GAC5BA,CACR,EAGA3D,EAAoB4D,EAAI,SAASgB,EAAQC,GAAY,OAAOxF,OAAOC,UAAUC,eAAeC,KAAKoF,EAAQC,EAAW,EAGpH7E,EAAoBW,EAAI,kDAGxBX,EAAoB8E,GAAK,SAASjD,GAA2B,MAApBkD,QAAQlC,MAAMhB,GAAYA,CAAK,EAExE,IAAImD,EAAaC,OAAqB,aAAIA,OAAqB,cAAK,GAChEC,EAAmBF,EAAWtF,KAAKgF,KAAKM,GAC5CA,EAAWtF,KAAOd,EAClBoG,EAAaA,EAAWG,QACxB,IAAI,IAAIjG,EAAI,EAAGA,EAAI8F,EAAW5F,OAAQF,IAAKN,EAAqBoG,EAAW9F,IAC3E,IAAIU,EAAsBsF,EAInBlF,EAAoBA,EAAoBoF,EAAI,I,oCCnPrD,+KAUMC,EAAgB,WACpB,IAAMC,EAAgBL,OAAOM,iBAAkB,EAE3CD,IACFE,IAASC,KAAKH,EAAe,CAAEI,MAAOT,OAAOU,kBAAmB,IAC5DV,OAAOW,oBACTJ,IAASK,SAASZ,OAAOW,mBACzBJ,IAASM,OAAOC,IAAI,QAASd,OAAOe,iBAG1C,EAQMC,EAAmC,WACvC,IAAMC,EAA2B,GAOjC,SAASC,IACgC,oBAA5BlB,OAAOmB,oBAChBnB,OAAOoB,gBAAkBC,YAAYC,EAAiB,KACtDtB,OAAOuB,mBAAqB,EAEhC,CAQA,SAASD,IACP,GAAItB,OAAOuB,mBAAqBN,EAG9B,OAFAO,cAAcxB,OAAOoB,sBACrBtB,QAAQ2B,KAAK,qCAAuCR,EAA2B,aAG/EjB,OAAOuB,oBAAsB,EAGA,oBAApBvB,OAAO0B,YAChBF,cAAcxB,OAAOoB,iBACrB,WACEpB,OAAO0B,UAAUjH,KAAKkH,UACvB,CAFD,CAEG,MAAO3B,OAAOmB,kBAAmB,aAAa,SAACS,GAAE,OASxD,SAA8BA,GACPC,IAAQ/C,IAAI,iBAE/B+C,IAAQf,IAAI,eAAgBc,GAGK,oBAAxB5B,OAAO8B,gBACZ9B,OAAO8B,cACTD,IAAQf,IAAI,gBAAiB,KAE7Be,IAAQf,IAAI,gBAAiB,KAGnC,CAtB6DiB,CAAqBH,EAAG,IAErF,CAuB4B,aAAxBhG,SAASoG,WACXd,IAEAlB,OAAOiC,iBAAiB,mBAAoBf,GAG9ClB,OAAOkC,oBAAsB,SAAUC,GAErC,OADAN,IAAQf,IAAI,oBAAqBqB,GAC1B,mCAAqCA,CAC9C,CACF,EAOMC,EAAqB,WAMzBxG,SAASqG,iBAAiB,SAAS,SAAUzF,GACN,QAAjCA,EAAME,OAAO2F,QAAQC,SACnB9F,EAAME,OAAOK,WAAWwF,UAAUC,SAAS,yBAC7CC,EAAuB,MAAOjG,EAAME,OAAOgG,WAG3ClG,EAAME,OAAOiG,QAAQ,iCACvBF,EAAuB,YAAajG,EAAME,OAAOgG,UAErD,GACF,EAEMD,EAAyB,SAAUG,EAAcC,GACrD/C,QAAQgD,IAAI,mBAADC,OAAoBH,EAAY,MAAAG,OAAKF,IAChB,qBAArB7C,OAAO0B,WAGlB1B,OAAO0B,UAAUjH,KAAK,CACpB+B,MAAO,iBACPoG,aAAcA,EACdC,WAAYA,GAEhB,C,mCClIA,SAASG,EAAQC,GAAmV,OAAtOD,EAArD,oBAAXhE,QAAoD,kBAApBA,OAAOkE,SAAmC,SAAiBD,GAAO,cAAcA,CAAK,EAAsB,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXjE,QAAyBiE,EAAIE,cAAgBnE,QAAUiE,IAAQjE,OAAO3E,UAAY,gBAAkB4I,CAAK,EAAYD,EAAQC,EAAM,CACzX,IAMIG,EANAC,EAAS,CACXC,OAAO,EACPC,YAAa,UAKf,GAAsB,qBAAXvD,OAAwB,CACjC,IAAIwD,EAAM,CACRC,SAAU,IAEZL,EAAW,CACTM,UAAW,CACTC,UAAW,IAEb/H,SAAU,CACRgI,SAAUJ,EACVK,SAAU,IAEZC,OAAQ,CACNC,MAAO,EACPC,OAAQ,GAEVJ,SAAUJ,EAEd,MACEJ,EAAWpD,OAQb,IAoeMiE,EAEFC,EAYAC,EA2HAjF,EArIAkF,EAWAxG,EAMAyG,EAWAC,EAqCAC,EAqCAC,EAiCAC,EAwBA9E,EA8IE+E,EArxBFC,EAAaC,MAAMvK,UACnBwK,EAAYC,SAASzK,UACrB0K,EAAW3K,OAAOC,UAClB6F,EAAQyE,EAAWzE,MACnB8E,EAAWD,EAASC,SACpB1K,EAAiByK,EAASzK,eAC1B2K,EAAgB7B,EAAStD,QACzBoF,EAAc9B,EAASM,UACvByB,EAAa/B,EAASxH,SACtBwJ,EAAchC,EAASiC,MACvBvB,EAASV,EAASU,OAClBH,EAAYuB,EAAYvB,UACxB2B,EAAaT,EAAUpF,KACvB8F,EAAgBZ,EAAWa,QAC3BC,EAAgBd,EAAWe,QAC3BC,EAAYhB,EAAWiB,IACvBC,EAAgBjB,MAAMkB,QACtBC,EAAU,CAAC,EACXC,EAAI,CACNC,KAAM,SAAcC,GAElB,OAAOA,EAAIC,QAAQ,qCAAsC,GAC3D,GAIErG,EAAU,CAEZgD,IAAK,WACH,GAAIO,EAAOC,QAAU0C,EAAEI,YAAYnB,IAAkBA,EACnD,IACEA,EAAcnC,IAAIuD,MAAMpB,EAAetD,UACzC,CAAE,MAAO/E,GACPoJ,EAAEM,KAAK3E,WAAW,SAAU4E,GAC1BtB,EAAcnC,IAAIyD,EACpB,GACF,CAEJ,EAEA9E,KAAM,WACJ,GAAI4B,EAAOC,QAAU0C,EAAEI,YAAYnB,IAAkBA,EAAe,CAClE,IAAIuB,EAAO,CAAC,qBAAqBzD,OAAOiD,EAAES,QAAQ9E,YAClD,IACEsD,EAAcxD,KAAK4E,MAAMpB,EAAeuB,EAC1C,CAAE,MAAO5J,GACPoJ,EAAEM,KAAKE,GAAM,SAAUD,GACrBtB,EAAcxD,KAAK8E,EACrB,GACF,CACF,CACF,EAEA3I,MAAO,WACL,GAAIyF,EAAOC,QAAU0C,EAAEI,YAAYnB,IAAkBA,EAAe,CAClE,IAAIuB,EAAO,CAAC,mBAAmBzD,OAAOiD,EAAES,QAAQ9E,YAChD,IACEsD,EAAcrH,MAAMyI,MAAMpB,EAAeuB,EAC3C,CAAE,MAAO5J,GACPoJ,EAAEM,KAAKE,GAAM,SAAUD,GACrBtB,EAAcrH,MAAM2I,EACtB,GACF,CACF,CACF,EAEAG,SAAU,WACR,IAAKV,EAAEI,YAAYnB,IAAkBA,EAAe,CAClD,IAAIuB,EAAO,CAAC,mBAAmBzD,OAAOiD,EAAES,QAAQ9E,YAChD,IACEsD,EAAcrH,MAAMyI,MAAMpB,EAAeuB,EAC3C,CAAE,MAAO5J,GACPoJ,EAAEM,KAAKE,GAAM,SAAUD,GACrBtB,EAAcrH,MAAM2I,EACtB,GACF,CACF,CACF,GAEEI,EAAuB,SAA8BC,EAAMC,GAC7D,OAAO,WAEL,OADAlF,UAAU,GAAK,IAAMkF,EAAS,KAAOlF,UAAU,GACxCiF,EAAKP,MAAMvG,EAAS6B,UAC7B,CACF,EACImF,EAAsB,SAA6BD,GACrD,MAAO,CACL/D,IAAK6D,EAAqB7G,EAAQgD,IAAK+D,GACvCjJ,MAAO+I,EAAqB7G,EAAQlC,MAAOiJ,GAC3CH,SAAUC,EAAqB7G,EAAQ4G,SAAUG,GAErD,EAIAb,EAAEvG,KAAO,SAAUmH,EAAMG,GACvB,IAAIP,EAAMQ,EACV,GAAI1B,GAAcsB,EAAKnH,OAAS6F,EAC9B,OAAOA,EAAWe,MAAMO,EAAM1G,EAAM3F,KAAKoH,UAAW,IAEtD,IAAKqE,EAAEiB,WAAWL,GAChB,MAAM,IAAIM,UAiBZ,OAfAV,EAAOtG,EAAM3F,KAAKoH,UAAW,GAC7BqF,EAAS,WACP,KAAMG,gBAAgBH,GACpB,OAAOJ,EAAKP,MAAMU,EAASP,EAAKzD,OAAO7C,EAAM3F,KAAKoH,aAEpD,IAAIyF,EAAO,CAAC,EACZA,EAAK/M,UAAYuM,EAAKvM,UACtB,IAAIgN,EAAO,IAAID,EACfA,EAAK/M,UAAY,KACjB,IAAIiN,EAASV,EAAKP,MAAMgB,EAAMb,EAAKzD,OAAO7C,EAAM3F,KAAKoH,aACrD,OAAIvH,OAAOkN,KAAYA,EACdA,EAEFD,CACT,EACOL,CACT,EACAhB,EAAEuB,sBAAwB,SAAUtE,GAClC,IAAK,IAAI2D,KAAQ3D,EACU,oBAAdA,EAAI2D,KACb3D,EAAI2D,GAAQZ,EAAEvG,KAAKwD,EAAI2D,GAAO3D,GAGpC,EAOA+C,EAAEM,KAAO,SAAUrD,EAAKC,EAAU6D,GAChC,GAAY,OAAR9D,QAAwB9E,IAAR8E,EAGpB,GAAIsC,GAAiBtC,EAAIuC,UAAYD,EACnCtC,EAAIuC,QAAQtC,EAAU6D,QACjB,GAAI9D,EAAI9I,UAAY8I,EAAI9I,QAC7B,IAAK,IAAIF,EAAI,EAAGiB,EAAI+H,EAAI9I,OAAQF,EAAIiB,EAAGjB,IACrC,GAAIA,KAAKgJ,GAAOC,EAAS3I,KAAKwM,EAAS9D,EAAIhJ,GAAIA,EAAGgJ,KAAS8C,EACzD,YAIJ,IAAK,IAAIvG,KAAOyD,EACd,GAAI3I,EAAeC,KAAK0I,EAAKzD,IACvB0D,EAAS3I,KAAKwM,EAAS9D,EAAIzD,GAAMA,EAAKyD,KAAS8C,EACjD,MAKV,EACAC,EAAEwB,WAAa,SAAUrH,GACvB,IAAIsH,EAAUtH,EAId,OAHIsH,GAAWzB,EAAE0B,SAASD,KACxBA,EAAUA,EAAQtB,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,UAAUA,QAAQ,KAAM,WAEtHsB,CACT,EACAzB,EAAE2B,OAAS,SAAU1E,GAQnB,OAPA+C,EAAEM,KAAKpG,EAAM3F,KAAKoH,UAAW,IAAI,SAAUiG,GACzC,IAAK,IAAIC,KAAQD,OACM,IAAjBA,EAAOC,KACT5E,EAAI4E,GAAQD,EAAOC,GAGzB,IACO5E,CACT,EACA+C,EAAEF,QAAUD,GAAiB,SAAU5C,GACrC,MAA8B,mBAAvB+B,EAASzK,KAAK0I,EACvB,EAKA+C,EAAEiB,WAAa,SAAUa,GACvB,IACE,MAAO,mBAAmBC,KAAKD,EACjC,CAAE,MAAOE,GACP,OAAO,CACT,CACF,EACAhC,EAAEiC,YAAc,SAAUhF,GACxB,SAAUA,IAAO3I,EAAeC,KAAK0I,EAAK,UAC5C,EACA+C,EAAES,QAAU,SAAUyB,GACpB,OAAKA,EAGDA,EAASzB,QACJyB,EAASzB,UAEdT,EAAEF,QAAQoC,IAGVlC,EAAEiC,YAAYC,GAFThI,EAAM3F,KAAK2N,GAKblC,EAAEmC,OAAOD,GAXP,EAYX,EACAlC,EAAEJ,IAAM,SAAUwC,EAAKC,EAAUtB,GAC/B,GAAIpB,GAAayC,EAAIxC,MAAQD,EAC3B,OAAOyC,EAAIxC,IAAIyC,EAAUtB,GAEzB,IAAIuB,EAAU,GAId,OAHAtC,EAAEM,KAAK8B,GAAK,SAAUG,GACpBD,EAAQ7N,KAAK4N,EAAS9N,KAAKwM,EAASwB,GACtC,IACOD,CAEX,EACAtC,EAAEwC,KAAO,SAAUvF,GACjB,IAAIqF,EAAU,GACd,OAAY,OAARrF,GAGJ+C,EAAEM,KAAKrD,GAAK,SAAU/D,EAAOM,GAC3B8I,EAAQA,EAAQnO,QAAUqF,CAC5B,IAJS8I,CAMX,EACAtC,EAAEmC,OAAS,SAAUlF,GACnB,IAAIqF,EAAU,GACd,OAAY,OAARrF,GAGJ+C,EAAEM,KAAKrD,GAAK,SAAU/D,GACpBoJ,EAAQA,EAAQnO,QAAU+E,CAC5B,IAJSoJ,CAMX,EACAtC,EAAEyC,QAAU,SAAUxF,EAAKvG,GACzB,IAAIgM,GAAQ,EACZ,OAAY,OAARzF,EACKyF,EAELjD,GAAiBxC,EAAIyC,UAAYD,GACJ,GAAxBxC,EAAIyC,QAAQhJ,IAErBsJ,EAAEM,KAAKrD,GAAK,SAAU/D,GACpB,GAAIwJ,IAAUA,EAAQxJ,IAAUxC,GAC9B,OAAOqJ,CAEX,IACO2C,EACT,EACA1C,EAAE2C,SAAW,SAAUzC,EAAK0C,GAC1B,OAAgC,IAAzB1C,EAAIR,QAAQkD,EACrB,EAGA5C,EAAE6C,QAAU,SAAUC,EAAUC,GAI9B,OAHAD,EAASzO,UAAY,IAAI0O,EACzBD,EAASzO,UAAU8I,YAAc2F,EACjCA,EAASC,WAAaA,EAAW1O,UAC1ByO,CACT,EACA9C,EAAEgD,SAAW,SAAU/F,GACrB,OAAOA,IAAQ7I,OAAO6I,KAAS+C,EAAEF,QAAQ7C,EAC3C,EACA+C,EAAEiD,cAAgB,SAAUhG,GAC1B,GAAI+C,EAAEgD,SAAS/F,GAAM,CACnB,IAAK,IAAIzD,KAAOyD,EACd,GAAI3I,EAAeC,KAAK0I,EAAKzD,GAC3B,OAAO,EAGX,OAAO,CACT,CACA,OAAO,CACT,EACAwG,EAAEI,YAAc,SAAUnD,GACxB,YAAe,IAARA,CACT,EACA+C,EAAE0B,SAAW,SAAUzE,GACrB,MAA6B,mBAAtB+B,EAASzK,KAAK0I,EACvB,EACA+C,EAAEkD,OAAS,SAAUjG,GACnB,MAA6B,iBAAtB+B,EAASzK,KAAK0I,EACvB,EACA+C,EAAEmD,SAAW,SAAUlG,GACrB,MAA6B,mBAAtB+B,EAASzK,KAAK0I,EACvB,EACA+C,EAAEoD,UAAY,SAAUnG,GACtB,SAAUA,GAAwB,IAAjBA,EAAIoG,SACvB,EACArD,EAAEsD,YAAc,SAAUrG,GASxB,OARA+C,EAAEM,KAAKrD,GAAK,SAAUsG,EAAGC,GACnBxD,EAAEkD,OAAOK,GACXtG,EAAIuG,GAAKxD,EAAEyD,WAAWF,GACbvD,EAAEgD,SAASO,KACpBtG,EAAIuG,GAAKxD,EAAEsD,YAAYC,GAE3B,IAEOtG,CACT,EACA+C,EAAE0D,UAAY,WAIZ,OAHAC,KAAKC,IAAMD,KAAKC,KAAO,WACrB,OAAQ,IAAID,IACd,EACOA,KAAKC,KACd,EACA5D,EAAEyD,WAAa,SAAUhL,GAEvB,SAASoL,EAAInK,GACX,OAAOA,EAAI,GAAK,IAAMA,EAAIA,CAC5B,CACA,OAAOjB,EAAEqL,iBAAmB,IAAMD,EAAIpL,EAAEsL,cAAgB,GAAK,IAAMF,EAAIpL,EAAEuL,cAAgB,IAAMH,EAAIpL,EAAEwL,eAAiB,IAAMJ,EAAIpL,EAAEyL,iBAAmB,IAAML,EAAIpL,EAAE0L,gBACnK,EACAnE,EAAEoE,SAAW,SAAUtC,GACrB,OAAO,WACL,IACE,OAAOA,EAAEzB,MAAMc,KAAMxF,UACvB,CAAE,MAAOxG,GACP2E,EAAQ4G,SAAS,gFACbrD,EAAOC,OACTxD,EAAQ4G,SAASvL,EAErB,CACF,CACF,EACA6K,EAAEqE,eAAiB,SAAUC,EAAOC,GAClC,IAAK,IAAItQ,EAAI,EAAGA,EAAIsQ,EAAUpQ,OAAQF,IACpCqQ,EAAMjQ,UAAUkQ,EAAUtQ,IAAM+L,EAAEoE,SAASE,EAAMjQ,UAAUkQ,EAAUtQ,IAEzE,EACA+L,EAAEwE,0BAA4B,SAAUvH,GACtC,IAAK,IAAI2D,KAAQ3D,EACU,oBAAdA,EAAI2D,KACb3D,EAAI2D,GAAQZ,EAAEoE,SAASnH,EAAI2D,IAGjC,EACAZ,EAAEyE,uBAAyB,SAAU/O,GACnC,IAAIgP,EAAM,CAAC,EAMX,OALA1E,EAAEM,KAAK5K,GAAG,SAAU6N,EAAGC,GACjBxD,EAAE0B,SAAS6B,IAAMA,EAAEpP,OAAS,IAC9BuQ,EAAIlB,GAAKD,EAEb,IACOmB,CACT,EAOA1E,EAAE2E,SAAW,SAAU1H,EAAK9I,GAC1B,IAAIuQ,EAgBJ,MAfmB,kBAARzH,EACTyH,EAAMzH,EAAI/C,MAAM,EAAG/F,GACV6L,EAAEF,QAAQ7C,IACnByH,EAAM,GACN1E,EAAEM,KAAKrD,GAAK,SAAU2H,GACpBF,EAAIjQ,KAAKuL,EAAE2E,SAASC,EAAKzQ,GAC3B,KACS6L,EAAEgD,SAAS/F,IACpByH,EAAM,CAAC,EACP1E,EAAEM,KAAKrD,GAAK,SAAU2H,EAAKpL,GACzBkL,EAAIlL,GAAOwG,EAAE2E,SAASC,EAAKzQ,EAC7B,KAEAuQ,EAAMzH,EAEDyH,CACT,EACA1E,EAAE6E,WACO,SAAUC,GACf,IACIC,EAAQ,SAAexG,GACzB,IAAIyG,EAAY,0HACZC,EAAO,CAET,KAAM,MACN,KAAM,MACN,KAAM,MACN,KAAM,MACN,KAAM,MACN,IAAK,MACL,KAAM,QAGR,OADAD,EAAUE,UAAY,EACfF,EAAUjD,KAAKxD,GAAU,IAAMA,EAAO4B,QAAQ6E,GAAW,SAAUG,GACxE,IAAI3M,EAAIyM,EAAKE,GACb,MAAoB,kBAAN3M,EAAiBA,EAAI,OAAS,OAAS2M,EAAEC,WAAW,GAAGpG,SAAS,KAAK9E,OAAO,EAC5F,IAAK,IAAM,IAAMqE,EAAS,GAC5B,EAiFA,OAhFU,SAAS2B,EAAI1G,EAAK6L,GAC1B,IAAIC,EAAM,GAENrR,EAAI,EACJuP,EAAI,GACJD,EAAI,GACJpP,EAAS,EACToR,EAAOD,EACPE,EAAU,GACVtM,EAAQmM,EAAO7L,GAQnB,OALIN,GAA4B,WAAnB8D,EAAQ9D,IAA+C,oBAAjBA,EAAMuM,SACvDvM,EAAQA,EAAMuM,OAAOjM,IAIfwD,EAAQ9D,IACd,IAAK,SACH,OAAO6L,EAAM7L,GACf,IAAK,SAEH,OAAOwM,SAASxM,GAASyM,OAAOzM,GAAS,OAC3C,IAAK,UACL,IAAK,OAKH,OAAOyM,OAAOzM,GAChB,IAAK,SAKH,IAAKA,EACH,MAAO,OAQT,GAJAoM,GAtCS,OAuCTE,EAAU,GAGoB,mBAA1BxG,EAASqB,MAAMnH,GAA6B,CAK9C,IADA/E,EAAS+E,EAAM/E,OACVF,EAAI,EAAGA,EAAIE,EAAQF,GAAK,EAC3BuR,EAAQvR,GAAKiM,EAAIjM,EAAGiF,IAAU,OAOhC,OAFAqK,EAAuB,IAAnBiC,EAAQrR,OAAe,KAAOmR,EAAM,MAAQA,EAAME,EAAQI,KAAK,MAAQN,GAAO,KAAOC,EAAO,IAAM,IAAMC,EAAQI,KAAK,KAAO,IAChIN,EAAMC,EACChC,CACT,CAGA,IAAKC,KAAKtK,EACJ5E,EAAeC,KAAK2E,EAAOsK,KAC7BD,EAAIrD,EAAIsD,EAAGtK,KAETsM,EAAQ/Q,KAAKsQ,EAAMvB,IAAM8B,EAAM,KAAO,KAAO/B,GASnD,OAFAA,EAAuB,IAAnBiC,EAAQrR,OAAe,KAAOmR,EAAM,IAAME,EAAQI,KAAK,KAAYL,EAAO,IAAM,IAAMC,EAAQI,KAAK,KAAO,IAC9GN,EAAMC,EACChC,EAEb,CAIOrD,CAAI,GAAI,CACb,GApGU4E,GAsGd,EAOF9E,EAAE6F,YAKEzH,EAAU,CACR,IAAK,IACL,KAAM,KACN,IAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,MAGPxG,EAAQ,SAAeW,GACrB,IAAIpD,EAAI,IAAI2Q,YAAYvN,GAGxB,MAFApD,EAAE8I,GAAKA,EACP9I,EAAEgJ,KAAOA,EACHhJ,CACR,EACAkJ,EAAO,SAAc7F,GASnB,OAPIA,GAAKA,IAAM0F,GACbtG,EAAM,aAAgBY,EAAI,iBAAqB0F,EAAK,KAItDA,EAAKC,EAAK4H,OAAO9H,GACjBA,GAAM,EACCC,CACT,EACAI,EAAS,WAEP,IAAIA,EACFC,EAAS,GAKX,IAJW,MAAPL,IACFK,EAAS,IACTF,EAAK,MAEAH,GAAM,KAAOA,GAAM,KACxBK,GAAUL,EACVG,IAEF,GAAW,MAAPH,EAEF,IADAK,GAAU,IACHF,KAAUH,GAAM,KAAOA,GAAM,KAClCK,GAAUL,EAGd,GAAW,MAAPA,GAAqB,MAAPA,EAOhB,IANAK,GAAUL,EACVG,IACW,MAAPH,GAAqB,MAAPA,IAChBK,GAAUL,EACVG,KAEKH,GAAM,KAAOA,GAAM,KACxBK,GAAUL,EACVG,IAIJ,GADAC,GAAUC,EACLmH,SAASpH,GAGZ,OAAOA,EAFP1G,EAAM,aAIV,EACA2G,EAAS,WAEP,IAAIyH,EACF/R,EAEAgS,EADA1H,EAAS,GAGX,GAAW,MAAPL,EACF,KAAOG,KAAQ,CACb,GAAW,MAAPH,EAEF,OADAG,IACOE,EAET,GAAW,OAAPL,EAEF,GADAG,IACW,MAAPH,EAAY,CAEd,IADA+H,EAAQ,EACHhS,EAAI,EAAGA,EAAI,IACd+R,EAAME,SAAS7H,IAAQ,IAClBqH,SAASM,IAFG/R,GAAK,EAKtBgS,EAAgB,GAARA,EAAaD,EAEvBzH,GAAUoH,OAAOQ,aAAaF,EAChC,KAAO,IAA2B,kBAAhB7H,EAAQF,GAGxB,MAFAK,GAAUH,EAAQF,EAGpB,MAEAK,GAAUL,CAEd,CAEFtG,EAAM,aACR,EACA4G,EAAQ,WAEN,KAAON,GAAMA,GAAM,KACjBG,GAEJ,EA4BAI,EAAQ,WAEN,IAAIA,EAAQ,GACZ,GAAW,MAAPP,EAAY,CAGd,GAFAG,EAAK,KACLG,IACW,MAAPN,EAEF,OADAG,EAAK,KACEI,EAGT,KAAOP,GAAI,CAGT,GAFAO,EAAMhK,KAAKyE,KACXsF,IACW,MAAPN,EAEF,OADAG,EAAK,KACEI,EAETJ,EAAK,KACLG,GACF,CACF,CACA5G,EAAM,YACR,EACA+B,EAAS,WAEP,IAAIH,EACFG,EAAS,CAAC,EACZ,GAAW,MAAPuE,EAAY,CAGd,GAFAG,EAAK,KACLG,IACW,MAAPN,EAEF,OADAG,EAAK,KACE1E,EAGT,KAAOuE,GAAI,CAST,GARA1E,EAAM+E,IACNC,IACAH,EAAK,KACDjK,OAAOE,eAAeC,KAAKoF,EAAQH,IACrC5B,EAAM,kBAAoB4B,EAAM,KAElCG,EAAOH,GAAON,IACdsF,IACW,MAAPN,EAEF,OADAG,EAAK,KACE1E,EAET0E,EAAK,KACLG,GACF,CACF,CACA5G,EAAM,aACR,EACFsB,EAAQ,WAIN,OADAsF,IACQN,GACN,IAAK,IACH,OAAOvE,IACT,IAAK,IACH,OAAO8E,IACT,IAAK,IACH,OAAOF,IACT,IAAK,IACH,OAAOD,IACT,QACE,OAAOJ,GAAM,KAAOA,GAAM,IAAMI,IAhG7B,WAEL,OAAQJ,GACN,IAAK,IAKH,OAJAG,EAAK,KACLA,EAAK,KACLA,EAAK,KACLA,EAAK,MACE,EACT,IAAK,IAMH,OALAA,EAAK,KACLA,EAAK,KACLA,EAAK,KACLA,EAAK,KACLA,EAAK,MACE,EACT,IAAK,IAKH,OAJAA,EAAK,KACLA,EAAK,KACLA,EAAK,KACLA,EAAK,KACE,KAEXzG,EAAM,eAAiBsG,EAAK,IAC9B,CAwE+CkI,GAEjD,EAIO,SAAUxE,GACf,IAAIN,EASJ,OARAnD,EAAOyD,EACP3D,EAAK,EACLC,EAAK,IACLoD,EAASpI,IACTsF,IACIN,GACFtG,EAAM,gBAED0J,CACT,GAEFtB,EAAEqG,aAAe,SAAUzS,GACzB,IAIE0S,EACAC,EACAC,EACAC,EACAC,EAREC,EAAM,oEASR1S,EAAI,EACJ2S,EAAK,EACLC,EAAM,GACNC,EAAU,GACZ,IAAKlT,EACH,OAAOA,EAETA,EAAOoM,EAAE+G,WAAWnT,GACpB,GAME0S,GADAI,EAHK9S,EAAKwR,WAAWnR,MAGR,GAFRL,EAAKwR,WAAWnR,MAEG,EADnBL,EAAKwR,WAAWnR,OAER,GAAK,GAClBsS,EAAKG,GAAQ,GAAK,GAClBF,EAAKE,GAAQ,EAAI,GACjBD,EAAY,GAAPC,EAGLI,EAAQF,KAAQD,EAAIZ,OAAOO,GAAMK,EAAIZ,OAAOQ,GAAMI,EAAIZ,OAAOS,GAAMG,EAAIZ,OAAOU,SACvExS,EAAIL,EAAKO,QAElB,OADA0S,EAAMC,EAAQlB,KAAK,IACXhS,EAAKO,OAAS,GACpB,KAAK,EACH0S,EAAMA,EAAI3M,MAAM,GAAI,GAAK,KACzB,MACF,KAAK,EACH2M,EAAMA,EAAI3M,MAAM,GAAI,GAAK,IAG7B,OAAO2M,CACT,EACA7G,EAAE+G,WAAa,SAAUxI,GAEvB,IACEyI,EACAC,EACEC,EACFxN,EAJEyN,EAAU,GAOd,IAFAH,EAAQC,EAAM,EACdC,GAPA3I,GAAUA,EAAS,IAAI4B,QAAQ,QAAS,MAAMA,QAAQ,MAAO,OAO5ChM,OACZuF,EAAI,EAAGA,EAAIwN,EAASxN,IAAK,CAC5B,IAAI0N,EAAK7I,EAAO6G,WAAW1L,GACvBmN,EAAM,KACNO,EAAK,IACPH,IAEAJ,EADSO,EAAK,KAAOA,EAAK,KACpBzB,OAAOQ,aAAaiB,GAAM,EAAI,IAAU,GAALA,EAAU,KAE7CzB,OAAOQ,aAAaiB,GAAM,GAAK,IAAKA,GAAM,EAAI,GAAK,IAAU,GAALA,EAAU,KAE9D,OAARP,IACEI,EAAMD,IACRG,GAAW5I,EAAO8I,UAAUL,EAAOC,IAErCE,GAAWN,EACXG,EAAQC,EAAMvN,EAAI,EAEtB,CAIA,OAHIuN,EAAMD,IACRG,GAAW5I,EAAO8I,UAAUL,EAAOzI,EAAOpK,SAErCgT,CACT,EACAnH,EAAEsH,MAGI5I,EAAI,WAON,IANA,IAAIjG,EAAI,EAAI,IAAIkL,KACd1P,EAAI,EAKCwE,GAAK,EAAI,IAAIkL,MAClB1P,IAEF,OAAOwE,EAAEuG,SAAS,IAAM/K,EAAE+K,SAAS,GACrC,EAsCO,WACL,IAAIuI,GAAMzJ,EAAOE,OAASF,EAAOC,OAAOiB,SAAS,IACjD,OAAON,IAAM,IApCN8I,KAAKC,SAASzI,SAAS,IAAImB,QAAQ,IAAK,IAoCtB,IA7BlB,WACP,IACElM,EACAiK,EAFEwJ,EAAK/J,EAGPgK,EAAS,GACTjD,EAAM,EACR,SAASkD,EAAItG,EAAQuG,GACnB,IAAIC,EACFC,EAAM,EACR,IAAKD,EAAI,EAAGA,EAAID,EAAW1T,OAAQ2T,IACjCC,GAAOJ,EAAOG,IAAU,EAAJA,EAEtB,OAAOxG,EAASyG,CAClB,CACA,IAAK9T,EAAI,EAAGA,EAAIyT,EAAGvT,OAAQF,IACzBiK,EAAKwJ,EAAGtC,WAAWnR,GACnB0T,EAAOK,QAAa,IAAL9J,GACXyJ,EAAOxT,QAAU,IACnBuQ,EAAMkD,EAAIlD,EAAKiD,GACfA,EAAS,IAMb,OAHIA,EAAOxT,OAAS,IAClBuQ,EAAMkD,EAAIlD,EAAKiD,IAEVjD,EAAI1F,SAAS,GACtB,CAGiCiJ,GAAO,IAAMV,EAAK,IAAM7I,GACzD,GAMF,IAAIwJ,EAAkB,CAAC,cAAe,UAAW,cAAe,mBAAoB,YAAa,iBAAkB,eAAgB,YAGnI,gBAAiB,cAAe,mBAAoB,qBAAsB,iBAAkB,qBAAsB,oBAAqB,YAAa,iBAAkB,uBAAwB,mBAC9LlI,EAAEmI,YAAc,SAAUT,GACxB,IAAIzT,EAEJ,IADAyT,EAAKA,EAAGU,cACHnU,EAAI,EAAGA,EAAIiU,EAAgB/T,OAAQF,IACtC,IAAwC,IAApCyT,EAAGhI,QAAQwI,EAAgBjU,IAC7B,OAAO,EAGX,OAAO,CACT,EAMA+L,EAAEqI,eAAiB,SAAUC,EAAUC,GACrC,IAAIC,EACFC,EACA3B,EAAU,GASZ,OARI9G,EAAEI,YAAYmI,KAChBA,EAAgB,KAElBvI,EAAEM,KAAKgI,GAAU,SAAU1D,EAAKpL,GAC9BgP,EAAUE,mBAAmB9D,EAAI5F,YACjCyJ,EAAUC,mBAAmBlP,GAC7BsN,EAAQA,EAAQ3S,QAAUsU,EAAU,IAAMD,CAC5C,IACO1B,EAAQlB,KAAK2C,EACtB,EACAvI,EAAE2I,cAAgB,SAAUC,EAAKC,GAG/BA,EAAQA,EAAM1I,QAAQ,MAAO,OAAOA,QAAQ,OAAQ,OACpD,IAEEmC,EADQ,IAAIwG,OADD,SAAWD,EAAQ,aAEdE,KAAKH,GACvB,GAAgB,OAAZtG,GAAoBA,GAAiC,kBAAfA,EAAQ,IAAmBA,EAAQ,GAAGnO,OAC9E,MAAO,GAEP,IAAImN,EAASgB,EAAQ,GACrB,IACEhB,EAAS0H,mBAAmB1H,EAC9B,CAAE,MAAO1K,GACPkD,EAAQlC,MAAM,gDAAkD0J,EAClE,CACA,OAAOA,EAAOnB,QAAQ,MAAO,IAEjC,EAIAH,EAAEiJ,OAAS,CACTnQ,IAAK,SAAaZ,GAGhB,IAFA,IAAIgR,EAAShR,EAAO,IAChBiR,EAAKhK,EAAW8J,OAAOG,MAAM,KACxBnV,EAAI,EAAGA,EAAIkV,EAAGhV,OAAQF,IAAK,CAElC,IADA,IAAIuE,EAAI2Q,EAAGlV,GACW,KAAfuE,EAAEuN,OAAO,IACdvN,EAAIA,EAAE6O,UAAU,EAAG7O,EAAErE,QAEvB,GAA0B,IAAtBqE,EAAEkH,QAAQwJ,GACZ,OAAOF,mBAAmBxQ,EAAE6O,UAAU6B,EAAO/U,OAAQqE,EAAErE,QAE3D,CACA,OAAO,IACT,EACAkV,MAAO,SAAenR,GACpB,IAAI+Q,EACJ,IACEA,EAASjJ,EAAE6F,WAAW7F,EAAEiJ,OAAOnQ,IAAIZ,KAAU,CAAC,CAChD,CAAE,MAAOtB,GAET,CACA,OAAOqS,CACT,EACAK,YAAa,SAAqBpR,EAAMgB,EAAOqQ,EAASC,EAAoBC,EAAWC,EAAeC,GACpG,IAAIC,EAAU,GACZC,EAAU,GACVC,EAAS,GACX,GAAIH,EACFC,EAAU,YAAcD,OACnB,GAAIH,EAAoB,CAC7B,IAAIO,EAASC,EAAe7K,EAAWvB,SAASH,UAChDmM,EAAUG,EAAS,aAAeA,EAAS,EAC7C,CACA,GAAIR,EAAS,CACX,IAAIU,EAAO,IAAItG,KACfsG,EAAKC,QAAQD,EAAKE,UAAsB,IAAVZ,GAC9BM,EAAU,aAAeI,EAAKG,aAChC,CACIV,IACFD,GAAY,EACZK,EAAS,mBAEPL,IACFK,GAAU,YAEZ3K,EAAW8J,OAAS/Q,EAAO,IAAMwQ,mBAAmBxP,GAAS2Q,EAAU,WAAaD,EAAUE,CAChG,EACAhP,IAAK,SAAa5C,EAAMgB,EAAOmR,EAAMb,EAAoBC,EAAWC,EAAeC,GACjF,IAAIC,EAAU,GACZC,EAAU,GACVC,EAAS,GACX,GAAIH,EACFC,EAAU,YAAcD,OACnB,GAAIH,EAAoB,CAC7B,IAAIO,EAASC,EAAe7K,EAAWvB,SAASH,UAChDmM,EAAUG,EAAS,aAAeA,EAAS,EAC7C,CACA,GAAIM,EAAM,CACR,IAAIJ,EAAO,IAAItG,KACfsG,EAAKC,QAAQD,EAAKE,UAAmB,GAAPE,EAAY,GAAK,GAAK,KACpDR,EAAU,aAAeI,EAAKG,aAChC,CACIV,IACFD,GAAY,EACZK,EAAS,mBAEPL,IACFK,GAAU,YAEZ,IAAIQ,EAAiBpS,EAAO,IAAMwQ,mBAAmBxP,GAAS2Q,EAAU,WAAaD,EAAUE,EAE/F,OADA3K,EAAW8J,OAASqB,EACbA,CACT,EACAC,OAAQ,SAAgBrS,EAAMsR,EAAoBG,GAChD3J,EAAEiJ,OAAOnO,IAAI5C,EAAM,IAAK,EAAGsR,GAAoB,GAAO,EAAOG,EAC/D,GAEF,IAAIa,EAAyB,KACzBC,EAAwB,SAA+BC,EAASC,GAClE,GAA+B,OAA3BH,IAAoCG,EACtC,OAAOH,EAET,IAAII,GAAY,EAChB,IACEF,EAAUA,GAAW1Q,OAAO6Q,aAC5B,IAAIrR,EAAM,WAAasR,EAAW,GAElCJ,EAAQK,QAAQvR,EADR,eAEJkR,EAAQM,QAAQxR,KAClBoR,GAAY,GAEdF,EAAQO,WAAWzR,EACrB,CAAE,MAAO5C,GACPgU,GAAY,CACd,CAEA,OADAJ,EAAyBI,EAClBA,CACT,EAGA5K,EAAE6K,aAAe,CACfK,aAAc,SAAsBC,GAClC,IAAIP,EAAYH,EAAsB,KAAMU,GAI5C,OAHKP,GACH9Q,EAAQlC,MAAM,0DAETgT,CACT,EACAhT,MAAO,SAAewT,GACpBtR,EAAQlC,MAAM,uBAAyBwT,EACzC,EACAtS,IAAK,SAAaZ,GAChB,IACE,OAAO8B,OAAO6Q,aAAaG,QAAQ9S,EACrC,CAAE,MAAOtB,GACPoJ,EAAE6K,aAAajT,MAAMhB,EACvB,CACA,OAAO,IACT,EACAyS,MAAO,SAAenR,GACpB,IACE,OAAO8H,EAAE6F,WAAW7F,EAAE6K,aAAa/R,IAAIZ,KAAU,CAAC,CACpD,CAAE,MAAOtB,GAET,CACA,OAAO,IACT,EACAkE,IAAK,SAAa5C,EAAMgB,GACtB,IACEc,OAAO6Q,aAAaE,QAAQ7S,EAAMgB,EACpC,CAAE,MAAOtC,GACPoJ,EAAE6K,aAAajT,MAAMhB,EACvB,CACF,EACA2T,OAAQ,SAAgBrS,GACtB,IACE8B,OAAO6Q,aAAaI,WAAW/S,EACjC,CAAE,MAAOtB,GACPoJ,EAAE6K,aAAajT,MAAMhB,EACvB,CACF,GAEFoJ,EAAEqL,eAAiB,WAqDjB,SAASC,EAAS9U,GAKhB,OAJIA,IACFA,EAAM+U,eAAiBD,EAASC,eAChC/U,EAAMgV,gBAAkBF,EAASE,iBAE5BhV,CACT,CAOA,OANA8U,EAASC,eAAiB,WACxBpK,KAAKsK,aAAc,CACrB,EACAH,EAASE,gBAAkB,WACzBrK,KAAKuK,cAAe,CACtB,EAlDqB,SAAwBC,EAAStV,EAAMuV,EAASC,EAAWC,GAC9E,GAAKH,EAIL,GAAIA,EAAQ1P,mBAAqB4P,EAC/BF,EAAQ1P,iBAAiB5F,EAAMuV,IAAWE,OACrC,CACL,IAAIC,EAAS,KAAO1V,EAChB2V,EAAcL,EAAQI,GAC1BJ,EAAQI,GAGZ,SAAqBJ,EAASM,EAAaC,GACzC,IAAIN,EAAU,SAAiBpV,GAQ7B,GAPAA,EAAQA,GAAS8U,EAAStR,OAAOxD,OAOjC,CAGA,IACI2V,EAAYC,EADZ1H,GAAM,EASV,OAPI1E,EAAEiB,WAAWiL,KACfC,EAAaD,EAAa1V,IAE5B4V,EAAaH,EAAY1X,KAAKoX,EAASnV,IACnC,IAAU2V,IAAc,IAAUC,IACpC1H,GAAM,GAEDA,CAVP,CAWF,EACA,OAAOkH,CACT,CA3BsBS,CAAYV,EAASC,EAASI,EAClD,MATElS,EAAQlC,MAAM,8CAUlB,CAwCF,CAnEmB,GAoEnB,IAAI0U,EAAoB,IAAIxD,OAAO,2DACnC9I,EAAEuM,UAAY,WAoBZ,SAASC,EAAerX,GAEtB,OAAOA,EAAEmD,IAAMnD,EAAEmD,IAAMnD,EAAEU,qBAAqB,IAChD,CACA,IAAI4W,EAAiB,YACrB,SAASC,EAASC,EAAMC,GACtB,IAAIC,EAAY,IAAMD,EAAW,IACjC,OAAQ,IAAMD,EAAKE,UAAY,KAAK1M,QAAQsM,EAAgB,KAAK/M,QAAQmN,IAAc,CACzF,CACA,SAASC,EAAsBF,GAE7B,IAAKzN,EAAWtJ,qBACd,MAAO,GAGT,IACIkX,EAAOrG,EAAMsG,EAAStK,EAAOuK,EAAYhZ,EAAG6T,EAAGtE,EAAG0J,EAAUC,EAD5DC,EAASR,EAASxD,MAAM,KAExBiE,EAAiB,CAAClO,GACtB,IAAKlL,EAAI,EAAGA,EAAImZ,EAAOjZ,OAAQF,IAE7B,IADA8Y,EAAQK,EAAOnZ,GAAGkM,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,KAC5CT,QAAQ,MAAQ,EAA1B,CAGEsN,GADAtG,EAAOqG,EAAM3D,MAAM,MACJ,GACf,IAAIxN,EAAK8K,EAAK,GACViF,EAAUxM,EAAWmO,eAAe1R,GACxC,IAAK+P,GAAWqB,GAAWrB,EAAQ4B,SAASnF,eAAiB4E,EAE3D,MAAO,GAGTK,EAAiB,CAAC1B,EAEpB,MAEA,GAAIoB,EAAMrN,QAAQ,MAAQ,EAA1B,CAGEsN,GADAtG,EAAOqG,EAAM3D,MAAM,MACJ,GACf,IAAIyD,EAAYnG,EAAK,GAOrB,IANKsG,IACHA,EAAU,KAGZtK,EAAQ,GACRuK,EAAa,EACRnF,EAAI,EAAGA,EAAIuF,EAAelZ,OAAQ2T,IAMrC,IAJEoF,EADa,KAAXF,EACSR,EAAea,EAAevF,IAE9BuF,EAAevF,GAAGjS,qBAAqBmX,GAE/CxJ,EAAI,EAAGA,EAAI0J,EAAS/Y,OAAQqP,IAC/Bd,EAAMuK,KAAgBC,EAAS1J,GAKnC,IAFA6J,EAAiB,GACjBF,EAAsB,EACjBrF,EAAI,EAAGA,EAAIpF,EAAMvO,OAAQ2T,IACxBpF,EAAMoF,GAAG+E,WAAa7M,EAAE0B,SAASgB,EAAMoF,GAAG+E,YAE9CH,EAAShK,EAAMoF,GAAI+E,KACjBQ,EAAeF,KAAyBzK,EAAMoF,GAIpD,KA/BA,CAiCA,IAAI0F,EAAcT,EAAMU,MAAMnB,GAC9B,GAAIkB,EAAJ,CACER,EAAUQ,EAAY,GACtB,IAqBIE,EArBAC,EAAWH,EAAY,GACvBI,EAAeJ,EAAY,GAC3BK,EAAYL,EAAY,GAO5B,IANKR,IACHA,EAAU,KAGZtK,EAAQ,GACRuK,EAAa,EACRnF,EAAI,EAAGA,EAAIuF,EAAelZ,OAAQ2T,IAMrC,IAJEoF,EADa,KAAXF,EACSR,EAAea,EAAevF,IAE9BuF,EAAevF,GAAGjS,qBAAqBmX,GAE/CxJ,EAAI,EAAGA,EAAI0J,EAAS/Y,OAAQqP,IAC/Bd,EAAMuK,KAAgBC,EAAS1J,GAMnC,OAHA6J,EAAiB,GACjBF,EAAsB,EAEdS,GACN,IAAK,IAEHF,EAAgB,SAAuBvY,GACrC,OAAOA,EAAEa,aAAa2X,IAAaE,CACrC,EACA,MACF,IAAK,IAEHH,EAAgB,SAAuBvY,GACrC,OAAOA,EAAEa,aAAa2X,GAAUF,MAAM,IAAI3E,OAAO,MAAQ+E,EAAY,OACvE,EACA,MACF,IAAK,IAEHH,EAAgB,SAAuBvY,GACrC,OAAOA,EAAEa,aAAa2X,GAAUF,MAAM,IAAI3E,OAAO,IAAM+E,EAAY,MACrE,EACA,MACF,IAAK,IAEHH,EAAgB,SAAuBvY,GACrC,OAAuD,IAAhDA,EAAEa,aAAa2X,GAAUjO,QAAQmO,EAC1C,EACA,MACF,IAAK,IAEHH,EAAgB,SAAuBvY,GACrC,OAAOA,EAAEa,aAAa2X,GAAUG,YAAYD,IAAc1Y,EAAEa,aAAa2X,GAAUxZ,OAAS0Z,EAAU1Z,MACxG,EACA,MACF,IAAK,IAEHuZ,EAAgB,SAAuBvY,GACrC,OAAOA,EAAEa,aAAa2X,GAAUjO,QAAQmO,IAAc,CACxD,EACA,MACF,QAEEH,EAAgB,SAAuBvY,GACrC,OAAOA,EAAEa,aAAa2X,EACxB,EAIJ,IAFAN,EAAiB,GACjBF,EAAsB,EACjBrF,EAAI,EAAGA,EAAIpF,EAAMvO,OAAQ2T,IACxB4F,EAAchL,EAAMoF,MACtBuF,EAAeF,KAAyBzK,EAAMoF,GAKpD,KA5EA,CAiFA,IAHAkF,EAAUD,EACVrK,EAAQ,GACRuK,EAAa,EACRnF,EAAI,EAAGA,EAAIuF,EAAelZ,OAAQ2T,IAErC,IADAoF,EAAWG,EAAevF,GAAGjS,qBAAqBmX,GAC7CxJ,EAAI,EAAGA,EAAI0J,EAAS/Y,OAAQqP,IAC/Bd,EAAMuK,KAAgBC,EAAS1J,GAGnC6J,EAAiB3K,CAXjB,CA/EA,CA4FF,OAAO2K,CACT,CACA,OAAO,SAAUU,GACf,OAAI/N,EAAEoD,UAAU2K,GACP,CAACA,GACC/N,EAAEgD,SAAS+K,KAAW/N,EAAEI,YAAY2N,EAAM5Z,QAC5C4Z,EAEAjB,EAAsBvY,KAAK4M,KAAM4M,EAE5C,CACF,CA7Lc,GA8Ld/N,EAAEgO,KAAO,CACPC,eAAgB,WACd,IAAIC,EAAoB,0DAA0D9E,MAAM,KACtF+E,EAAK,GACLC,EAAS,CAAC,EAOZ,OANApO,EAAEM,KAAK4N,GAAmB,SAAUG,IAClCF,EAAKnO,EAAE2I,cAAcxJ,EAAWmP,IAAKD,IAC9Bla,SACLia,EAAOC,GAASF,EAEpB,IACOC,CACT,EACAG,aAAc,SAAsB1Q,GAClC,OAAwD,IAApDA,EAAS2Q,OAAO,gCACX,SAC+C,IAA7C3Q,EAAS2Q,OAAO,yBAClB,OACgD,IAA9C3Q,EAAS2Q,OAAO,0BAClB,QACqD,IAAnD3Q,EAAS2Q,OAAO,+BAClB,aAEA,IAEX,EACAC,WAAY,SAAoB5Q,GAC9B,IAAI2Q,EAASxO,EAAEgO,KAAKO,aAAa1Q,GAC/BgL,EAAkB,SAAV2F,EAAoB,IAAM,IAClC9J,EAAM,CAAC,EACT,GAAe,OAAX8J,EAAiB,CACnB9J,EAAoB,eAAI8J,EACxB,IAAIE,EAAU1O,EAAE2I,cAAc9K,EAAUgL,GACpC6F,EAAQva,SACVuQ,EAAgB,WAAIgK,EAExB,CACA,OAAOhK,CACT,EAMAiK,QAAS,SAAiBC,EAAYC,EAAQxP,GAE5C,OADAwP,EAASA,GAAU,GACfxP,GAASW,EAAE2C,SAASiM,EAAY,SAC9B5O,EAAE2C,SAASiM,EAAY,QAClB,aAEF,QACE,8BAA8B7M,KAAK6M,GACrC,aACE5O,EAAE2C,SAASiM,EAAY,aAAe5O,EAAE2C,SAASiM,EAAY,aAC/D,2BACE5O,EAAE2C,SAASiM,EAAY,mBAEzB,mBACE5O,EAAE2C,SAASiM,EAAY,SAAW5O,EAAE2C,SAASiM,EAAY,QAC3D,iBACE5O,EAAE2C,SAASiM,EAAY,SACzB,kBACE5O,EAAE2C,SAASiM,EAAY,UACzB,SACE5O,EAAE2C,SAASiM,EAAY,SACzB,aACE5O,EAAE2C,SAASiM,EAAY,UAAY5O,EAAE2C,SAASiM,EAAY,aAC5D,aACE5O,EAAE2C,SAASiM,EAAY,SACzB,cACE5O,EAAE2C,SAASkM,EAAQ,SACxB7O,EAAE2C,SAASiM,EAAY,UAClB,gBAEF,SACE5O,EAAE2C,SAASiM,EAAY,WACzB,iBACE5O,EAAE2C,SAASiM,EAAY,aACzB,YACE5O,EAAE2C,SAASiM,EAAY,WACzB,UACE5O,EAAE2C,SAASiM,EAAY,SAAW5O,EAAE2C,SAASiM,EAAY,YAC3D,oBACE5O,EAAE2C,SAASiM,EAAY,SACzB,UAEA,EAEX,EAMAE,eAAgB,SAAwBnR,EAAWkR,EAAQxP,GACzD,IAmBI0P,EAlBgB,CAClB,2BAA4B,mBAC5B,iBAAkB,uBAClB,OAAU,wBACV,aAAc,uBACd,aAAc,mCACd,OAAU,yBACV,gBAAiB,yBACjB,MAAS,6BACT,QAAW,yBACX,cAAe,uBACf,UAAa,0BACb,WAAc,2BACd,iBAAkB,yBAClB,mBAAoB,gCACpB,oBAAqB,2BACrB,QAAW,oBAjBC/O,EAAEgO,KAAKW,QAAQhR,EAAWkR,EAAQxP,IAoBhD,QAAclH,IAAV4W,EACF,OAAO,KAET,IAAIpS,EAAUgB,EAAU8P,MAAMsB,GAC9B,OAAKpS,EAGEqS,WAAWrS,EAAQA,EAAQxI,OAAS,IAFlC,IAGX,EACA8a,GAAI,WACF,IAAI9J,EAAIxH,EACR,MAAI,WAAWoE,KAAKoD,GACd,QAAQpD,KAAKoD,IAAM,YAAYpD,KAAKoD,GAC/B,gBAEF,UACE,qBAAqBpD,KAAKoD,GAC5B,MACE,UAAUpD,KAAKoD,GACjB,UACE,8BAA8BpD,KAAKoD,GACrC,aACE,OAAOpD,KAAKoD,GACd,WACE,QAAQpD,KAAKoD,GACf,QACE,OAAOpD,KAAKoD,GACd,YAEA,EAEX,EACA+J,OAAQ,SAAgBN,GACtB,MAAI,iBAAiB7M,KAAK6M,IAAe,YAAY7M,KAAK6M,GACjD,gBACE,OAAO7M,KAAK6M,GACd,OACE,OAAO7M,KAAK6M,GACd,aACE,SAAS7M,KAAK6M,GAChB,SACE,8BAA8B7M,KAAK6M,GACrC,aACE,UAAU7M,KAAK6M,GACjB,UAEA,EAEX,EACAO,gBAAiB,SAAyBtR,GACxC,IAAIuL,EAAQvL,EAASuL,MAAM,KAC3B,OAAIA,EAAMjV,QAAU,EACXiV,EAAM,GAER,EACT,EACAgG,WAAY,WACV,OAAOpP,EAAE2B,OAAO3B,EAAEyE,uBAAuB,CACvC,IAAOzE,EAAEgO,KAAKiB,KACd,SAAYjP,EAAEgO,KAAKW,QAAQhR,EAAWuB,EAAY2P,OAAQzP,GAC1D,UAAaD,EAAWtB,SACxB,kBAAqBmC,EAAEgO,KAAKmB,gBAAgBhQ,EAAWtB,UACvD,QAAWmC,EAAEgO,KAAKkB,OAAOvR,KACvB,CACF,aAAgBP,EAASQ,SAASpI,KAClC,iBAAoBwK,EAAEgO,KAAKc,eAAenR,EAAWuB,EAAY2P,OAAQzP,GACzE,eAAkBtB,EAAOE,OACzB,cAAiBF,EAAOC,MACxB,OAAU,MACV,aAAgBV,EAAOE,YACvB,WAAcuN,IACd,KAAQ9K,EAAE0D,YAAc,KAE5B,EAEA2L,kBAAmB,WACjB,OAAOrP,EAAE2B,OAAO3B,EAAEyE,uBAAuB,CACvC,IAAOzE,EAAEgO,KAAKiB,KACd,SAAYjP,EAAEgO,KAAKW,QAAQhR,EAAWuB,EAAY2P,OAAQzP,KACxD,CACF,iBAAoBY,EAAEgO,KAAKc,eAAenR,EAAWuB,EAAY2P,OAAQzP,IAE7E,EACAkQ,aAAc,SAAsBC,GAClC,OAAOvP,EAAEyE,uBAAuB,CAC9B,QAAW8K,EACX,YAAepQ,EAAWtB,SAC1B,WAAcmC,EAAEgO,KAAKW,QAAQhR,EAAWuB,EAAY2P,OAAQzP,GAC5D,YAAeY,EAAEgO,KAAKiB,MAE1B,GAEF,IAAInE,EAAa,SAAoB0E,GACnC,IAAIC,EAAOjI,KAAKC,SAASzI,SAAS,IAAIqI,UAAU,EAAG,IAAMG,KAAKC,SAASzI,SAAS,IAAIqI,UAAU,EAAG,IACjG,OAAOmI,EAASC,EAAKpI,UAAU,EAAGmI,GAAUC,CAC9C,EAGIC,EAA4B,+BAE5BC,EAAqB,oCAcrB3F,EAAiB,SAAwBvM,GAC3C,IAAImS,EAAeD,EACfE,EAAQpS,EAAS2L,MAAM,KACvB0G,EAAMD,EAAMA,EAAM1b,OAAS,IAC3B2b,EAAI3b,OAAS,GAAa,QAAR2b,GAAyB,QAARA,KACrCF,EAAeF,GAEjB,IAAI/S,EAAUc,EAASgQ,MAAMmC,GAC7B,OAAOjT,EAAUA,EAAQ,GAAK,EAChC,EACIoT,EAAgB,KAChBC,EAAY,KACI,qBAATC,OACTF,EAAgBE,KAAKC,UACrBF,EAAYC,KAAK5G,OAEnB0G,EAAgBA,GAAiB/P,EAAE6E,WACnCmL,EAAYA,GAAahQ,EAAE6F,WAG3B7F,EAAW,QAAIA,EAAES,QACjBT,EAAY,SAAIA,EAAEgD,SAClBhD,EAAc,WAAIA,EAAE6E,WACpB7E,EAAc,WAAIA,EAAE6F,WACpB7F,EAAe,YAAIA,EAAEmI,YACrBnI,EAAiB,cAAIA,EAAEiD,cACvBjD,EAAQ,KAAIA,EAAEgO,KACdhO,EAAQ,KAAU,OAAIA,EAAEgO,KAAKkB,OAC7BlP,EAAQ,KAAW,QAAIA,EAAEgO,KAAKW,QAC9B3O,EAAQ,KAAkB,eAAIA,EAAEgO,KAAKc,eACrC9O,EAAQ,KAAc,WAAIA,EAAEgO,KAAKoB,WAMjC,IAAIe,EAAa,WAAuB,EAGxCA,EAAW9b,UAAU+b,kBAAoB,WAAa,EACtDD,EAAW9b,UAAUgc,cAAgB,WAAa,EAClDF,EAAW9b,UAAUic,oBAAsB,WAAa,EACxDH,EAAW9b,UAAUmG,KAAO,SAAU+V,GAEpC,OADApP,KAAKqP,GAAKD,EACHpP,IACT,EAQAgP,EAAW9b,UAAUoc,MAAQ,SAAU1C,EAAO2C,EAAYtB,EAAYuB,GACpE,IAAIC,EAAOzP,KACP+L,EAAWlN,EAAEuM,UAAUwB,GAC3B,GAAwB,IAApBb,EAAS/Y,OAkBb,OAdA6L,EAAEM,KAAK4M,GAAU,SAAUvB,GACzB3L,EAAEqL,eAAeM,EAASxK,KAAK0P,gBAAgB,SAAU1b,GACvD,IAAI2b,EAAU,CAAC,EACXC,EAAQH,EAAKR,kBAAkBhB,EAAYjO,MAC3C3J,EAAUoZ,EAAKJ,GAAGQ,WAAW,uBACjCJ,EAAKP,cAAclb,EAAGgM,KAAM2P,GAG5B9W,OAAO5B,WAAWwY,EAAKK,eAAeN,EAAeI,EAAOD,GAAS,GAAOtZ,GAG5EoZ,EAAKJ,GAAGC,MAAMC,EAAYK,EAAOH,EAAKK,eAAeN,EAAeI,EAAOD,GAC7E,GACF,GAAG3P,OACI,EAjBLrH,EAAQlC,MAAM,kBAAoBmW,EAAQ,wBAkB9C,EAOAoC,EAAW9b,UAAU4c,eAAiB,SAAUN,EAAeI,EAAOD,EAASI,GAC7EA,EAAkBA,IAAmB,EACrC,IAAIN,EAAOzP,KACX,OAAO,WAGD2P,EAAQK,iBAGZL,EAAQK,gBAAiB,EACrBR,IAA2D,IAA1CA,EAAcO,EAAiBH,IAKpDH,EAAKN,oBAAoBS,EAAOD,EAASI,GAC3C,CACF,EACAf,EAAW9b,UAAU+b,kBAAoB,SAAUhB,EAAYzD,GAO7D,MAL0B,oBAAfyD,EACDA,EAAWzD,GAEX3L,EAAE2B,OAAO,CAAC,EAAGyN,EAGzB,EAOA,IAAIgC,EAAc,WAChBjQ,KAAK0P,eAAiB,OACxB,EACA7Q,EAAE6C,QAAQuO,EAAajB,GACvBiB,EAAY/c,UAAU+b,kBAAoB,SAAUhB,EAAYzD,GAC9D,IAAIoF,EAAQK,EAAYrO,WAAWqN,kBAAkB/P,MAAMc,KAAMxF,WAIjE,OAHIgQ,EAAQnW,OACVub,EAAW,IAAIpF,EAAQnW,MAElBub,CACT,EACAK,EAAY/c,UAAUgc,cAAgB,SAAUgB,EAAK1F,EAASmF,GAC5DA,EAAQQ,QAAwB,IAAdD,EAAIE,OAAeF,EAAIG,SAAWH,EAAII,SAA8B,WAAnB9F,EAAQjV,OAC3Eoa,EAAQtb,KAAOmW,EAAQnW,KAClBsb,EAAQQ,SACXD,EAAI9F,gBAER,EACA6F,EAAY/c,UAAUic,oBAAsB,SAAUS,EAAOD,GACvDA,EAAQQ,SAGZlZ,YAAW,WACT4B,OAAO4D,SAAWkT,EAAQtb,IAC5B,GAAG,EACL,EAOA,IAAIkc,GAAc,WAChBvQ,KAAK0P,eAAiB,QACxB,EACA7Q,EAAE6C,QAAQ6O,GAAavB,GACvBuB,GAAYrd,UAAUgc,cAAgB,SAAUgB,EAAK1F,EAASmF,GAC5DA,EAAQnF,QAAUA,EAClB0F,EAAI9F,gBACN,EACAmG,GAAYrd,UAAUic,oBAAsB,SAAUS,EAAOD,GAC3D1Y,YAAW,WACT0Y,EAAQnF,QAAQgG,QAClB,GAAG,EACL,EAIA,IAAIC,GAAW9Q,EAAoB,QAsB/B+Q,GAAa,SAAoBrY,EAAKsX,GACxCA,EAAUA,GAAW,CAAC,EACtB3P,KAAK2Q,WAAatY,EAClB2H,KAAKuJ,QAAUoG,EAAQpG,SAAW1Q,OAAO6Q,aACzC1J,KAAK4Q,eAAiBjB,EAAQiB,gBAAkB,IAChD5Q,KAAK6Q,UAAYlB,EAAQkB,WAAa,GACxC,EAIAH,GAAWxd,UAAU4d,SAAW,SAAUC,EAAUC,EAASC,GACtDA,GAA0B,oBAAZD,IACjBC,EAAMD,EACNA,EAAU,MAEZ,IAAIle,EAAIme,IAAO,IAAIzO,MAAOwG,UAAY,IAAM3C,KAAKC,SAC7C4K,GAAY,IAAI1O,MAAOwG,UACvB3Q,EAAM2H,KAAK2Q,WACXC,EAAiB5Q,KAAK4Q,eACtBC,EAAY7Q,KAAK6Q,UACjBtH,EAAUvJ,KAAKuJ,QACf4H,EAAO9Y,EAAM,KACb+Y,EAAO/Y,EAAM,KACbgZ,EAAOhZ,EAAM,KACbiZ,EAAc,SAAqB7b,GACrCub,GAAWA,EAAQvb,EACrB,EACI8b,EAAQ,SAAeC,GACzB,IAAI,IAAIhP,MAAOwG,UAAYkI,EAAYL,EAKrC,OAJAJ,GAASha,MAAM,gCAAkC4B,EAAM,qBAAuBvF,EAAI,KAClFyW,EAAQO,WAAWuH,GACnB9H,EAAQO,WAAWsH,QACnBK,IAGFxa,YAAW,WACT,IACEua,GACF,CAAE,MAAO/b,GACP6b,EAAY7b,EACd,CACF,GAAGmb,GAAkBvK,KAAKC,SAAW,IACvC,EACIoL,EAAU,SAASA,EAAQC,EAAWH,GACpCG,IACFH,IAEAD,GAAM,WACJG,EAAQC,EAAWH,EACrB,GAEJ,EACII,EAAU,WACZ,IAAIC,EAAOtI,EAAQM,QAAQuH,GAC3B,GAAIS,GAAQA,IAAS/e,EAEnB,OAAO,EAGP,GADAyW,EAAQK,QAAQwH,EAAMte,GAClByW,EAAQM,QAAQuH,KAAUte,EAC5B,OAAO,EAEP,IAAKwW,EAAsBC,GAAS,GAClC,MAAM,IAAI7T,MAAM,qDAElB,OAAO,CAGb,EACI+b,EAAO,SAASA,IAClBlI,EAAQK,QAAQuH,EAAMre,GACtB4e,EAAQE,GAAS,WACXrI,EAAQM,QAAQsH,KAAUre,EAI9Bye,GAAM,WACAhI,EAAQM,QAAQuH,KAAUte,EAI9B4e,GAAQ,WACN,OAAQnI,EAAQM,QAAQwH,EAC1B,GAAGS,GALDL,GAMJ,IAXEK,GAYJ,GACF,EACIA,EAAkB,WACpBvI,EAAQK,QAAQyH,EAAM,KACtB,IACEN,GACF,CAAE,QACAxH,EAAQO,WAAWuH,GACf9H,EAAQM,QAAQuH,KAAUte,GAC5ByW,EAAQO,WAAWsH,GAEjB7H,EAAQM,QAAQsH,KAAUre,GAC5ByW,EAAQO,WAAWqH,EAEvB,CACF,EACA,IACE,IAAI7H,EAAsBC,GAAS,GAGjC,MAAM,IAAI7T,MAAM,qCAFhB+b,GAIJ,CAAE,MAAOhc,GACP6b,EAAY7b,EACd,CACF,EAIA,IAAIsc,GAAWpS,EAAoB,SAkB/BqS,GAAe,SAAsBrB,EAAYhB,GACnDA,EAAUA,GAAW,CAAC,EACtB3P,KAAK2Q,WAAaA,EAClB3Q,KAAKuJ,QAAUoG,EAAQpG,SAAW1Q,OAAO6Q,aACzC1J,KAAKiS,KAAO,IAAIvB,GAAWC,EAAY,CACrCpH,QAASvJ,KAAKuJ,UAEhBvJ,KAAKiR,IAAMtB,EAAQsB,KAAO,KAE1BjR,KAAKkS,SAAW,EAClB,EAcAF,GAAa9e,UAAUif,QAAU,SAAU/Q,EAAMgR,EAAeZ,GAC9D,IAAIa,EAAa,CACf,GAAM1I,IACN,YAAc,IAAInH,MAAOwG,UAA4B,EAAhBoJ,EACrC,QAAWhR,GAEbpB,KAAKiS,KAAKnB,SAASjS,EAAEvG,MAAK,WACxB,IAAIga,EACJ,IACE,IAAIC,EAAcvS,KAAKwS,kBACvBD,EAAYjf,KAAK+e,IACjBC,EAAYtS,KAAKyS,cAAcF,KAG7BvS,KAAKkS,SAAS5e,KAAK+e,EAEvB,CAAE,MAAO5c,GACPsc,GAAStb,MAAM,wBAAyB2K,GACxCkR,GAAY,CACd,CACId,GACFA,EAAGc,EAEP,GAAGtS,OAAO,SAAqBvK,GAC7Bsc,GAAStb,MAAM,+BAAgChB,GAC3C+b,GACFA,GAAG,EAEP,GAAGxR,KAAKiR,IACV,EAQAe,GAAa9e,UAAUwf,UAAY,SAAUC,GAC3C,IAAIC,EAAQ5S,KAAKkS,SAASnZ,MAAM,EAAG4Z,GACnC,GAAIC,EAAM5f,OAAS2f,EAAW,CAI5B,IAAIJ,EAAcvS,KAAKwS,kBACvB,GAAID,EAAYvf,OAAQ,CAEtB,IAAI6f,EAAa,CAAC,EAClBhU,EAAEM,KAAKyT,GAAO,SAAUxR,GACtByR,EAAWzR,EAAS,KAAK,CAC3B,IACA,IAAK,IAAItO,EAAI,EAAGA,EAAIyf,EAAYvf,OAAQF,IAAK,CAC3C,IAAIsO,EAAOmR,EAAYzf,GACvB,IAAI,IAAI0P,MAAOwG,UAAY5H,EAAiB,aAAMyR,EAAWzR,EAAS,MACpEA,EAAK0R,UAAW,EAChBF,EAAMtf,KAAK8N,GACPwR,EAAM5f,QAAU2f,GAClB,KAGN,CACF,CACF,CACA,OAAOC,CACT,EAOA,IAAIG,GAAyB,SAAgCC,EAAOC,GAClE,IAAIC,EAAgB,GAMpB,OALArU,EAAEM,KAAK6T,GAAO,SAAU5R,GAClBA,EAAS,KAAM6R,EAAM7R,EAAS,KAChC8R,EAAc5f,KAAK8N,EAEvB,IACO8R,CACT,EAMAlB,GAAa9e,UAAUigB,gBAAkB,SAAUC,EAAK5B,GACtD,IAAIyB,EAAQ,CAAC,EACbpU,EAAEM,KAAKiU,GAAK,SAAU3Y,GACpBwY,EAAMxY,IAAM,CACd,IACAuF,KAAKkS,SAAWa,GAAuB/S,KAAKkS,SAAUe,GACtDjT,KAAKiS,KAAKnB,SAASjS,EAAEvG,MAAK,WACxB,IAAIga,EACJ,IACE,IAAIC,EAAcvS,KAAKwS,kBACvBD,EAAcQ,GAAuBR,EAAaU,GAClDX,EAAYtS,KAAKyS,cAAcF,EACjC,CAAE,MAAO9c,GACPsc,GAAStb,MAAM,uBAAwB2c,GACvCd,GAAY,CACd,CACId,GACFA,EAAGc,EAEP,GAAGtS,OAAO,SAAqBvK,GAC7Bsc,GAAStb,MAAM,+BAAgChB,GAC3C+b,GACFA,GAAG,EAEP,GAAGxR,KAAKiR,IACV,EAGA,IAAIoC,GAAiB,SAAwBC,EAAeC,GAC1D,IAAIC,EAAW,GAcf,OAbA3U,EAAEM,KAAKmU,GAAe,SAAUlS,GAC9B,IAAI3G,EAAK2G,EAAS,GAClB,GAAI3G,KAAM8Y,EAAe,CACvB,IAAIE,EAAaF,EAAc9Y,GACZ,OAAfgZ,IACFrS,EAAc,QAAIqS,EAClBD,EAASlgB,KAAK8N,GAElB,MAEEoS,EAASlgB,KAAK8N,EAElB,IACOoS,CACT,EAMAxB,GAAa9e,UAAUmgB,eAAiB,SAAUE,EAAe/B,GAC/DxR,KAAKkS,SAAWmB,GAAerT,KAAKkS,SAAUqB,GAC9CvT,KAAKiS,KAAKnB,SAASjS,EAAEvG,MAAK,WACxB,IAAIga,EACJ,IACE,IAAIC,EAAcvS,KAAKwS,kBACvBD,EAAcc,GAAed,EAAagB,GAC1CjB,EAAYtS,KAAKyS,cAAcF,EACjC,CAAE,MAAO9c,GACPsc,GAAStb,MAAM,uBAAwB8c,GACvCjB,GAAY,CACd,CACId,GACFA,EAAGc,EAEP,GAAGtS,OAAO,SAAqBvK,GAC7Bsc,GAAStb,MAAM,+BAAgChB,GAC3C+b,GACFA,GAAG,EAEP,GAAGxR,KAAKiR,IACV,EAMAe,GAAa9e,UAAUsf,gBAAkB,WACvC,IAAIkB,EACJ,KACEA,EAAe1T,KAAKuJ,QAAQM,QAAQ7J,KAAK2Q,eAEvC+C,EAAe7E,EAAU6E,GACpB7U,EAAEF,QAAQ+U,KACb3B,GAAStb,MAAM,yBAA0Bid,GACzCA,EAAe,MAGrB,CAAE,MAAOje,GACPsc,GAAStb,MAAM,yBAA0BhB,GACzCie,EAAe,IACjB,CACA,OAAOA,GAAgB,EACzB,EAKA1B,GAAa9e,UAAUuf,cAAgB,SAAUkB,GAC/C,IAEE,OADA3T,KAAKuJ,QAAQK,QAAQ5J,KAAK2Q,WAAY/B,EAAc+E,KAC7C,CACT,CAAE,MAAOle,GAEP,OADAsc,GAAStb,MAAM,qBAAsBhB,IAC9B,CACT,CACF,EAKAuc,GAAa9e,UAAU0gB,MAAQ,WAC7B5T,KAAKkS,SAAW,GAChBlS,KAAKuJ,QAAQO,WAAW9J,KAAK2Q,WAC/B,EAKA,IAEIkD,GAASlU,EAAoB,SAQ7BmU,GAAiB,SAAwBnD,EAAYhB,GACvD3P,KAAK2T,MAAQ,IAAI3B,GAAarB,EAAY,CACxCpH,QAASoG,EAAQpG,UAEnBvJ,KAAK+T,UAAYpE,EAAQoE,UACzB/T,KAAKgU,YAAcrE,EAAQsE,gBAC3BjU,KAAKkU,eAAiBvE,EAAQuE,eAG9BlU,KAAK2S,UAAY3S,KAAK+T,UAAsB,WAC5C/T,KAAKoS,cAAgBpS,KAAK+T,UAAmC,wBAC7D/T,KAAKmU,SAAWnU,KAAK+T,UAA2B,eAClD,EAKAD,GAAe5gB,UAAUif,QAAU,SAAU/Q,EAAMoQ,GACjDxR,KAAK2T,MAAMxB,QAAQ/Q,EAAMpB,KAAKoS,cAAeZ,EAC/C,EAMAsC,GAAe5gB,UAAU2S,MAAQ,WAC/B7F,KAAKmU,SAAU,EACfnU,KAAKoU,OACP,EAKAN,GAAe5gB,UAAUmhB,KAAO,WAC9BrU,KAAKmU,SAAU,EACXnU,KAAKsU,YACP5d,aAAasJ,KAAKsU,WAClBtU,KAAKsU,UAAY,KAErB,EAKAR,GAAe5gB,UAAU0gB,MAAQ,WAC/B5T,KAAK2T,MAAMC,OACb,EAKAE,GAAe5gB,UAAUqhB,eAAiB,WACxCvU,KAAK2S,UAAY3S,KAAK+T,UAAsB,UAC9C,EAKAD,GAAe5gB,UAAUshB,WAAa,WACpCxU,KAAKyU,cAAczU,KAAK+T,UAAmC,wBAC7D,EAKAD,GAAe5gB,UAAUuhB,cAAgB,SAAUC,GACjD1U,KAAKoS,cAAgBsC,EAChB1U,KAAKmU,UAERnU,KAAKsU,UAAYrd,WAAW4H,EAAEvG,KAAK0H,KAAKoU,MAAOpU,MAAOA,KAAKoS,eAE/D,EAYA0B,GAAe5gB,UAAUkhB,MAAQ,SAAUzE,GACzC,IACE,GAAI3P,KAAK2U,kBAEP,YADAd,GAAOlY,IAAI,sCAGbgU,EAAUA,GAAW,CAAC,EACtB,IAAIkB,EAAY7Q,KAAK+T,UAAoC,yBACrD7C,GAAY,IAAI1O,MAAOwG,UACvB4L,EAAmB5U,KAAK2S,UACxBC,EAAQ5S,KAAK2T,MAAMjB,UAAUkC,GAC7BC,EAAiB,GACjBC,EAAmB,CAAC,EAWxB,GAVAjW,EAAEM,KAAKyT,GAAO,SAAUxR,GACtB,IAAI2T,EAAU3T,EAAc,QACxBpB,KAAKkU,iBAAmB9S,EAAK0R,WAC/BiC,EAAU/U,KAAKkU,eAAea,IAE5BA,GACFF,EAAevhB,KAAKyhB,GAEtBD,EAAiB1T,EAAS,IAAK2T,CACjC,GAAG/U,MACC6U,EAAe7hB,OAAS,EAE1B,YADAgN,KAAKwU,aAIPxU,KAAK2U,mBAAoB,EACzB,IAAIK,EAAoBnW,EAAEvG,MAAK,SAAU2c,GACvCjV,KAAK2U,mBAAoB,EACzB,IAIE,IAAIO,GAAuB,EAC3B,GAAIvF,EAAQwF,UAEVnV,KAAK2T,MAAMN,eAAeyB,QACrB,GAAIjW,EAAEgD,SAASoT,IAAsB,YAAdA,EAAIxe,QAAuB,IAAI+L,MAAOwG,UAAYkI,GAAaL,EAC3FgD,GAAOpd,MAAM,6BACbuJ,KAAKoU,aACA,GAAIvV,EAAEgD,SAASoT,IAAQA,EAAIG,UAAYH,EAAIG,QAAgB,QAAK,KAAiC,MAA1BH,EAAIG,QAAgB,QAA2B,YAAdH,EAAIxe,OAAsB,CAEvI,IAAI4e,EAA+B,EAArBrV,KAAKoS,cACfkD,EAAUL,EAAIG,QAAyB,gBAC3C,GAAIE,EAAS,CACX,IAAIC,EAAaD,EAAQ,eACrBC,IACFF,EAAqC,IAA3BtQ,SAASwQ,EAAY,KAAcF,EAEjD,CACAA,EAAUhP,KAAKmP,IAjJG,IAiJwBH,GAC1CxB,GAAOpd,MAAM,mBAAqB4e,EAAU,OAC5CrV,KAAKyU,cAAcY,EACrB,MAAO,GAAIxW,EAAEgD,SAASoT,IAAQA,EAAIG,SAAqC,MAA1BH,EAAIG,QAAgB,OAE/D,GAAIxC,EAAM5f,OAAS,EAAG,CACpB,IAAIyiB,EAAkBpP,KAAKqP,IAAI,EAAGrP,KAAKsP,MAAMf,EAAmB,IAChE5U,KAAK2S,UAAYtM,KAAKmP,IAAIxV,KAAK2S,UAAW8C,EAAiB7C,EAAM5f,OAAS,GAC1E6gB,GAAOpd,MAAM,wCAA0CuJ,KAAK2S,WAC5D3S,KAAKwU,YACP,MACEX,GAAOpd,MAAM,2CAA4Cmc,GACzD5S,KAAKuU,iBACLW,GAAuB,OAKzBA,GAAuB,EAErBA,GACFlV,KAAK2T,MAAMR,gBAAgBtU,EAAEJ,IAAImU,GAAO,SAAUxR,GAChD,OAAOA,EAAS,EAClB,IAAIvC,EAAEvG,KAAK0H,KAAKoU,MAAOpU,MAG3B,CAAE,MAAOvK,GACPoe,GAAOpd,MAAM,8BAA+BhB,GAC5CuK,KAAKwU,YACP,CACF,GAAGxU,MACC4V,EAAiB,CACnBC,OAAQ,OACRC,SAAS,EACTC,oBAAoB,EAEpBC,WAAYnF,GAGVlB,EAAQwF,YACVS,EAAeK,UAAY,cAE7BpC,GAAOlY,IAAI,oBAAqBkZ,GAChC7U,KAAKgU,YAAYa,EAAgBe,EAAgBZ,EACnD,CAAE,MAAOvf,GACPoe,GAAOpd,MAAM,+BAAgChB,GAC7CuK,KAAKwU,YACP,CACF,EAYA,IAAI0B,GAAkC,mBAiBtC,SAASC,GAAMvK,EAAO+D,GACpByG,IAAU,EAAMxK,EAAO+D,EACzB,CAcA,SAAS0G,GAAOzK,EAAO+D,GACrByG,IAAU,EAAOxK,EAAO+D,EAC1B,CAUA,SAAS2G,GAAW1K,EAAO+D,GACzB,MAA4C,MAArC4G,GAAiB3K,EAAO+D,EACjC,CAWA,SAAS6G,GAAY5K,EAAO+D,GAC1B,GA8GF,SAA8BA,GAC5B,GAAIA,GAAWA,EAAQ8G,UACrB,OAAO,EAET,IAAIC,EAAM/G,GAAWA,EAAQ9W,QAAUoD,EACnC0a,EAAMD,EAAe,WAAK,CAAC,EAC3BE,GAAW,EAQf,OAPA/X,EAAEM,KAAK,CAACwX,EAAgB,WAExBA,EAAkB,aAAGD,EAAgB,aAAI,SAAUG,GAC7ChY,EAAE2C,SAAS,EAAC,EAAM,EAAG,IAAK,OAAQqV,KACpCD,GAAW,EAEf,IACOA,CACT,CA7HME,CAAqBnH,GAEvB,OADAhX,EAAQ2B,KAAK,yNACN,EAET,IAAIyc,EAAgD,MAArCR,GAAiB3K,EAAO+D,GAIvC,OAHIoH,GACFpe,EAAQ2B,KAAK,qGAERyc,CACT,CASA,SAASC,GAA0BnB,GACjC,OAAOoB,GAAgBpB,GAAQ,SAAU9e,GACvC,OAAOiJ,KAAK6P,WAAW9Y,EACzB,GACF,CASA,SAASmgB,GAA6BrB,GACpC,OAAOoB,GAAgBpB,GAAQ,SAAU9e,GACvC,OAAOiJ,KAAKmX,YAAYpgB,EAC1B,GACF,CASA,SAASqgB,GAA4BvB,GACnC,OAAOoB,GAAgBpB,GAAQ,SAAU9e,GACvC,OAAOiJ,KAAKmX,YAAYpgB,EAC1B,GACF,CAcA,SAASsgB,GAAczL,EAAO+D,GAE5B2H,GADA3H,EAAUA,GAAW,CAAC,GACDvG,OAAOmO,GAAe3L,EAAO+D,KAAYA,EAAQ6H,qBAAsB7H,EAAQ8H,aACtG,CAUA,SAASH,GAAY3H,GAEnB,MAAmC,kBADnCA,EAAUA,GAAW,CAAC,GACP+H,gBAAqC7Y,EAAE6K,aAAe7K,EAAEiJ,MACzE,CASA,SAASyP,GAAe3L,EAAO+D,GAE7B,QADAA,EAAUA,GAAW,CAAC,GACNgI,mBAAqBzB,IAAmCtK,CAC1E,CASA,SAAS2K,GAAiB3K,EAAO+D,GAC/B,OAAO2H,GAAY3H,GAAShY,IAAI4f,GAAe3L,EAAO+D,GACxD,CAyCA,SAASyG,GAAUwB,EAAUhM,EAAO+D,GAC7B9Q,EAAE0B,SAASqL,IAAWA,EAAM5Y,QAKjCskB,GADA3H,EAAUA,GAAW,CAAC,GACDhW,IAAI4d,GAAe3L,EAAO+D,GAAUiI,EAAW,EAAI,EAAG/Y,EAAEmD,SAAS2N,EAAQkI,kBAAoBlI,EAAQkI,iBAAmB,OAAQlI,EAAQ6H,uBAAwB7H,EAAQmI,eAAgBnI,EAAQoI,gBAAiBpI,EAAQ8H,cAC1O9H,EAAQL,OAASsI,GAEnBjI,EAAQL,MAAMK,EAAQqI,gBAAkB,UAAWrI,EAAQsI,gBAAiB,CAC1E,kBAAoB,KARtBtf,EAAQlC,MAAM,SAAWmhB,EAAW,QAAU,UAAY,gCAW9D,CAUA,SAASX,GAAgBpB,EAAQqC,GAC/B,OAAO,WACL,IAAInB,GAAW,EACf,IACE,IAAInL,EAAQsM,EAAe9kB,KAAK4M,KAAM,SAClCyW,EAAYyB,EAAe9kB,KAAK4M,KAAM,cACtC0X,EAAkBQ,EAAe9kB,KAAK4M,KAAM,qCAC5C2X,EAAoBO,EAAe9kB,KAAK4M,KAAM,kCAC9C0W,EAAMwB,EAAe9kB,KAAK4M,KAAM,UAEhC4L,IAEFmL,EAAWP,GAAY5K,EAAO,CAC5B6K,UAAWA,EACXiB,gBAAiBA,EACjBC,kBAAmBA,EACnB9e,OAAQ6d,IAGd,CAAE,MAAOjhB,GACPkD,EAAQlC,MAAM,2DAA6DhB,EAC7E,CACA,IAAKshB,EACH,OAAOlB,EAAO3W,MAAMc,KAAMxF,WAE5B,IAAI0G,EAAW1G,UAAUA,UAAUxH,OAAS,GACpB,oBAAbkO,GACTA,EAAS,EAGb,CACF,CAGA,IAAIiX,GAAa,OAEbC,GAAkB,YAElBC,GAAe,SAEfC,GAAa,OAEbC,GAAgB,UAEhBC,GAAe,SAEfC,GAAgB,UAMhBC,GAAa,CACfC,WAAY,SAAoBjY,EAAMkY,GACpC,IAAInmB,EAAO,CAAC,EACRomB,EAAO,CAAC,EAWZ,OAVIha,EAAEgD,SAASnB,GACb7B,EAAEM,KAAKuB,GAAM,SAAU0B,EAAGC,GACnBrC,KAAK8Y,sBAAsBzW,KAC9BwW,EAAKxW,GAAKD,EAEd,GAAGpC,MAEH6Y,EAAKnY,GAAQkY,EAEfnmB,EAAK0lB,IAAcU,EACZpmB,CACT,EACAsmB,aAAc,SAAsBrY,GAClC,IAAIjO,EAAO,CAAC,EACRumB,EAAS,GAUb,OATKna,EAAEF,QAAQ+B,KACbA,EAAO,CAACA,IAEV7B,EAAEM,KAAKuB,GAAM,SAAU2B,GAChBrC,KAAK8Y,sBAAsBzW,IAC9B2W,EAAO1lB,KAAK+O,EAEhB,GAAGrC,MACHvN,EAAK4lB,IAAgBW,EACdvmB,CACT,EACAwmB,gBAAiB,SAAyBvY,EAAMkY,GAC9C,IAAInmB,EAAO,CAAC,EACRymB,EAAY,CAAC,EAWjB,OAVIra,EAAEgD,SAASnB,GACb7B,EAAEM,KAAKuB,GAAM,SAAU0B,EAAGC,GACnBrC,KAAK8Y,sBAAsBzW,KAC9B6W,EAAU7W,GAAKD,EAEnB,GAAGpC,MAEHkZ,EAAUxY,GAAQkY,EAEpBnmB,EAAK2lB,IAAmBc,EACjBzmB,CACT,EACA0mB,aAAc,SAAsBC,EAAWpY,GAC7C,IAAIvO,EAAO,CAAC,EACR4mB,EAAS,CAAC,EAWd,OAVIxa,EAAEgD,SAASuX,GACbva,EAAEM,KAAKia,GAAW,SAAUhX,EAAGC,GACxBrC,KAAK8Y,sBAAsBzW,KAC9BgX,EAAOhX,GAAKxD,EAAEF,QAAQyD,GAAKA,EAAI,CAACA,GAEpC,GAAGpC,MAEHqZ,EAAOD,GAAava,EAAEF,QAAQqC,GAAUA,EAAS,CAACA,GAEpDvO,EAAK+lB,IAAgBa,EACd5mB,CACT,EACA6mB,cAAe,SAAuBF,EAAWrhB,GAC/C,IAAItF,EAAO,CAAC,EACR8mB,EAAU,CAAC,EAWf,OAVI1a,EAAEgD,SAASuX,GACbva,EAAEM,KAAKia,GAAW,SAAUhX,EAAGC,GACxBrC,KAAK8Y,sBAAsBzW,KAC9BkX,EAAQlX,GAAKD,EAEjB,GAAGpC,MAEHuZ,EAAQH,GAAarhB,EAEvBtF,EAAK8lB,IAAiBgB,EACf9mB,CACT,EACA+mB,cAAe,SAAuBJ,EAAWrhB,GAC/C,IAAItF,EAAO,CAAC,EACRgnB,EAAU,CAAC,EAWf,OAVI5a,EAAEgD,SAASuX,GACbva,EAAEM,KAAKia,GAAW,SAAUhX,EAAGC,GACxBrC,KAAK8Y,sBAAsBzW,KAC9BoX,EAAQpX,GAAKD,EAEjB,GAAGpC,MAEHyZ,EAAQL,GAAarhB,EAEvBtF,EAAKgmB,IAAiBgB,EACfhnB,CACT,EACAinB,cAAe,WACb,IAAIjnB,EAAO,CACXA,QAAsB,IACtB,OAAOA,CACT,GAOEknB,GAAgB,WAA0B,EAC9C9a,EAAE2B,OAAOmZ,GAAczmB,UAAWwlB,IAClCiB,GAAczmB,UAAU0mB,MAAQ,SAAUxK,EAAmByK,EAAWC,GACtE9Z,KAAK+Z,UAAY3K,EACjBpP,KAAKga,WAAaH,EAClB7Z,KAAKia,UAAYH,CACnB,EAoBAH,GAAczmB,UAAUyG,IAAMyd,IAA4B,SAAU1W,EAAMkY,EAAI1X,GAC5E,IAAIzO,EAAOuN,KAAK2Y,WAAWjY,EAAMkY,GAIjC,OAHI/Z,EAAEgD,SAASnB,KACbQ,EAAW0X,GAEN5Y,KAAKka,cAAcznB,EAAMyO,EAClC,IAsBAyY,GAAczmB,UAAUinB,SAAW/C,IAA4B,SAAU1W,EAAMkY,EAAI1X,GACjF,IAAIzO,EAAOuN,KAAKiZ,gBAAgBvY,EAAMkY,GAItC,OAHI/Z,EAAEgD,SAASnB,KACbQ,EAAW0X,GAEN5Y,KAAKka,cAAcznB,EAAMyO,EAClC,IAYAyY,GAAczmB,UAAUknB,MAAQhD,IAA4B,SAAU1W,EAAMQ,GAC1E,IAAIzO,EAAOuN,KAAK+Y,aAAarY,GAC7B,OAAOV,KAAKka,cAAcznB,EAAMyO,EAClC,IAcAyY,GAAczmB,UAAUmnB,MAAQjD,IAA4B,SAAUgC,EAAWpY,EAAQE,GACnFrC,EAAEgD,SAASuX,KACblY,EAAWF,GAEb,IAAIvO,EAAOuN,KAAKmZ,aAAaC,EAAWpY,GACxC,OAAOhB,KAAKka,cAAcznB,EAAMyO,EAClC,IAWAyY,GAAczmB,UAAkB,OAAIkkB,IAA4B,SAAUlW,GAExE,IAAIzO,EAAOuN,KAAK0Z,gBAChB,OAAO1Z,KAAKka,cAAcznB,EAAMyO,EAClC,IAaAyY,GAAczmB,UAAUkW,OAASgO,IAA4B,SAAUgC,EAAWrhB,EAAOmJ,GACvF,IAAIzO,EAAOuN,KAAKwZ,cAAcJ,EAAWrhB,GACzC,OAAOiI,KAAKka,cAAcznB,EAAMyO,EAClC,IACAyY,GAAczmB,UAAUgnB,cAAgB,SAAUznB,EAAMyO,GACtDzO,EAAiB,WAAIuN,KAAKga,WAC1BvnB,EAAgB,UAAIuN,KAAKia,UACzBxnB,EAAa,OAAIuN,KAAKmX,YAAY,SAClC,IAAImD,EAAoBzb,EAAEsD,YAAY1P,GACtC,OAAOuN,KAAK+Z,UAAUQ,gBAAgB,CACpCrlB,KAAM,SACNzC,KAAM6nB,EACNE,SAAUxa,KAAKmX,YAAY,YAAc,WACzCsD,QAASza,KAAK+Z,UAAUW,iBAAiBC,QACxCzZ,EACL,EACAyY,GAAczmB,UAAU4lB,sBAAwB,SAAUpY,GACxD,MAAgB,eAATA,GAAkC,cAATA,CAClC,EACAiZ,GAAczmB,UAAUikB,YAAc,SAAUyD,GAC9C,OAAO5a,KAAK+Z,UAAUlK,WAAW+K,EACnC,EACAjB,GAAczmB,UAAU2K,SAAW,WACjC,OAAOmC,KAAK+Z,UAAUlc,WAAa,UAAYmC,KAAKga,WAAa,IAAMha,KAAKia,SAC9E,EAGAN,GAAczmB,UAAkB,OAAIymB,GAAczmB,UAAUkW,OAC5DuQ,GAAczmB,UAAe,IAAIymB,GAAczmB,UAAUyG,IACzDggB,GAAczmB,UAAoB,SAAIymB,GAAczmB,UAAUinB,SAC9DR,GAAczmB,UAAiB,MAAIymB,GAAczmB,UAAUmnB,MAC3DV,GAAczmB,UAAiB,MAAIymB,GAAczmB,UAAUknB,MAC3DT,GAAczmB,UAAoB,SAAIymB,GAAczmB,UAAU2K,SAM9D,IAAIgd,GAAgB,QAEhBC,GAAqB,SAErBC,GAAkB,SAElBC,GAAgB,QAEhBC,GAAmB,SAEnBC,GAAmB,QAEnBC,GAAkB,QAGlBC,GAAyB,sBAEzBC,GAAe,UAEfC,GAAmB,UAEnBC,GAAmB,WAEnBC,GAAsB,CAACX,GAAeC,GAAoBC,GAAiBC,GAAeC,GAAkBC,GAAkBC,GAAiBC,GAAwBC,GAAcC,GAAkBC,IAMvME,GAAsB,SAA6BC,GACrD1b,KAAY,MAAI,CAAC,EACjBA,KAAK2b,uBAAwB,EACzBD,EAAyB,iBAC3B1b,KAAKjJ,KAAO,MAAQ2kB,EAAyB,iBAE7C1b,KAAKjJ,KAAO,MAAQ2kB,EAAc,MAAI,YAExC,IAAIE,EAAeF,EAAoB,YAClB,WAAjBE,GAA8C,iBAAjBA,IAC/BjjB,EAAQ4G,SAAS,4BAA8Bqc,EAAe,4BAC9DA,EAAeF,EAAoB,YAAI,UAEpB,iBAAjBE,GAAmC/c,EAAE6K,aAAaK,eACpD/J,KAAKuJ,QAAU1K,EAAE6K,aAEjB1J,KAAKuJ,QAAU1K,EAAEiJ,OAEnB9H,KAAK6b,OACL7b,KAAK8b,cAAcJ,GACnB1b,KAAK+b,QAAQL,GACb1b,KAAKgc,MACP,EACAP,GAAoBvoB,UAAU+a,WAAa,WACzC,IAAI1Z,EAAI,CAAC,EAOT,OALAsK,EAAEM,KAAKa,KAAY,OAAG,SAAUoC,EAAGC,GAC5BxD,EAAEyC,QAAQka,GAAqBnZ,KAClC9N,EAAE8N,GAAKD,EAEX,IACO7N,CACT,EACAknB,GAAoBvoB,UAAU2oB,KAAO,WACnC,IAAI7b,KAAKic,SAAT,CAGA,IAAIC,EAAQlc,KAAKuJ,QAAQrB,MAAMlI,KAAKjJ,MAChCmlB,IACFlc,KAAY,MAAInB,EAAE2B,OAAO,CAAC,EAAG0b,GAH/B,CAKF,EACAT,GAAoBvoB,UAAU6oB,QAAU,SAAUL,GAChD,IACES,EACAC,EAFEC,EAAuBX,EAAgB,QAGvCW,IACFF,EAAkB,sBAEkB,kBAAzBE,IACTF,EAAkBE,GAEpBD,EAAapc,KAAKuJ,QAAQrB,MAAMiU,GAGhCnc,KAAKuJ,QAAQH,OAAO+S,GACpBnc,KAAKuJ,QAAQH,OAAO+S,GAAiB,GACjCC,IACFpc,KAAY,MAAInB,EAAE2B,OAAOR,KAAY,MAAGoc,EAAgB,IAAGA,EAAmB,UAG7EV,EAAoB,aAAwB,aAAnBA,EAAa,OAGzCS,EAAkB,MAAQT,EAAc,MAAI,IAAMA,EAAa,MAC/DU,EAAapc,KAAKuJ,QAAQrB,MAAMiU,MAE9Bnc,KAAKuJ,QAAQH,OAAO+S,GACpBnc,KAAKuJ,QAAQH,OAAO+S,GAAiB,GAIrCnc,KAAKsc,cAAcF,KAGnBpc,KAAKuJ,UAAY1K,EAAE6K,eACrB0S,EAAavd,EAAEiJ,OAAOI,MAAMlI,KAAKjJ,MACjC8H,EAAEiJ,OAAOsB,OAAOpJ,KAAKjJ,MACrB8H,EAAEiJ,OAAOsB,OAAOpJ,KAAKjJ,MAAM,GACvBqlB,GACFpc,KAAKsc,cAAcF,GAGzB,EACAX,GAAoBvoB,UAAU8oB,KAAO,WAC/Bhc,KAAKic,WAGTjc,KAAKuc,iCACLvc,KAAKuJ,QAAQ5P,IAAIqG,KAAKjJ,KAAM8H,EAAE6E,WAAW1D,KAAY,OAAIA,KAAKwc,YAAaxc,KAAKyc,gBAAiBzc,KAAK2I,OAAQ3I,KAAK0c,WAAY1c,KAAK2c,eACtI,EACAlB,GAAoBvoB,UAAUkW,OAAS,WAErCpJ,KAAKuJ,QAAQH,OAAOpJ,KAAKjJ,MAAM,EAAOiJ,KAAK2c,eAC3C3c,KAAKuJ,QAAQH,OAAOpJ,KAAKjJ,MAAM,EAAMiJ,KAAK2c,cAC5C,EAIAlB,GAAoBvoB,UAAU0gB,MAAQ,WACpC5T,KAAKoJ,SACLpJ,KAAY,MAAI,CAAC,CACnB,EAOAyb,GAAoBvoB,UAAUopB,cAAgB,SAAU1M,EAAOgN,EAAe1T,GAC5E,QAAIrK,EAAEgD,SAAS+N,KACgB,qBAAlBgN,IACTA,EAAgB,QAElB5c,KAAKwc,YAA8B,qBAATtT,EAAuBlJ,KAAK6c,eAAiB3T,EACvErK,EAAEM,KAAKyQ,GAAO,SAAUnM,EAAK/C,GACtBV,KAAY,MAAE7M,eAAeuN,IAASV,KAAY,MAAEU,KAAUkc,IACjE5c,KAAY,MAAEU,GAAQ+C,EAE1B,GAAGzD,MACHA,KAAKgc,QACE,EAGX,EAMAP,GAAoBvoB,UAAU4pB,SAAW,SAAUlN,EAAO1G,GACxD,QAAIrK,EAAEgD,SAAS+N,KACb5P,KAAKwc,YAA8B,qBAATtT,EAAuBlJ,KAAK6c,eAAiB3T,EACvErK,EAAE2B,OAAOR,KAAY,MAAG4P,GACxB5P,KAAKgc,QACE,EAGX,EACAP,GAAoBvoB,UAAU6pB,WAAa,SAAUrc,GAC/CA,KAAQV,KAAY,eACfA,KAAY,MAAEU,GACrBV,KAAKgc,OAET,EACAP,GAAoBvoB,UAAUqpB,+BAAiC1d,EAAEoE,UAAS,WACxE,IAAI+Z,EAAkBhd,KAAY,MAAEsb,IAClC2B,EAAc/gB,EAAOC,MAAQ,IAAY,KAC3C,GAAK6gB,EAAL,CAGA,IAAK,IAAIE,KAAeF,EAClB,EAAI,IAAIxa,KAASwa,EAAgBE,GAAeD,UAC3CD,EAAgBE,GAGvBre,EAAEiD,cAAckb,WACXhd,KAAY,MAAEsb,GAPvB,CASF,IACAG,GAAoBvoB,UAAUiqB,uBAAyB,WAChDnd,KAAK2b,wBACR3b,KAAKsc,cAAczd,EAAEgO,KAAKC,kBAC1B9M,KAAK2b,uBAAwB,EAEjC,EACAF,GAAoBvoB,UAAUkqB,sBAAwB,SAAU1gB,GAC9DsD,KAAK8c,SAASje,EAAEgO,KAAKS,WAAW5Q,GAClC,EAGA+e,GAAoBvoB,UAAUmqB,qBAAuB,SAAU3gB,GAE7DsD,KAAKsc,cAAc,CACjB,kBAAqB5f,GAAY,UACjC,0BAA6BmC,EAAEgO,KAAKmB,gBAAgBtR,IAAa,WAChE,GACL,EACA+e,GAAoBvoB,UAAUoqB,kBAAoB,WAChD,OAAOze,EAAEyE,uBAAuB,CAC9B,kBAAqBtD,KAAY,MAAqB,kBACtD,0BAA6BA,KAAY,MAA6B,2BAE1E,EAKAyb,GAAoBvoB,UAAUqqB,WAAa,SAAU3N,GAMnD,OALA/Q,EAAEM,KAAKa,KAAY,OAAG,SAAUyD,EAAK/C,GAC7BA,KAAQkP,IACZA,EAAMlP,GAAQ+C,EAElB,IACOmM,CACT,EACA6L,GAAoBvoB,UAAU4oB,cAAgB,SAAUJ,GACtD1b,KAAK6c,eAAiB7c,KAAKwc,YAAcd,EAA0B,kBACnE1b,KAAKwd,aAAa9B,EAA4B,qBAC9C1b,KAAKyd,kBAAkB/B,EAAsB,eAC7C1b,KAAK0d,eAAehC,EAA0B,mBAC9C1b,KAAK2d,oBAAoBjC,EAA+B,wBACxD1b,KAAK4d,WAAWlC,EAAsB,cACxC,EACAD,GAAoBvoB,UAAUsqB,aAAe,SAAUvB,GACrDjc,KAAKic,SAAWA,EACZjc,KAAKic,SACPjc,KAAKoJ,SAELpJ,KAAKgc,MAET,EACAP,GAAoBvoB,UAAUuqB,kBAAoB,SAAUd,GACtDA,IAAkB3c,KAAK2c,gBACzB3c,KAAKoJ,SACLpJ,KAAK2c,cAAgBA,EACrB3c,KAAKgc,OAET,EACAP,GAAoBvoB,UAAUwqB,eAAiB,SAAUhB,GACnDA,IAAe1c,KAAK0c,aACtB1c,KAAK0c,WAAaA,EAClB1c,KAAKoJ,SACLpJ,KAAKgc,OAET,EACAP,GAAoBvoB,UAAUyqB,oBAAsB,SAAUlB,GACxDA,IAAoBzc,KAAKyc,kBAC3Bzc,KAAKyc,gBAAkBA,EACvBzc,KAAKoJ,SACLpJ,KAAKgc,OAET,EACAP,GAAoBvoB,UAAU2qB,oBAAsB,WAClD,OAAO7d,KAAKyc,eACd,EACAhB,GAAoBvoB,UAAU0qB,WAAa,SAAUjV,GAC/CA,IAAW3I,KAAK2I,SAClB3I,KAAK2I,SAASA,EACd3I,KAAKoJ,SACLpJ,KAAKgc,OAET,EACAP,GAAoBvoB,UAAU4qB,qBAAuB,SAAUnK,EAAOlhB,GACpE,IAAIsrB,EAAQ/d,KAAKge,eAAerK,GAC9BsK,EAASxrB,EAAKkhB,GACduK,EAAQle,KAAKme,qBAAqBhG,IAClCiG,EAAape,KAAKme,qBAAqB/F,IACvCiG,EAAUre,KAAKme,qBAAqB9F,IACpCiG,EAAQte,KAAKme,qBAAqB7F,IAClCiG,EAAUve,KAAKme,qBAAqB3F,IACpCgG,EAAWxe,KAAKme,qBAAqB1F,GAAe,IACpDgG,EAAWze,KAAKme,qBAAqB5F,GAAe,IAClDwF,IAAUlD,IAEZhc,EAAE2B,OAAO0d,EAAOD,GAGhBje,KAAK0e,uBAAuBpG,GAAY2F,GAGxCje,KAAK0e,uBAAuBlG,GAAcyF,GAC1Cje,KAAK0e,uBAAuBrG,GAAc4F,IACjCF,IAAUjD,IAEnBjc,EAAEM,KAAK8e,GAAQ,SAAU7b,EAAGC,GACpBA,KAAK+b,IACTA,EAAW/b,GAAKD,EAEpB,IACApC,KAAK0e,uBAAuBrG,GAAc4F,IACjCF,IAAUhD,GACnBlc,EAAEM,KAAK8e,GAAQ,SAAUvd,GAEvB7B,EAAEM,KAAK,CAAC+e,EAAOE,EAAYE,EAAOC,IAAU,SAAUI,GAChDje,KAAQie,UACHA,EAAaje,EAExB,IACA7B,EAAEM,KAAKsf,GAAU,SAAUG,GACrBle,KAAQke,UACHA,EAAWle,EAEtB,IACA2d,EAAQ3d,IAAQ,CAClB,IACSqd,IAAU/C,IACnBnc,EAAEM,KAAK8e,GAAQ,SAAU7b,EAAGC,GAGtBA,KAAK6b,EACPA,EAAM7b,IAAMD,GAINC,KAAKic,IACTA,EAAMjc,GAAK,GAEbic,EAAMjc,IAAMD,EAEhB,GAAGpC,MACHA,KAAK0e,uBAAuBrG,GAAc4F,IACjCF,IAAU5C,IACnBtc,EAAEM,KAAK8e,GAAQ,SAAU7b,EAAGC,GACtBxD,EAAEF,QAAQyD,KACNC,KAAKkc,IACTA,EAAQlc,GAAK,IAGfkc,EAAQlc,GAAKkc,EAAQlc,GAAGzG,OAAOwG,GAEnC,IACApC,KAAK0e,uBAAuBrG,GAAc4F,IACjCF,IAAU7C,IACnBsD,EAASlrB,KAAK2qB,GACdje,KAAK0e,uBAAuBnG,GAAe0F,IAClCF,IAAU9C,KACnBwD,EAASnrB,KAAK2qB,GACdje,KAAK0e,uBAAuBrG,GAAc4F,IAE5CtlB,EAAQgD,IAAI,uDACZhD,EAAQgD,IAAIlJ,GACZuN,KAAKgc,MACP,EACAP,GAAoBvoB,UAAUwrB,uBAAyB,SAAU/K,EAAOlhB,GACtE,IAAIosB,EAAI7e,KAAK8e,WAAWnL,GACnB9U,EAAEI,YAAY4f,KACjBhgB,EAAEM,KAAK1M,GAAM,SAAU2P,EAAGC,GACpBsR,IAAU4E,IAAiB5E,IAAU8E,GAIvC5Z,EAAEM,KAAK0f,GAAG,SAAUE,GACdA,EAAc1c,KAAOD,UAChB2c,EAAc1c,EAEzB,WAEOwc,EAAExc,EAEb,GAAGrC,MACHA,KAAKgc,OAET,EACAP,GAAoBvoB,UAAU8qB,eAAiB,SAAUrK,GACvD,OAAIA,IAAUwE,GACL0C,GACElH,IAAUyE,GACZ0C,GACEnH,IAAU0E,GACZ0C,GACEpH,IAAU2E,GACZ0C,GACErH,IAAU4E,GACZ0C,GACEtH,IAAU8E,GACZyC,GACEvH,IAAU6E,GACZ2C,QAEPxiB,EAAQlC,MAAM,iBAAkBkd,EAEpC,EACA8H,GAAoBvoB,UAAU4rB,WAAa,SAAUnL,GACnD,OAAO3T,KAAY,MAAEA,KAAKge,eAAerK,GAC3C,EACA8H,GAAoBvoB,UAAUirB,qBAAuB,SAAUxK,EAAOqL,GACpE,IAAI3mB,EAAM2H,KAAKge,eAAerK,GAE9B,OADAqL,EAAcngB,EAAEI,YAAY+f,GAAe,CAAC,EAAIA,EACzChf,KAAY,MAAE3H,KAAS2H,KAAY,MAAE3H,GAAO2mB,EACrD,EACAvD,GAAoBvoB,UAAU+rB,gBAAkB,SAAU1P,EAAYhN,GACpE,IAAI2c,EAASlf,KAAY,MAAEub,KAAqB,CAAC,EACjD2D,EAAO3P,GAAchN,EACrBvC,KAAY,MAAEub,IAAoB2D,EAClClf,KAAKgc,MACP,EACAP,GAAoBvoB,UAAUisB,mBAAqB,SAAU5P,GAC3D,IACIhN,GADSvC,KAAY,MAAEub,KAAqB,CAAC,GAC1BhM,GAKvB,OAJK1Q,EAAEI,YAAYsD,YACVvC,KAAY,MAAEub,IAAkBhM,GACvCvP,KAAKgc,QAEAzZ,CACT,EAWA,IAAI6c,GAAe,WAEfC,GAAe,WAEfC,GAAa,SAEbC,GAAW,OAEXC,GAAY,QAEZC,GAAW,OAEXC,GAAU,MAEVC,GAAW,OAEXC,GAAY,QAIZC,GAAiB,QAEjBC,GAAmB,UAInBC,GAAe,MAEfC,GAAc,KAEdC,GAAc,KAEdC,GAAkB,SAElBC,GAAgB,IAEhBC,GAAiB,IAEjBC,GAAe,IAEfC,GAAe,IAEfC,GAAe,IAEfC,GAAkB,KAElBC,GAAsB,KAEtBC,GAAmB,IAEnBC,GAAgB,IAEhBC,GAAyB,KAEzBC,GAAsB,KAItBC,GAAmB,UAEnBC,GAAoB,WAEpBC,GAAgB,OAEhBC,GAAkB,SAElBC,GAAkB,SAIlBC,GAAe,MAEfC,GAAmB,UAEnBC,GAAuB,cAIvBC,GAAc,MAGlB,SAASC,GAASxpB,GAChB,GAAc,OAAVA,EACF,OAAO,KAET,OAAQ8D,EAAQ9D,IACd,IAAK,SACH,OAAI8G,EAAEkD,OAAOhK,IAAUA,EAAMiR,WAAa,EACjCjR,EAAMiR,UAER,KACT,IAAK,UACH,OAAOwY,OAAOzpB,GAChB,IAAK,SACH,OAAOA,EACT,IAAK,SAEH,OADAA,EAAQypB,OAAOzpB,GACV0pB,MAAM1pB,GAGJ,EAFEA,EAIb,OAAO,IACT,CAOA,SAAS2pB,GAAU3pB,GACjB,GAAc,OAAVA,EACF,OAAO,EAET,OAAQ8D,EAAQ9D,IACd,IAAK,UACH,OAAOA,EACT,IAAK,SACH,OAAiB,IAAVA,EACT,IAAK,SACH,OAAOA,EAAM/E,OAAS,EACxB,IAAK,SACH,SAAI6L,EAAEF,QAAQ5G,IAAUA,EAAM/E,OAAS,QAGnC6L,EAAEkD,OAAOhK,IAAUA,EAAMiR,UAAY,OAGrCnK,EAAEgD,SAAS9J,IAAW8G,EAAEiD,cAAc/J,KAK9C,OAAO,CACT,CA2KA,SAAS4pB,GAAiBC,EAAI3T,GAC5B,IAAK2T,EAAa,WAAyE,IAApE,CAACpB,GAAiBC,IAAqBliB,QAAQqjB,EAAa,YAAcA,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OAChI,KAAM,6BAA+B4uB,EAEvC,IAAIxf,EA5BN,SAAkBrO,EAAG6D,GACnB,GAAU,OAAN7D,GAAcA,IAAM6D,EACtB,OAAO,EAET,GAAIiE,EAAQ9H,KAAO8H,EAAQjE,GACzB,OAAQiE,EAAQ9H,IACd,IAAK,SACL,IAAK,SACL,IAAK,UACH,OAAOA,IAAM6D,EACf,IAAK,SACH,GAAIiH,EAAEF,QAAQ5K,IAAM8K,EAAEF,QAAQ/G,GAC5B,OAvBV,SAAuB7D,EAAG6D,GACxB,GAAI7D,IAAM6D,EAAG,OAAO,EACpB,GAAU,OAAN7D,GAAoB,OAAN6D,EAAY,OAAO,EACrC,GAAI7D,EAAEf,SAAW4E,EAAE5E,OAAQ,OAAO,EAClC,IAAK,IAAIF,EAAI,EAAGA,EAAIiB,EAAEf,OAAQF,IAC5B,GAAIiB,EAAEjB,KAAO8E,EAAE9E,GACb,OAAO,EAGX,OAAO,CACT,CAaiB+uB,CAAc9tB,EAAG6D,GAE1B,GAAIiH,EAAEkD,OAAOhO,IAAM8K,EAAEkD,OAAOnK,GAC1B,OAAO7D,EAAEiV,YAAcpR,EAAEoR,UAE3B,GAAInK,EAAEgD,SAAS9N,IAAM8K,EAAEgD,SAASjK,GAC9B,OAAOkX,KAAKC,UAAUhb,KAAO+a,KAAKC,UAAUnX,GAIpD,OAAO,CACT,CAKUkqB,CAASC,GAAiBH,EAAa,SAAE,GAAI3T,GAAa8T,GAAiBH,EAAa,SAAE,GAAI3T,IACtG,OAAQ2T,EAAa,UACnB,KAAKpB,GACH,OAAOpe,EACT,KAAKqe,GACH,OAAQre,EAEd,CA4DA,SAAS4f,GAAiBJ,EAAI3T,GAC5B,IAAK2T,EAAa,SAChB,KAAM,0CAA4CA,EAEpD,OAAQA,EAAa,UACnB,KAAK7B,GACH,OA7LN,SAAqB6B,EAAI3T,GACvB,IAAK2T,EAAa,UAAKA,EAAa,WAAM7B,KAAiB6B,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OAC1F,KAAM,yBAA2B4uB,EAEnC,OAAOF,GAAUK,GAAiBH,EAAa,SAAE,GAAI3T,KAAgByT,GAAUK,GAAiBH,EAAa,SAAE,GAAI3T,GACrH,CAwLagU,CAAYL,EAAI3T,GACzB,KAAK+R,GACH,OAzLN,SAAoB4B,EAAI3T,GACtB,IAAK2T,EAAa,UAAKA,EAAa,WAAM5B,KAAgB4B,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OACzF,KAAM,wBAA0B4uB,EAElC,OAAOF,GAAUK,GAAiBH,EAAa,SAAE,GAAI3T,KAAgByT,GAAUK,GAAiBH,EAAa,SAAE,GAAI3T,GACrH,CAoLaiU,CAAWN,EAAI3T,GACxB,KAAKgS,GACL,KAAKC,GACH,OAtLN,SAAoB0B,EAAI3T,GACtB,IAAK2T,EAAa,WAAiE,IAA5D,CAAC3B,GAAaC,IAAiB3hB,QAAQqjB,EAAa,YAAcA,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OACxH,KAAM,+BAAiC4uB,EAEzC,IAAIO,EAAYJ,GAAiBH,EAAa,SAAE,GAAI3T,GAChDmU,EAAaL,GAAiBH,EAAa,SAAE,GAAI3T,GACrD,IAAKpP,EAAEF,QAAQyjB,KAAgBvjB,EAAE0B,SAAS6hB,GACxC,KAAM,gDAAkDA,EAE1D,IAAIhgB,EAAIggB,EAAW7jB,QAAQ4jB,IAAc,EACzC,OAAIP,EAAa,WAAM1B,IACb9d,EAEHA,CACT,CAwKaigB,CAAWT,EAAI3T,GACxB,KAAKkS,GACH,OAzKN,SAAsByB,EAAI3T,GACxB,IAAK2T,EAAa,UAAKA,EAAa,WAAMzB,KAAkByB,EAAa,UAAKA,EAAa,SAAE5uB,OAAS,EACpG,KAAM,0BAA4B4uB,EAEpC,IAAI7tB,EAAIguB,GAAiBH,EAAa,SAAE,GAAI3T,GACxCrW,EAAImqB,GAAiBH,EAAa,SAAE,GAAI3T,GAC5C,MAAiB,kBAANla,GAA+B,kBAAN6D,GAGnB,kBAAN7D,GAA+B,kBAAN6D,EAF3B7D,EAAI6D,EAKN,IACT,CA4Ja0qB,CAAaV,EAAI3T,GAC1B,KAAKmS,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACH,OAhKN,SAA4BqB,EAAI3T,GAC9B,IAAK2T,EAAa,WAA6F,IAAxF,CAACxB,GAAgBC,GAAcC,GAAcC,IAAchiB,QAAQqjB,EAAa,YAAcA,EAAa,UAAKA,EAAa,SAAE5uB,OAAS,EAC7J,KAAM,+BAAiC4uB,EAEzC,IAAI7tB,EAAIguB,GAAiBH,EAAa,SAAE,GAAI3T,GACxCrW,EAAImqB,GAAiBH,EAAa,SAAE,GAAI3T,GAC5C,GAAiB,kBAANla,GAA+B,kBAAN6D,EAClC,OAAQgqB,EAAa,UACnB,KAAKxB,GACH,OAAOrsB,EAAI6D,EACb,KAAKyoB,GACH,OAAOtsB,EAAI6D,EACb,KAAK0oB,GACH,OAAU,IAAN1oB,EACK7D,EAAI6D,EAEN,KACT,KAAK2oB,GACH,OAAU,IAAN3oB,EACK,KAEC,IAAN7D,EACK,EAELA,EAAI,GAAK6D,EAAI,GAAK7D,EAAI,GAAK6D,EAAI,IAGxByO,KAAKsP,MAAM5hB,EAAI6D,GAAKA,EAAI7D,GAE5BA,EAAI6D,EACb,QACE,KAAM,qBAAuBgqB,EAAa,SAGhD,OAAO,IACT,CA6HaW,CAAmBX,EAAI3T,GAChC,KAAKuS,GACL,KAAKC,GACH,OAAOkB,GAAiBC,EAAI3T,GAC9B,KAAKyS,GACL,KAAKC,GACL,KAAKC,GACL,KAAKC,GACH,OArFN,SAA4Be,EAAI3T,GAC9B,IAAK2T,EAAa,WAAiH,IAA5G,CAAClB,GAAkBE,GAAwBD,GAAeE,IAAqBtiB,QAAQqjB,EAAa,YAAcA,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OACxK,KAAM,+BAAiC4uB,EAEzC,IAAI7tB,EAAIguB,GAAiBH,EAAa,SAAE,GAAI3T,GACxCrW,EAAImqB,GAAiBH,EAAa,SAAE,GAAI3T,GAC5C,GAAIpS,EAAQ9H,KAAO8H,EAAQjE,GACzB,GAAiB,kBAANA,GAAkBiH,EAAEkD,OAAOnK,GAGpC,OAFA7D,EAAIwtB,GAASxtB,GACb6D,EAAI2pB,GAAS3pB,GACLgqB,EAAa,UACnB,KAAKlB,GACH,OAAO3sB,EAAI6D,EACb,KAAKgpB,GACH,OAAO7sB,GAAK6D,EACd,KAAK+oB,GACH,OAAO5sB,EAAI6D,EACb,KAAKipB,GACH,OAAO9sB,GAAK6D,OAEX,GAAiB,kBAANA,EAAgB,CAChC,IAAI4qB,EAAUzuB,EAAE0uB,cAAc7qB,GAC9B,OAAQgqB,EAAa,UACnB,KAAKlB,GACH,OAAO8B,EAAU,EACnB,KAAK5B,GACH,OAAO4B,GAAW,EACpB,KAAK7B,GACH,OAAO6B,EAAU,EACnB,KAAK3B,GACH,OAAO2B,GAAW,EAExB,CAEF,OAAO,IACT,CAkDaE,CAAmBd,EAAI3T,GAChC,KAAK6S,GACH,OA7QN,SAAyBc,EAAI3T,GAC3B,IAAK2T,EAAa,UAAKA,EAAa,WAAMd,KAAqBc,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OAC9F,KAAM,kCAAoC4uB,EAE5C,OAAOF,GAAUK,GAAiBH,EAAa,SAAE,GAAI3T,GACvD,CAwQa0U,CAAgBf,EAAI3T,GAC7B,KAAK8S,GACH,OAzQN,SAA0Ba,EAAI3T,GAC5B,IAAK2T,EAAa,UAAKA,EAAa,WAAMb,KAAsBa,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OAC/F,KAAM,mCAAqC4uB,EAE7C,IAAIxf,EAAI2f,GAAiBH,EAAa,SAAE,GAAI3T,GAC5C,GAAU,OAAN7L,EACF,OAAO,KAET,OAAQvG,EAAQuG,IACd,IAAK,SACL,IAAK,SACH,IAAI9K,EAAI,IAAIkL,KAAKJ,GACjB,OAAIqf,MAAMnqB,EAAE0R,WACH,KAEF1R,EACT,IAAK,SACH,GAAIuH,EAAEkD,OAAOK,GACX,OAAOA,EAGb,OAAO,IACT,CAmPawgB,CAAiBhB,EAAI3T,GAC9B,KAAK+S,GACH,OApPN,SAAsBY,EAAI3T,GACxB,IAAK2T,EAAa,UAAKA,EAAa,WAAMZ,KAAkBY,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OAC3F,KAAM,+BAAiC4uB,EAEzC,IAAIxf,EAAI2f,GAAiBH,EAAa,SAAE,GAAI3T,GAC5C,OAAU,OAAN7L,EACK,KAELvD,EAAEF,QAAQyD,GACLA,EAEF,IACT,CAwOaygB,CAAajB,EAAI3T,GAC1B,KAAKgT,GACH,OAlTN,SAAwBW,EAAI3T,GAC1B,IAAK2T,EAAa,UAAKA,EAAa,WAAMX,KAAoBW,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OAC7F,KAAM,iCAAmC4uB,EAE3C,OAAOL,GAASQ,GAAiBH,EAAa,SAAE,GAAI3T,GACtD,CA6Sa6U,CAAelB,EAAI3T,GAC5B,KAAKiT,GACH,OA3ON,SAAwBU,EAAI3T,GAC1B,IAAK2T,EAAa,UAAKA,EAAa,WAAMV,KAAoBU,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OAC7F,KAAM,iCAAmC4uB,EAE3C,IAAIxf,EAAI2f,GAAiBH,EAAa,SAAE,GAAI3T,GAC5C,MACO,WADCpS,EAAQuG,GAERvD,EAAEkD,OAAOK,GACJA,EAAEkC,SAEJwK,KAAKC,UAAU3M,GAEnBoC,OAAOpC,EAChB,CA8Na2gB,CAAenB,EAAI3T,GAC5B,KAAKmT,GACL,KAAKC,GACH,OA9DN,SAAyBO,EAAI3T,GAC3B,IAAK2T,EAAa,WAA2E,IAAtE,CAACR,GAAkBC,IAAsB9iB,QAAQqjB,EAAa,YAAcA,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OAClI,KAAM,yCAA2C4uB,EAEnD,IAAIoB,EAAwD,OAApDjB,GAAiBH,EAAa,SAAE,GAAI3T,GAC5C,OAAI2T,EAAa,WAAMP,IACb2B,EAEHA,CACT,CAqDaC,CAAgBrB,EAAI3T,GAC7B,KAAKkT,GACH,OAtDN,SAAqBS,EAAI3T,GACvB,IAAK2T,EAAa,UAAKA,EAAa,WAAMT,KAAiBS,EAAa,UAA+B,IAA1BA,EAAa,SAAE5uB,OAC1F,KAAM,yBAA2B4uB,EAEnC,IAAIxf,EAAI2f,GAAiBH,EAAa,SAAE,GAAI3T,GAC5C,OAAU,OAAN7L,IAGa,mBAANA,GACDA,EAEH,KACT,CA0Ca8gB,CAAYtB,EAAI3T,GAE7B,CAyBA,SAASkV,GAAgBvB,EAAI3T,GAC3B,IAAK2T,EAAa,WAAMA,EAAU,MAChC,KAAM,0CAA4CA,EAEpD,OAAQA,EAAa,UACnB,KAAK/B,GACH,YAAgC7oB,IAA5BiX,EAAW2T,EAAU,OAChB3T,EAAW2T,EAAU,OAEvB,KACT,KAAK9B,GACH,OAAI8B,EAAU,QAAMN,GACX,IAAI9e,KAEgB,WAAzB3G,EAAQ+lB,EAAU,OAtC5B,SAAwB7pB,GACtB,IAAI2e,EAAM3e,EAAMunB,IAChB,IAAK5I,IAAQA,EAAI6I,MAAc7I,EAAI8I,IACjC,KAAM,yCAA2C1Q,KAAKC,UAAUhX,GAElE,IAAIqrB,EAAM,IAAI5gB,KACd,OAAQkU,EAAI6I,KACV,KAAKE,GACH2D,EAAIra,QAAQqa,EAAIpa,WAA8B,EAAlB0N,EAAI8I,IAAkB,GAAK,GAAK,KAC5D,MACF,KAAKE,GACH0D,EAAIra,QAAQqa,EAAIpa,WAA8B,EAAlB0N,EAAI8I,IAAkB,GAAK,GAAK,GAAK,KACjE,MACF,KAAKG,GACHyD,EAAIra,QAAQqa,EAAIpa,WAA8B,EAAlB0N,EAAI8I,IAAkB,EAAI,GAAK,GAAK,GAAK,KACrE,MACF,KAAKI,GACHwD,EAAIra,QAAQqa,EAAIpa,WAA8B,EAAlB0N,EAAI8I,IAAkB,GAAK,GAAK,GAAK,GAAK,KACtE,MACF,QACE,KAAM,iBAAmB9I,EAAI6I,IAEjC,OAAO6D,CACT,CAgBeC,CAAezB,EAAU,OAE3BA,EAAU,MACnB,QACE,KAAM,0CAA4CA,EAAa,SAErE,CACA,SAASG,GAAiBuB,EAASrV,GACjC,OAAIqV,EAAQjE,IACH8D,GAAgBG,EAASrV,GAE9BqV,EAAQlE,IACH4C,GAAiBsB,EAASrV,QADnC,CAGF,CAIA,IAAIsV,GAAuB,SAASA,EAAqBC,EAAYpU,GACnEvQ,EAAEuB,sBAAsBJ,MACxBA,KAAK5G,SAAWgW,EAChBpP,KAAKyjB,YAAczjB,KAAK5G,SAAsB,YAC9C4G,KAAK0jB,kBAAoB1jB,KAAK5G,SAASyW,WAAW,kBAClD7P,KAAK2jB,SAAW3jB,KAAK5G,SAASyW,WAAW,OACzC7P,KAAKkd,YAAcre,EAAEwB,WAAWmjB,EAAe,IAC/CxjB,KAAK4jB,WAAa/kB,EAAEwB,WAAWmjB,EAAuB,YACtDxjB,KAAK6jB,MAAQhlB,EAAEwB,WAAWmjB,EAAiB,OAAM,IAAIxkB,QAAQ,MAAO,SACpEgB,KAAK8jB,IAAMjlB,EAAEwB,WAAWmjB,EAAgB,MAAM,QAC9CxjB,KAAK+jB,WAAallB,EAAEwB,WAAWmjB,EAAiB,OAAM,WACtDxjB,KAAKgkB,MAAQnlB,EAAEwB,WAAWmjB,EAAkB,QAAM,QAClDxjB,KAAKikB,MAAQplB,EAAEwB,WAAWmjB,EAAkB,QAAM,GAClDxjB,KAAKkkB,YAAcX,EAAqBY,YACxCnkB,KAAKokB,aAAeb,EAAqBc,aACzCrkB,KAAKskB,iBAAmBd,EAA6B,kBAAK,GAG1DxjB,KAAKukB,SAAWf,EAAoB,SAAK,KACzCxjB,KAAKwkB,UAAYhB,EAAsB,WAAK,KAC5CxjB,KAAKykB,gBAAkBjB,EAA4B,iBAAK,KACxDxjB,KAAK0kB,UAAYlB,EAAsB,WAAK,KACxCxjB,KAAKykB,iBAA0D,IAAvCzkB,KAAKykB,gBAAgBlmB,QAAQ,QACvDyB,KAAKykB,gBAAkBzkB,KAAKykB,gBAAgBzlB,QAAQ,KAAMgB,KAAK0jB,oBAEjE1jB,KAAK2kB,cAAe,EACf3kB,KAAKukB,WACRvkB,KAAKukB,SAAW,WAChBvkB,KAAK2kB,cAAe,GAEtB3kB,KAAK4kB,KAA2B,SAApB5kB,KAAK+jB,WACZ/jB,KAAK4kB,OACR5kB,KAAK+jB,WAAa,YAEpB/jB,KAAK6kB,YAAe7kB,KAAK4kB,KAA0CrB,EAAqBuB,iBAAxDvB,EAAqBwB,YACrD/kB,KAAKglB,qBACLhlB,KAAKilB,gBAAkBjlB,KAAKklB,mBAC5BllB,KAAKmlB,aACP,EACA5B,GAAqB6B,UAAY,IACjC7B,GAAqB8B,cAAgB,wBACrC9B,GAAqB+B,WAAa,GAClC/B,GAAqBgC,UAAY,GACjChC,GAAqBiC,gBAAkB,IACvCjC,GAAqBwB,YAAc,IACnCxB,GAAqBuB,iBAAmB,IACxCvB,GAAqBkC,kBAAoB,GACzClC,GAAqBmC,kBAAoB,EACzCnC,GAAqBoC,eAAiB,GACtCpC,GAAqBqC,aAAevf,KAAKwf,MAAMtC,GAAqBoC,eAAiB,GACrFpC,GAAqBY,YAAc,IACnCZ,GAAqBc,aAAe,IACpCd,GAAqBrwB,UAAU4yB,KAAO,WACpC,IAAI5lB,EAAOF,KACXA,KAAKglB,qBAGAhlB,KAAK+lB,SAMV/lB,KAAKgmB,eACLhmB,KAAKimB,wBAGLjmB,KAAKkmB,gBAAgBlmB,KAAKmmB,sBATxBlvB,YAAW,WACTiJ,EAAK4lB,MACP,GAAG,IAQP,EACAvC,GAAqBrwB,UAAUkzB,QAAUvnB,EAAEoE,UAAS,WAC7CjD,KAAKqmB,iBAGRrmB,KAAKsmB,eAAe,CAClB,WAAa,IAGjB,IAMMC,EAAYC,EAAaC,EAN3BC,EAAa1mB,KAAK2mB,cAAgB3mB,KAAK4mB,QAAQ,SAAW5mB,KAAK6mB,+BAC/D7mB,KAAK8mB,iBACP9mB,KAAK+mB,cAAc,KAAM,WACzB/mB,KAAKgnB,WAAWN,EAAY,WAC5BzvB,WAAW+I,KAAKinB,wBAAyB1D,GAAqB6B,aAG1DplB,KAAK4kB,MACP2B,EAAa,QACbC,EAAc,GACdC,GAAc,MAEdF,EAAa,MACbC,EAAcjD,GAAqBgC,UACnCkB,EAAalD,GAAqBiC,gBAAkBjC,GAAqBgC,WAE3EvlB,KAAKknB,aAAa,CAAC,CACjBC,GAAInnB,KAAK4mB,QAAQ,MACjBQ,KAAM,UACNvhB,MAAO0d,GAAqB+B,WAC5B+B,KAAM,GACL,CACDF,GAAIT,EACJU,KAAM,UACNvhB,MAAO,EACPwhB,KAAM,GACL,CACDF,GAAIT,EACJU,KAAMb,EACN1gB,MAAO2gB,EACPa,KAAMZ,IACJlD,GAAqB6B,UAAWplB,KAAKinB,yBAE7C,IACA1D,GAAqBrwB,UAAU8zB,WAAanoB,EAAEoE,UAAS,SAAUkkB,EAAIG,GACnEA,EAAa/D,GAAqB8B,cAAgB,IAAMiC,EACtC,kBAAPH,IACTA,EAAKnnB,KAAK4mB,QAAQO,IAEfA,EAAGzb,YAEM,IAAMyb,EAAGzb,UAAY,KAAKnN,QAAQ,IAAM+oB,EAAa,OACjEH,EAAGzb,WAAa,IAAM4b,GAFtBH,EAAGzb,UAAY4b,CAInB,IACA/D,GAAqBrwB,UAAU6zB,cAAgBloB,EAAEoE,UAAS,SAAUkkB,EAAIG,GACtEA,EAAa/D,GAAqB8B,cAAgB,IAAMiC,EACtC,kBAAPH,IACTA,EAAKnnB,KAAK4mB,QAAQO,IAEhBA,EAAGzb,YACLyb,EAAGzb,WAAa,IAAMyb,EAAGzb,UAAY,KAAK1M,QAAQ,IAAMsoB,EAAa,IAAK,IAAItoB,QAAQ,aAAc,IAAIA,QAAQ,aAAc,IAElI,IACAukB,GAAqBrwB,UAAUg0B,aAAeroB,EAAEoE,UAAS,SAAUskB,EAAOC,EAAKC,EAASC,GACtF,IAEEC,EACAC,EAEAC,EALE3nB,EAAOF,KACT8nB,GAAc,EAGdC,EAAW,EAAI,IAAIvlB,KAIrB,IADAqlB,EAAYE,GADZL,EAAaA,GAAcK,GAEtBJ,EAAK,EAAGA,EAAKJ,EAAMv0B,OAAQ20B,IAK9B,GAHwB,qBADxBC,EAAOL,EAAMI,IACGlkB,MACdmkB,EAAKnkB,IAAMmkB,EAAK/hB,OAEd+hB,EAAKnkB,MAAQmkB,EAAKP,KAAM,CAC1BS,GAAc,EACd,IAAIE,EAAYJ,EAAKP,KAAOO,EAAK/hB,MAC/BoiB,EAAWL,EAAKP,MAAQO,EAAK/hB,MAAQ,GAAK,EAC5C+hB,EAAKnkB,IAAMmkB,EAAK/hB,MAAQmiB,EAAYH,EAAYL,EAC9B,YAAdI,EAAKR,OACPQ,EAAKnkB,IAAM4C,KAAKwf,MAAM+B,EAAKnkB,OAEzBwkB,EAAW,GAAKL,EAAKnkB,KAAOmkB,EAAKP,MAAQY,EAAW,GAAKL,EAAKnkB,KAAOmkB,EAAKP,QAC5EO,EAAKnkB,IAAMmkB,EAAKP,KAEpB,CAEF,GAAKS,EAAL,CAMA,IAAKH,EAAK,EAAGA,EAAKJ,EAAMv0B,OAAQ20B,IAE9B,IADAC,EAAOL,EAAMI,IACJR,GAAI,CACX,IAAIe,EAAuB,YAAdN,EAAKR,KAAqB,GAAK,KAC5CQ,EAAKT,GAAGnD,MAAM4D,EAAKR,MAAQ5iB,OAAOojB,EAAKnkB,KAAOykB,CAChD,CAEFjxB,YAAW,WACTiJ,EAAKgnB,aAAaK,EAAOC,EAAKC,EAASC,EACzC,GAAG,GAVH,MAJMD,GACFA,GAcN,IACAlE,GAAqBrwB,UAAUizB,oBAAsBtnB,EAAEoE,UAAS,WAC9D,IAAI/C,EAAOF,KAGX,IAAIA,KAAKmoB,QAASnoB,KAAKooB,uBAAuBpoB,KAAKkd,aAAnD,CAGAld,KAAKmoB,OAAQ,EACbnoB,KAAK+lB,QAAQjwB,YAAYkK,KAAKqoB,iBAC9BpxB,YAAW,WACT,IAQMsvB,EAAYC,EAAaC,EAR3B6B,EAAWpoB,EAAK2mB,+BAChB3mB,EAAK4mB,iBACF5mB,EAAK0kB,MACR1kB,EAAK8mB,WAAW,KAAM,WAExB9mB,EAAK8mB,WAAWsB,EAAU,WAC1BpoB,EAAKqoB,mBAGDroB,EAAK0kB,MACP2B,EAAa,QACbC,GAAe,IACfC,EAAa,KAEbF,EAAa,MACbC,EAAcjD,GAAqBiC,gBAAkBjC,GAAqBgC,UAC1EkB,EAAalD,GAAqBgC,WAEpCrlB,EAAKgnB,aAAa,CAAC,CACjBC,GAAIjnB,EAAK0mB,QAAQ,MACjBQ,KAAM,UACNvhB,MAAO,EACPwhB,KAAM9D,GAAqB+B,YAC1B,CACD6B,GAAImB,EACJlB,KAAM,UACNvhB,MAAO,EACPwhB,KAAM,GACL,CACDF,GAAImB,EACJlB,KAAMb,EACN1gB,MAAO2gB,EACPa,KAAMZ,IACJlD,GAAqB6B,UAAWllB,EAAKqoB,gBAE7C,GAAG,KACH1pB,EAAEqL,eAAehK,EAAK0mB,QAAQ,UAAW,SAAS,SAAU5yB,GAC1DA,EAAEoW,iBACFlK,EAAKkmB,SACP,IACA,IAAIoC,EAAWtoB,EAAK0mB,QAAQ,WAAa1mB,EAAK0mB,QAAQ,gBACtD/nB,EAAEqL,eAAese,EAAU,SAAS,SAAUx0B,GAE5C,GADAA,EAAEoW,iBACElK,EAAKuoB,WACPvoB,EAAKwoB,aAAa,iBAAkB,CAClC,eAAkB,UAEpBxoB,EAAKyoB,wBAGL,GADAzoB,EAAKkmB,UACDlmB,EAAKykB,aAAc,CACrB,IAAIiE,EAAc,KACd1oB,EAAK9G,SAASyW,WAAW,yBAC3BhX,OAAOgwB,KAAK3oB,EAAKqkB,UAEjBqE,EAAc,WACZ/vB,OAAO4D,SAASpI,KAAO6L,EAAKqkB,QAC9B,EAEFrkB,EAAKwoB,aAAa,iBAAkB,CAClC,eAAkB,QACjBE,EACL,CAEJ,GApEA,CAqEF,IACArF,GAAqBrwB,UAAU0zB,QAAU,SAAUnsB,GACjD,OAAOhG,SAAS0X,eAAeoX,GAAqB8B,cAAgB,IAAM5qB,EAC5E,EACA8oB,GAAqBrwB,UAAU2zB,6BAA+B,WAC5D,OAAO7mB,KAAK4mB,QAAQ5mB,KAAK+jB,WAC3B,EACAR,GAAqBrwB,UAAUk1B,qBAAuB,WACpD,OAAOpoB,KAAKyjB,YAAmB,MAAEnI,MAAsBtb,KAAKyjB,YAAmB,MAAEnI,IAAoB,CAAC,EACxG,EACAiI,GAAqBrwB,UAAU41B,oBAAsBjqB,EAAEoE,UAAS,SAAU8lB,GAExE,IADA,IAAIxZ,EAAawZ,EAAkB,OAAK,GAC/Bj2B,EAAI,EAAGA,EAAIkN,KAAKskB,iBAAiBtxB,OAAQF,IAAK,CACrD,IAAIk2B,EAAkBhpB,KAAKskB,iBAAiBxxB,GAE5C,GAAoB,gBADFk2B,EAAuB,OAAK,KACVzZ,IAAeyZ,EAAuB,MAAG,CAC3E,IAAIA,EAA0B,UAAMnqB,EAAEiD,cAAcknB,EAA0B,UAK5E,OAAO,EAJP,GAAIjH,GAAiBiH,EAA0B,SAAGD,EAAuB,YACvE,OAAO,CAKb,CACF,CACA,OAAO,CACT,IACAxF,GAAqBrwB,UAAU+1B,aAAe,SAAUzb,EAAS0b,GAC/D,OAAOlpB,KAAKmpB,iBAAiB3b,IAAYxN,KAAKmpB,iBAAiB3b,IAAY0b,CAC7E,EACA3F,GAAqBrwB,UAAUgyB,iBAAmB,WAChD,IAAID,EAAkB,GAkBtB,OAjBKjlB,KAAK4kB,MAcR5kB,KAAKykB,gBAAkBzkB,KAAKykB,iBAAmBzkB,KAAK2jB,SAAW,4DAC/DsB,EAAgB3xB,KAAK0M,KAAKykB,mBAdtBzkB,KAAKwkB,WACPS,EAAgB3xB,KAAK0M,KAAKwkB,WAC1BxkB,KAAKopB,SAAW,sBAAwBppB,KAAKwkB,UAAY,OAEzDxkB,KAAKopB,SAAW,GAEdppB,KAAKykB,iBACPQ,EAAgB3xB,KAAK0M,KAAKykB,iBAC1BzkB,KAAKqpB,eAAiB,4FAAwGrpB,KAAKykB,gBAA7G,YAAkJlB,GAAqBoC,eAAvK,aAA4MpC,GAAqBoC,eAAjO,mCAEtB3lB,KAAKqpB,eAAiB,IAMnBpE,CACT,EACA1B,GAAqBrwB,UAAU+yB,sBAAwB,WACrD,IAAIqD,EAAoB,GACpBC,EAAY,GACZC,EAAa,GACbC,EAAc,sDAGlB,GAFAzpB,KAAKqoB,gBAAkB5zB,SAASQ,cAAc,OAC9C+K,KAAKqoB,gBAAgB5tB,GAAK8oB,GAAqB8B,cAAgB,WAC1DrlB,KAAK4kB,KAWR0E,EAAoB,oCAA2CG,EAA3C,0HAA8MzpB,KAAK6jB,KAAnN,uEAXN,CAEd,IAAI6F,EAAa1pB,KAAK2kB,cAAgB3kB,KAAKyoB,WAAa,GAAK,gCAC3DkB,EAAY3pB,KAAKyoB,WAAa,+BAAiC,GAC7DzoB,KAAKipB,aAAa,KAAM,KAC1BS,EAAa,GACbC,EAAY,IAEdL,EAAoB,sBAAwBtpB,KAAKqpB,eAAiB,qBAAuBI,EAAc,qBAAuBzpB,KAAKopB,SAAW,mBAAqBppB,KAAKikB,MAApJ,wBAA2LjkB,KAAK6jB,KAAhM,wIAA0W6F,EAAa,6BAA+B1pB,KAAKukB,SAAW,KAAOvkB,KAAK8jB,IAAM,OAAS6F,EAAjc,oBACtB,CAII3pB,KAAK4pB,eACPL,EAAYvpB,KAAK0jB,kBAAoB,yBAA2B1jB,KAAK4pB,cAAgB,mFACjF5pB,KAAK6pB,YACPN,GAAa,oCACbC,EAAa,yQAENxpB,KAAK8pB,cACdP,EAAYvpB,KAAK0jB,kBAAoB,0BAA4B1jB,KAAK8pB,YAAc,2CAElF9pB,KAAKyoB,aACPzoB,KAAK+pB,aAAe,eAAiBxG,GAAqB8B,cAAtC,wBAAqFrlB,KAAKkkB,YAAc,aAAelkB,KAAKokB,aAA5H,WAA6JmF,EAA7J,0GACpBC,EAAa,mBAAqBxpB,KAAKgqB,aAAe,GAAK,MAA9C,sDAAwHR,EAAxH,gBAEf,IAAIS,EAAYT,EAAaF,EACzBtpB,KAAKgqB,eACPC,GAAajqB,KAAK4kB,KAAO0E,EAAoB,IAAM,8CAAgDtpB,KAAK4kB,KAAO4E,EAAaS,GAAa,gBAE3IjqB,KAAKqoB,gBAAgB6B,WAAa,4BAA8BlqB,KAAK+jB,WAAnC,yBAAgF/jB,KAAKkd,YAArF,4CAA2J+M,EAA5J,sBAAwMjrB,QAAQ,WAAY,UAAYukB,GAAqB8B,cAAgB,KAAKrmB,QAAQ,QAAS,OAASukB,GAAqB8B,cAAgB,IACpX,EACA9B,GAAqBrwB,UAAU8yB,aAAe,WACzB,SAAfhmB,KAAKgkB,MACPhkB,KAAKmqB,WAAa,CAChBC,GAAI,UACJC,WAAY,UACZC,SAAU,UACVC,SAAU,UACVC,YAAa,UACbC,eAAgB,MAChBC,WAAY,UACZC,WAAY,OACZC,UAAW,UACXC,aAAc,UACdC,WAAY,QAGd9qB,KAAKmqB,WAAa,CAChBC,GAAI,OACJC,WAAY,UACZC,SAAU,UACVC,SAAU,UACVC,YAAa,UACbC,eAAgB,MAChBC,WAAY,UACZC,WAAY,UACZC,UAAW,UACXC,aAAc,UACdC,WAAY,WAGhB,IAAIC,EAAS,yCACXC,EAAeD,EACfE,EAAcF,EACdG,EAAmB3H,GAAqBoC,eAA0D,EAAzCpC,GAAqBmC,kBAC9EyF,EAAe5H,GAAqB6B,UAAY,IAAO,IACrDplB,KAAK4kB,OACPmG,EAAS,QAIX,IAAIK,EAAsB,CAAC,EAE3BA,EAAoB,uCADN7H,GAAqBuB,iBAAmB,GACmB,GAAK,OAAS,CACrF,WAAY,CACV,QAAW,SAGf,IAAIuG,EAAe,CACjB,WAAY,CACV,UAAa,mBAEf,WAAY,CACV,SAAY,QACZ,IAAO,IACP,KAAQ,IACR,MAAS,OACT,OAAU,OACV,SAAY,OACZ,aAAc,SACd,UAAW,QACX,cAAe,mCACf,yBAA0B,cAC1B,0BAA2B,aAE7B,gBAAiB,CACf,OAAU,IACV,SAAY,WAEd,aAAc,CACZ,MAAS,UACT,QAAW,IACX,kBAAmB,OACnB,iBAAkB,OAClB,MAAS,WAEX,aAAc,CACZ,SAAY,WACZ,MAAS,OACT,OAAU,QAEZ,MAAO,CACL,SAAY,QACZ,IAAO,IACP,KAAQ,IACR,MAAS,OACT,OAAU,OACV,YAA8B,EAAjBrrB,KAAKsrB,UAAgB,KAClC,aAAgC,EAAlBtrB,KAAKurB,WAAiB,KACpC,mBAAoB,QACpB,QAAW,MACX,aAAc,sDAEd,OAAU,oBAEV,WAAc,WAAaJ,GAE7B,cAAe,CACb,QAAW5H,GAAqB+B,YAElC,YAAa,CACX,MAAS,IACT,OAAU,IACV,YAAa,KAEf,iBAAkB,CAChB,YAAe,SACf,SAAY,WACZ,MAAS,QAEX,WAAY,CACV,SAAY,WACZ,kBAAmB,cACnB,WAAc,QAEhB,YAAa,CACX,SAAY,WACZ,KAAQ,MACR,MAAS/B,GAAqBwB,YAAc,KAC5C,cAAe1e,KAAKwf,OAAOtC,GAAqBwB,YAAc,GAAK,KACnE,sBAAuB,SACvB,UAAa,gBACb,QAAW,MACX,IAAOxB,GAAqBiC,gBAAkB,KAC9C,WAAc,WAAa2F,EAAe,SAAWA,GAEvD,oBAAqB,CACnB,QAAW,MACX,IAAO5H,GAAqBgC,UAAY,MAE1C,oBAAqB,CACnB,QAAW,MACX,IAAOhC,GAAqBiC,gBAAkB,MAEhD,eAAgB,CACd,OAAUjC,GAAqBqC,aAAe,MAEhD,uBAAwB,CACtB,SAAY,WACZ,KAAQrC,GAAqBmC,kBAAoB,KACjD,KAAQnC,GAAqBwB,YAAc,EAAIxB,GAAqBqC,aAAerC,GAAqBmC,kBAAoB,KAC5H,MAASwF,EAAmB,KAC5B,OAAUA,EAAmB,EAAI,KACjC,SAAY,UAEd,eAAgB,CACd,SAAY,WACZ,MAASA,EAAmB,KAC5B,OAAUA,EAAmB,KAC7B,gBAAiBA,EAAmB,KACpC,mBAAoBlrB,KAAKmqB,WAAWE,WACpC,QAAW,OAEb,aAAc,CACZ,SAAY,WACZ,IAAO,MACP,KAAQ9G,GAAqBwB,YAAc,EAAIxB,GAAqBqC,aAAe,KACnF,MAASrC,GAAqBoC,eAAiB,KAC/C,OAAUpC,GAAqBoC,eAAiB,KAChD,SAAY,SACZ,UAAW,MACX,gBAAiBpC,GAAqBoC,eAAiB,MAEzD,QAAS,CACP,SAAY,WACZ,MAAS,OACT,IAAOpC,GAAqBgC,UAAY,KACxC,MAASvlB,KAAK6kB,YAAc,KAC5B,OAAmD,EAAzCtB,GAAqBkC,kBAAwB,KACvD,aAAc,GAAKlC,GAAqBkC,kBAAoB,KAC5D,sBAAuB,SACvB,QAAW,MACX,UAAa,iBACb,WAAc,4CAEhB,gBAAiB,CACf,QAAW,MACX,UAAa,iBAEf,gBAAiB,CACf,QAAW,MACX,MAAS,UAEX,WAAY,CACV,gBAAiB,MACjB,aAAcsF,EACd,aAAc,SACd,mBAAoB/qB,KAAKmqB,WAAWC,GACpC,YAAa,OACb,MAASpqB,KAAKmqB,WAAWS,WAE3B,iBAAkB,CAChB,OAAUrH,GAAqBkC,kBAAoB,KACnD,aAAclC,GAAqBkC,kBAAoB,KACvD,gBAAiB,MACjB,WAAc,oBAAsB0F,GAEtC,eAAgB,CACd,OAAU5H,GAAqBkC,kBAAoB,EAAI,KACvD,MAASlC,GAAqBuB,iBAAmB,EAAI,KACrD,SAAY,WACZ,IAAO,OACP,KAAQ,OACR,aAAcvB,GAAqBkC,kBAAoB,KACvD,gBAAiB,MACjB,QAAW,OACX,mBAAoB,OACpB,UAAW,KACX,aAAcwF,GAEhB,aAAc,CACZ,SAAY,WACZ,QAAW,eACX,MAAS,OACT,OAAU1H,GAAqBkC,kBAAoB,KACnD,gBAAiB,cACjB,mBAAoBzlB,KAAKmqB,WAAWE,WACpC,WAAc,2BAA6BrqB,KAAKmqB,WAAWI,SAAW,QAAUvqB,KAAKmqB,WAAWE,WAAa,SAC7G,WAAc,oBAAsBc,GAEtC,yBAA0B,CACxB,mBAAoBnrB,KAAKmqB,WAAWO,YAEtC,uBAAwB,CACtB,mBAAoB1qB,KAAKmqB,WAAWO,YAEtC,iBAAkB,CAChB,SAAY,WACZ,mBAAoB,OAAS1qB,KAAKykB,gBAAkB,IACpD,MAAS,OACT,OAAU,OACV,IAAO,OACP,KAAQ,QAEV,WAAY,CACV,QAAW,sBAEb,gBAAiB,CACf,aAAc,OACd,OAAUlB,GAAqBkC,kBAAoB,KACnD,OAAU,WAEZ,OAAQ,CACN,MAAS,QACT,aAAc,OACd,gBAAiB,OAEnB,SAAU,CACR,aAAc,QACd,SAAY,SACZ,YAAa,aACb,QAAW,oBACX,YAAa,OACb,cAAe,OACf,MAASzlB,KAAKmqB,WAAWQ,YAE3B,QAAS,CACP,aAAc,QACd,gBAAiB,OACjB,SAAY,SACZ,YAAa,aACb,cAAe,OACf,YAAa,OACb,cAAe,SACf,aAAc,QAEhB,cAAe,CACb,QAAW,eACX,YAAa,QACb,OAAU,aACV,OAAUpH,GAAqBkC,kBAAoB,KACnD,YAAa,OACb,iBAAkB,QAClB,MAASzlB,KAAKmqB,WAAWQ,YAE3B,mBAAoB,CAClB,QAAW,QACX,OAAUpH,GAAqBkC,kBAAoB,MAErD,uBAAwB,CACtB,QAAW,aACX,iBAAkB,UAEpB,WAAY,CACV,gBAAiB,OACjB,YAAa,OACb,cAAe,MACf,iBAAkB,QAClB,MAAS,UACT,aAAc,QAEhB,aAAc,CACZ,MAASzlB,KAAKmqB,WAAWU,aACzB,WAAc,SAAWM,GAE3B,mBAAoB,CAClB,MAASnrB,KAAKmqB,WAAWW,YAE3B,UAAW,CACT,SAAY,WACZ,MAAS,IACT,MAAS,MACT,OAAU,MACV,QAAW,OACX,gBAAiB,OACjB,OAAU,gBACV,aAAc,cACd,OAAU,UACV,WAAc,oBAAsBK,GAEtC,gBAAiB,CACf,OAAU,eAEZ,eAAgB,CACd,MAAS,MACT,OAAU,MACV,SAAY,SACZ,mBAAoB,OAASnrB,KAAK2jB,SAAW,uDAC7C,QAAW3jB,KAAKmqB,WAAWM,gBAE7B,gBAAiB,CACf,mBAAoBzqB,KAAKmqB,WAAWG,UAEtC,UAAW,CACT,QAAW,QACX,OAAU,OACV,cAAe,OACf,aAAc,SACd,mBAAoBtqB,KAAKmqB,WAAWE,WACpC,gBAAiB,cACjB,SAAY,SACZ,OAAU,UACV,WAAc,oBAAsBc,GAEtC,gBAAiB,CACf,QAAW,eACX,MAAS,MACT,OAAU,OACV,eAAgB,MAChB,iBAAkB,MAClB,mBAAoB,OAASnrB,KAAK2jB,SAAW,kDAAoD3jB,KAAKgkB,MAAQ,QAC9G,oBAAqB,YACrB,sBAAuB,YAEzB,eAAgB,CACd,QAAW,eACX,MAAS,OACT,OAAU,OACV,cAAe,OACf,mBAAoB,OAAShkB,KAAK2jB,SAAW,+CAAiD3jB,KAAKgkB,MAAQ,cAC3G,oBAAqB,YACrB,sBAAuB,YAEzB,gBAAiB,CACf,QAAW,eACX,iBAAkB,MAClB,aAAc,SACd,YAAa,OACb,cAAe,OACf,SAAY,SACZ,YAAa,aACb,MAAShkB,KAAKmqB,WAAWQ,WACzB,WAAc,SAAWQ,GAE3B,gBAAiB,CACf,mBAAoBnrB,KAAKmqB,WAAWG,SACpC,MAAStqB,KAAKmqB,WAAWW,YAE3B,kBAAmB,CACjB,MAAS9qB,KAAKmqB,WAAWW,YAE3B,gBAAiB,CACf,SAAY,WACZ,IAA4B,GAApB9qB,KAAKokB,aAAmB,MAElC,cAAe,CACb,sBAAuB,SACvB,UAAa,mBAEf,SAAU,CACR,SAAY,WACZ,MAASpkB,KAAKkkB,YAAc,EAAI,KAChC,OAAUlkB,KAAKokB,aAAe,KAC9B,IAAOb,GAAqBgC,UAAY,KACxC,aAAc,QACd,KAAQ,MACR,cAAelf,KAAKwf,OAAO7lB,KAAKkkB,YAAc,GAAK,KACnD,SAAY,SACZ,gBAAiB,MACjB,aAAc8G,EACd,UAAa,kBAEb,WAAc,WAAaG,EAAe,SAAWA,GAEvD,iBAAkB,CAChB,QAAW,MACX,IAAOnrB,KAAKokB,aAAe,MAE7B,gBAAiB,CACf,SAAY,WACZ,MAASpkB,KAAKkkB,YAAc,EAAI,KAChC,OAAUlkB,KAAKokB,aAAe,KAC9B,SAAY,SACZ,gBAAiB,OAEnB,eAAgB,CACd,cAAe,OACf,MAASpkB,KAAKkkB,YAAc,MAE9B,kBAAmB,CACjB,QAAW,IACX,WAAc,gBAEhB,+BAAgC,CAC9B,QAAW,OAEb,4BAA6B,CAC3B,SAAY,WACZ,OAAU,IACV,OAAU,OACV,gBAAiB,aAEnB,kBAAmB,CACjB,MAAS,OAEX,wBAAyB,CACvB,MAAS,OACT,mBAAoBlkB,KAAKmqB,WAAWC,GACpC,QAAW,OAEb,iBAAkB,CAChB,MAAS,IACT,mBAAoB,UACpB,QAAW,OAEb,qBAAsB,CACpB,MAAS,MACT,MAAS,IACT,YAAa,OACb,cAAe,OACf,MAASpqB,KAAKmqB,WAAWS,UACzB,mBAAoB,OACpB,gBAAiB,cAKjB5qB,KAAKipB,aAAa,KAAM,IAC1BpqB,EAAE2B,OAAO6qB,EAAc,CACrB,kBAAmB,CACjB,SAAY,YAEd,aAAc,CACZ,SAAY,YAEd,aAAc,CACZ,OAAU,UAIZrrB,KAAKipB,aAAa,KAAM,IAC1BpqB,EAAE2B,OAAO6qB,EAAc,CACrB,cAAe,CACb,QAAW,SACX,KAAQ,IACR,OAAU,aAAerrB,KAAKmqB,WAAWG,UAE3C,mBAAoB,CAClB,QAAW,QAEb,mBAAoB,CAClB,QAAW,UAMjB,IAAIkB,EAAgB,CAAC,sBAAuB,gBAAiB,aAAc,UAAW,cAAe,YAAa,kBAAmB,cACnIC,EAAkB,CAAC,QAAS,MAAO,KAAM,IAAK,UAChD,IAAK,IAAIhgB,KAAY4f,EACnB,IAAK,IAAIK,EAAK,EAAGA,EAAKF,EAAcx4B,OAAQ04B,IAAM,CAChD,IAAIhrB,EAAO8qB,EAAcE,GACzB,GAAIhrB,KAAQ2qB,EAAa5f,GAEvB,IADA,IAAIhI,EAAM4nB,EAAa5f,GAAU/K,GACxBirB,EAAK,EAAGA,EAAKF,EAAgBz4B,OAAQ24B,IAC5CN,EAAa5f,GAAU,IAAMggB,EAAgBE,GAAM,IAAMjrB,GAAQ+C,CAGvE,CAEF,IAAmDmoB,EAC7CC,EAoBAC,EACFC,EACAC,EAvB+CJ,EAiCvBR,EAhCtBS,EAAoB,SAA2BI,GACjD,IAAIC,EAAK,GACT,IAAK,IAAIzgB,KAAYwgB,EAAY,CAE/BC,GAAM,KADYzgB,EAASzM,QAAQ,KAAM,IAAMukB,GAAqB8B,cAAgB,KAAKrmB,QAAQ,MAAO,IAAMukB,GAAqB8B,cAAgB,KACxH,KAC3B,IAAIzV,EAAQqc,EAAWxgB,GACvB,IAAK,IAAIpJ,KAAKuN,EACZsc,GAAM7pB,EAAI,IAAMuN,EAAMvN,GAAK,IAE7B6pB,GAAM,GACR,CACA,OAAOA,CACT,EAQIJ,EAAaD,EAYLR,GAnBkB,SAAiCc,GAC7D,IAAIC,EAAM,GACV,IAAK,IAAIC,KAAMF,EACbC,GAAO,KAAOC,EAAK,KAAOR,EAAkBM,EAAQE,IAAO,MAE7D,OAAOD,CACT,CAC6CE,CAAwBV,GACnEG,EAAUt3B,SAASyC,MAAQzC,SAASC,qBAAqB,QAAQ,IAAMD,SAAS83B,gBAChFP,EAAWv3B,SAASQ,cAAc,SACpC82B,EAAQj2B,YAAYk2B,GACpBA,EAASz1B,aAAa,OAAQ,YAC1By1B,EAASQ,WAEXR,EAASQ,WAAWC,QAAUX,EAE9BE,EAASU,YAAcZ,CAI7B,EACAvI,GAAqBrwB,UAAUiyB,YAActmB,EAAEoE,UAAS,WACtD,GAAKjD,KAAK0kB,UAAV,CAGA,IAAIxkB,EAAOF,KAGXE,EAAK2pB,UAAY,gBAAiBhxB,OAClCqH,EAAKqkB,SAAWrkB,EAAKwkB,UACrB,IAAIiI,EAAgBzsB,EAAKwkB,UAAUpY,MAEjC,0GACAsgB,EAAc1sB,EAAKwkB,UAAUpY,MAAM,yBACrC,GAAIqgB,GAGF,GAFAzsB,EAAKuoB,YAAa,EAClBvoB,EAAK0pB,cAAgB+C,EAAc,GAC/BzsB,EAAK2pB,UAAW,CAClBhxB,OAAgC,wBAAI,WAC9BqH,EAAK0mB,QAAQ,gBACf1mB,EAAK2sB,iBAET,EAGA,IAAIj4B,EAAMH,SAASQ,cAAc,UACjCL,EAAIY,IAAM0K,EAAKwjB,kBAAoB,6BACnC,IAAIoJ,EAAiBr4B,SAASC,qBAAqB,UAAU,GAC7Do4B,EAAel3B,WAAWm3B,aAAan4B,EAAKk4B,EAC9C,OACSF,IACT1sB,EAAKuoB,YAAa,EAClBvoB,EAAK4pB,YAAc8C,EAAY,KAI7B1sB,EAAK+oB,aAAa,KAAM,IAAM/oB,EAAK+oB,aAAa,UAAW,MAC7D/oB,EAAKuoB,YAAa,EAClBvoB,EAAKykB,cAAe,EAlCtB,CAoCF,IACApB,GAAqBrwB,UAAUq1B,eAAiB1pB,EAAEoE,UAAS,WAEzD,IAAI/C,EAAOF,KACXnB,EAAEqL,eAAehK,EAAK0mB,QAAQ,MAAO,SAAS,WAC5C1mB,EAAKkmB,SACP,IACA,IAAI4G,EAAY,SAAmB7F,EAAI8F,GACrC,IAAIC,EAAS,CAAC,EAOd,OANIz4B,SAAS04B,aAAe14B,SAAS04B,YAAYC,iBAC/CF,EAASz4B,SAAS04B,YAAYC,iBAAiBjG,EAAI,MAC1CA,EAAGkG,eAEZH,EAAS/F,EAAGkG,cAEPH,EAAOD,EAChB,EACA,GAAIjtB,KAAKkd,YAAa,CACpB,IAAIoL,EAAWtoB,KAAK4mB,QAAQ,WACxB0B,GAAkD,WAAtC0E,EAAU1E,EAAU,eAAiE,SAAnC0E,EAAU1E,EAAU,YACpFtoB,KAAKsmB,gBAET,CACF,IACA/C,GAAqBrwB,UAAUozB,eAAiBznB,EAAEoE,UAAS,SAAUqqB,GAC9DttB,KAAKqmB,kBACRrmB,KAAKqmB,iBAAkB,EACnBrmB,KAAKkd,cAEPld,KAAKooB,uBAAuBpoB,KAAKkd,aAAe,EAAI,IAAI1a,KACxDxC,KAAKyjB,YAAYzH,QAInBhc,KAAK0oB,aAAa,qBAAsB4E,GAGxCttB,KAAK5G,SAAiB,OAAU,OAAE,CAChC,WAAc4G,KAAKkd,YACnB,eAAkB,CAChB,YAAeld,KAAKkd,YACpB,WAAcld,KAAK4jB,WACnB,KAAQ,MACR,KAAQ,IAAIphB,QAIpB,IACA+gB,GAAqBrwB,UAAUgzB,gBAAkB,SAAUqH,GACzD,IAAIrtB,EAAOF,KACX,GAAoC,IAAhCA,KAAKilB,gBAAgBjyB,OAAzB,CAaA,IATA,IAAIw6B,EAAiB,EACjBC,EAAW,GACXt4B,EAAS,aACXq4B,IACuBttB,EAAK+kB,gBAAgBjyB,QAAUu6B,IACpDA,IACAA,EAAgB,KAEpB,EACSz6B,EAAI,EAAGA,EAAIkN,KAAKilB,gBAAgBjyB,OAAQF,IAAK,CACpD,IAAI46B,EAAM,IAAIC,MACdD,EAAIv4B,OAASA,EACbu4B,EAAIl4B,IAAMwK,KAAKilB,gBAAgBnyB,GAC3B46B,EAAIE,UACNz4B,IAEFs4B,EAASn6B,KAAKo6B,EAChB,CAGI1tB,KAAKipB,aAAa,KAAM,IAC1BhyB,YAAW,WACT,IAAI42B,GAAc,EAClB,IAAK/6B,EAAI,EAAGA,EAAI26B,EAASz6B,OAAQF,IAC1B26B,EAAS36B,GAAG86B,WACfC,GAAc,GAGdA,GAAeN,IACjBA,IACAA,EAAgB,KAEpB,GAAG,IAjCL,MAFEA,GAqCJ,EACAhK,GAAqBrwB,UAAU+zB,wBAA0BpoB,EAAEoE,UAAS,WAClEpK,OAAOwB,cAAc2F,KAAK8tB,yBAC1B9tB,KAAKqoB,gBAAgBrE,MAAM+J,WAAa,SACxC/tB,KAAK+lB,QAAQlwB,YAAYmK,KAAKqoB,gBAChC,IACA9E,GAAqBrwB,UAAU8xB,mBAAqB,WAClD,IAAIgJ,EAAsB,SAA6BC,GACrD,IAAI3hB,EAAQ/P,UAAUC,UAAU8P,MAAM2hB,GACtC,OAAO3hB,GAASA,EAAM,EACxB,EACAtM,KAAKmpB,iBAAmB,CAAC,EACzBnpB,KAAKmpB,iBAAyB,OAAI6E,EAAoB,iBACtDhuB,KAAKmpB,iBAA0B,QAAI6E,EAAoB,kBACvDhuB,KAAKmpB,iBAAqB,GAAI6E,EAAoB,gBAC7ChuB,KAAKmpB,iBAAqB,IAAMtwB,OAAOq1B,iBAAiB,kBAAmBr1B,UAC9EmH,KAAKmpB,iBAAqB,GAAI,IAEhCnpB,KAAK+lB,QAAUtxB,SAASovB,MAAQpvB,SAASC,qBAAqB,QAAQ,GAClEsL,KAAK+lB,UACP/lB,KAAKsrB,UAAYjlB,KAAKqP,IAAI1V,KAAK+lB,QAAQoI,YAAa15B,SAAS83B,gBAAgB4B,YAAanuB,KAAK+lB,QAAQqI,YAAa35B,SAAS83B,gBAAgB6B,YAAapuB,KAAK+lB,QAAQsI,YAAa55B,SAAS83B,gBAAgB8B,aAC7MruB,KAAKurB,WAAallB,KAAKqP,IAAI1V,KAAK+lB,QAAQuI,aAAc75B,SAAS83B,gBAAgB+B,aAActuB,KAAK+lB,QAAQwI,aAAc95B,SAAS83B,gBAAgBgC,aAAcvuB,KAAK+lB,QAAQyI,aAAc/5B,SAAS83B,gBAAgBiC,eAIrN,IAAIC,EAASzuB,KAAKmpB,iBAAqB,GACnCuF,EAAgBj6B,SAASQ,cAAc,OAAO+uB,MAChD2K,EAAoB,SAA2BC,GAC7C,GAAIA,KAAQF,EACV,OAAO,EAET,IAAKD,EAGH,IADA,IAAI7e,EAAQ,CAAC,KADbgf,EAAOA,EAAK,GAAGC,cAAgBD,EAAK71B,MAAM,IACjB,SAAW61B,EAAM,MAAQA,GACzC97B,EAAI,EAAGA,EAAI8c,EAAM5c,OAAQF,IAChC,GAAI8c,EAAM9c,KAAM47B,EACd,OAAO,EAIb,OAAO,CACT,EACF1uB,KAAK8mB,gBAAkB9mB,KAAK+lB,SAAW4I,EAAkB,eAAiBA,EAAkB,aAC5F3uB,KAAKgqB,cAAgBhqB,KAAKmpB,iBAAyB,QAAK,IAAMnpB,KAAKmpB,iBAA0B,SAAK,KAAOnpB,KAAK+lB,SAAW4I,EAAkB,uBAAyBA,EAAkB,gBAAkBA,EAAkB,YAC5N,EACApL,GAAqBrwB,UAAUy1B,iBAAmB9pB,EAAEoE,UAAS,WAC3D,IAAI/C,EAAOF,KACTunB,EAAQ,CAAC,CACPJ,GAAIjnB,EAAK2mB,+BACTO,KAAM,UACNvhB,MAAO,EACPwhB,KAAM,GACL,CACDF,GAAIjnB,EAAK2mB,+BACTO,KAAM,MACNvhB,MAAO0d,GAAqBgC,UAC5B8B,MAAO,KACN,CACDF,GAAIjnB,EAAK0mB,QAAQ,gBACjBQ,KAAM,UACNvhB,MAAO,EACPwhB,KAAM,GACL,CACDF,GAAIjnB,EAAK0mB,QAAQ,gBACjBQ,KAAM,MACNvhB,MAA4B,GAApB3F,EAAKkkB,aACbiD,KAAM,IAEV,GAAInnB,EAAK0kB,KAAM,CACb,IAAIwF,EAAKlqB,EAAK0mB,QAAQ,MACpBkI,EAAU5uB,EAAK0mB,QAAQ,WACzBwD,EAAGpG,MAAMpnB,MAAQ,OACjBwtB,EAAGpG,MAAMnnB,OAAS,OAClBiyB,EAAQ9K,MAAMpnB,MAAQ,OACtBsD,EAAK8mB,WAAW9mB,EAAK2mB,+BAAgC,WACrD3mB,EAAK8mB,WAAWoD,EAAI,WACpB7C,EAAMj0B,KAAK,CACT6zB,GAAIjnB,EAAK0mB,QAAQ,MACjBQ,KAAM,UACNvhB,MAAO,EACPwhB,KAAM9D,GAAqB+B,YAE/B,CACeplB,EAAK0mB,QAAQ,gBACnBsD,UAAYhqB,EAAK6pB,aAC1B,IAAIgF,EAAc,WACZl2B,OAAW,IAAKA,OAAW,GAAU,QACvCqH,EAAK2sB,kBAEP3sB,EAAKymB,eAAgB,EACrBzmB,EAAK2mB,+BAA+B7C,MAAM+J,WAAa,QACzD,EACI7tB,EAAK8pB,cACP9pB,EAAK8mB,WAAW,UAAW,WAC3B/vB,WAAW83B,EAAaxL,GAAqB6B,YAE7CllB,EAAKgnB,aAAaK,EAAOhE,GAAqB6B,UAAW2J,EAE7D,IACAxL,GAAqBrwB,UAAUw1B,aAAe,SAAUnZ,EAAYtB,EAAYuD,GAC1ExR,KAAKkd,aACPjP,EAAaA,GAAc,CAAC,EAC5BA,EAAapP,EAAE2B,OAAOyN,EAAY,CAChC,YAAejO,KAAKkd,YACpB,WAAcld,KAAK4jB,WACnB,aAAgB,YAChB,gBAAmB5jB,KAAK+jB,aAE1B/jB,KAAK5G,SAAgB,MAAEmW,EAAYtB,EAAYuD,IACtCA,GACTA,EAAGpe,MAEP,EACAmwB,GAAqBrwB,UAAU25B,gBAAkBhuB,EAAEoE,UAAS,WAC1D,IAAI/C,EAAOF,KACX,IAAIE,EAAK8uB,aAAT,CAGA9uB,EAAK8uB,cAAe,EACpB,IAAIC,EAAe/uB,EAAK0mB,QAAQ,iBAC9BsI,EAAgBhvB,EAAK0mB,QAAQ,cAC7BuI,EAAcjvB,EAAK0mB,QAAQ,kBAC7B,IAAI/tB,OAAW,GAAU,OAAE0qB,GAAqB8B,cAAgB,eAAgB,CAC9E,OAAU,CACR,QAAW,SAAiBhwB,GAC1B,IAAI+5B,EAAW/5B,EAAc,OAC3Bg6B,EAAiBD,EAAsB,cACvC1sB,EAAM,SAAa5P,GACjB,OAAQ,KAAOA,GAAGiG,OAAO,EAC3B,EACAu2B,EAAoB,SAA2BC,GAC7C,IAAIC,EAAOnpB,KAAKwf,MAAMwJ,EAAiBE,GACrCE,EAAOppB,KAAKsP,MAAM6Z,EAAO,IACzBE,EAAQrpB,KAAKsP,MAAM8Z,EAAO,IAC5BD,GAAe,GAAPC,EACRA,GAAgB,GAARC,EACRR,EAAchF,UAAY,KAAOwF,EAAQA,EAAQ,IAAM,IAAMhtB,EAAI+sB,GAAQ,IAAM/sB,EAAI8sB,EACrF,EACFF,EAAkB,GAClBpvB,EAAK4tB,wBAA0Bj1B,OAAOqB,aAAY,WAChD,IAAIq1B,EAAeH,EAAyB,iBAC5CH,EAAajL,MAAMpnB,MAAQ2yB,EAAeF,EAAiB,IAAM,IACjEC,EAAkBC,EACpB,GAAG,KACH1wB,EAAEqL,eAAeilB,EAAa,SAAS,SAAUn7B,GAC/C,IAAI27B,EAAStpB,KAAKqP,IAAI,EAAG1hB,EAAE47B,MAAQT,EAAYU,wBAAwBC,MACvEV,EAAiB,OAAEC,EAAiBM,EAASR,EAAYd,aAAa,EACxE,GACF,IA/BJ,CAkCF,IAMA,IAydI0B,GACAC,GA1dAC,GAAiB,WAA2B,EAChDpxB,EAAE2B,OAAOyvB,GAAe/8B,UAAWwlB,IACnCuX,GAAe/8B,UAAU0mB,MAAQ,SAAUxK,GACzCpP,KAAK+Z,UAAY3K,CACnB,EAqBA6gB,GAAe/8B,UAAUyG,IAAMud,IAA6B,SAAUxW,EAAMkY,EAAI1X,GAC9E,IAAIzO,EAAOuN,KAAK2Y,WAAWjY,EAAMkY,GAWjC,OAVI/Z,EAAEgD,SAASnB,KACbQ,EAAW0X,GAGT5Y,KAAKmX,YAAY,kBACnBnX,KAAK+Z,UAAuB,YAAEsD,qBAAqB5oB,SAASiI,UAI9DjK,EAAK0lB,IAActZ,EAAE2B,OAAO,CAAC,EAAG3B,EAAEgO,KAAKqB,oBAAqBlO,KAAK+Z,UAAuB,YAAEuD,oBAAqB7qB,EAAK0lB,KAC7GnY,KAAKka,cAAcznB,EAAMyO,EAClC,IAuBA+uB,GAAe/8B,UAAUinB,SAAWjD,IAA6B,SAAUxW,EAAMkY,EAAI1X,GACnF,IAAIzO,EAAOuN,KAAKiZ,gBAAgBvY,EAAMkY,GAItC,OAHI/Z,EAAEgD,SAASnB,KACbQ,EAAW0X,GAEN5Y,KAAKka,cAAcznB,EAAMyO,EAClC,IAeA+uB,GAAe/8B,UAAUknB,MAAQlD,IAA6B,SAAUxW,EAAMQ,GAC5E,IAAIzO,EAAOuN,KAAK+Y,aAAarY,GAC7B,OAAOV,KAAKka,cAAcznB,EAAMyO,EAClC,IA2BA+uB,GAAe/8B,UAAUg9B,UAAYhZ,IAA6B,SAAUxW,EAAMyvB,EAAIjvB,GACpF,IAAIzO,EAAO,CAAC,EACR29B,EAAO,CAAC,EAsBZ,OArBIvxB,EAAEgD,SAASnB,IACb7B,EAAEM,KAAKuB,GAAM,SAAU0B,EAAGC,GACxB,IAAKrC,KAAK8Y,sBAAsBzW,GAAI,CAClC,GAAIof,MAAM5T,WAAWzL,IAEnB,YADAzJ,EAAQlC,MAAM,kFAGd25B,EAAK/tB,GAAKD,CAEd,CACF,GAAGpC,MACHkB,EAAWivB,IAIPtxB,EAAEI,YAAYkxB,KAChBA,EAAK,GAEPC,EAAK1vB,GAAQyvB,GAEf19B,EAAK6lB,IAAc8X,EACZpwB,KAAKka,cAAcznB,EAAMyO,EAClC,IAqBA+uB,GAAe/8B,UAAUm9B,OAASnZ,IAA6B,SAAUkC,EAAWrhB,EAAOmJ,GACrFrC,EAAEgD,SAASuX,KACblY,EAAWnJ,GAEb,IAAItF,EAAOuN,KAAKsZ,cAAcF,EAAWrhB,GACzC,OAAOiI,KAAKka,cAAcznB,EAAMyO,EAClC,IAaA+uB,GAAe/8B,UAAUkW,OAAS8N,IAA6B,SAAUkC,EAAWrhB,EAAOmJ,GACrFrC,EAAEgD,SAASuX,KACblY,EAAWnJ,GAEb,IAAItF,EAAOuN,KAAKwZ,cAAcJ,EAAWrhB,GACzC,OAAOiI,KAAKka,cAAcznB,EAAMyO,EAClC,IA4BA+uB,GAAe/8B,UAAUmnB,MAAQnD,IAA6B,SAAUkC,EAAWpY,EAAQE,GACrFrC,EAAEgD,SAASuX,KACblY,EAAWF,GAEb,IAAIvO,EAAOuN,KAAKmZ,aAAaC,EAAWpY,GACxC,OAAOhB,KAAKka,cAAcznB,EAAMyO,EAClC,IAqBA+uB,GAAe/8B,UAAUo9B,aAAepZ,IAA6B,SAAUqZ,EAAQtiB,EAAY/M,GACjG,GAAKrC,EAAEmD,SAASuuB,KACdA,EAAS1iB,WAAW0iB,IAChB9O,MAAM8O,IAKZ,OAAOvwB,KAAKqwB,OAAO,gBAAiBxxB,EAAE2B,OAAO,CAC3C,QAAW+vB,GACVtiB,GAAa/M,GANZvI,EAAQlC,MAAM,0EAOpB,IAYAw5B,GAAe/8B,UAAUs9B,cAAgB,SAAUtvB,GACjD,OAAOlB,KAAKrG,IAAI,gBAAiB,GAAIuH,EACvC,EAYA+uB,GAAe/8B,UAAUu9B,YAAc,WACrC,GAAKzwB,KAAK0wB,mBAAV,CAIA,IAAIj+B,EAAO,CACT,QAAWuN,KAAK+Z,UAAU4W,mBAE5B,OAAO3wB,KAAKka,cAAcznB,EAJ1B,CAFEkG,EAAQlC,MAAM,sEAOlB,EACAw5B,GAAe/8B,UAAU2K,SAAW,WAClC,OAAOmC,KAAK+Z,UAAUlc,WAAa,SACrC,EACAoyB,GAAe/8B,UAAUgnB,cAAgB,SAAUznB,EAAMyO,GACvDzO,EAAa,OAAIuN,KAAKmX,YAAY,SAClC1kB,EAAmB,aAAIuN,KAAK+Z,UAAU4W,kBACtC,IAAIC,EAAY5wB,KAAK+Z,UAAU8W,aAAa,cACxCC,EAAU9wB,KAAK+Z,UAAU8W,aAAa,YACtCE,EAA4B/wB,KAAK+Z,UAAU8W,aAAa,8BACxDD,IACFn+B,EAAiB,WAAIm+B,GAEnBE,IACFr+B,EAAe,SAAIq+B,GAEjBC,IACFt+B,EAAiC,2BAAIs+B,GAEvC,IAAIzW,EAAoBzb,EAAEsD,YAAY1P,GACtC,OAAKuN,KAAK0wB,mBAcH1wB,KAAK+Z,UAAUQ,gBAAgB,CACpCrlB,KAAM,SACNzC,KAAM6nB,EACNE,SAAUxa,KAAKmX,YAAY,YAAc,WACzCsD,QAASza,KAAK+Z,UAAUW,iBAAiBhhB,QACxCwH,IAlBDlB,KAAKgxB,SAASv+B,GACToM,EAAEI,YAAYiC,KACblB,KAAKmX,YAAY,WACnBjW,EAAS,CACP+vB,QAAS,EACTx6B,MAAO,OAGTyK,GAAU,IAGPrC,EAAE2E,SAAS8W,EAAmB,KAQzC,EACA2V,GAAe/8B,UAAUikB,YAAc,SAAU+Z,GAC/C,OAAOlxB,KAAK+Z,UAAUlK,WAAWqhB,EACnC,EACAjB,GAAe/8B,UAAUw9B,iBAAmB,WAC1C,OAAiD,IAA1C1wB,KAAK+Z,UAAUoX,OAAOC,eAC/B,EAGAnB,GAAe/8B,UAAU89B,SAAW,SAAUv+B,GACxC0lB,MAAc1lB,EAChBuN,KAAK+Z,UAAuB,YAAE+D,qBAAqB3F,GAAY1lB,GACtD2lB,MAAmB3lB,EAC5BuN,KAAK+Z,UAAuB,YAAE+D,qBAAqB1F,GAAiB3lB,GAC3D4lB,MAAgB5lB,EACzBuN,KAAK+Z,UAAuB,YAAE+D,qBAAqBzF,GAAc5lB,GACxD6lB,MAAc7lB,EACvBuN,KAAK+Z,UAAuB,YAAE+D,qBAAqBxF,GAAY7lB,GACtD8lB,MAAiB9lB,EAC1BuN,KAAK+Z,UAAuB,YAAE+D,qBAAqBvF,GAAe9lB,GACzDgmB,MAAiBhmB,EAC1BuN,KAAK+Z,UAAuB,YAAE+D,qBAAqBrF,GAAehmB,GACzD+lB,MAAgB/lB,EACzBuN,KAAK+Z,UAAuB,YAAE+D,qBAAqBtF,GAAc/lB,GAEjEkG,EAAQlC,MAAM,8BAA+BhE,EAEjD,EACAw9B,GAAe/8B,UAAUm+B,iBAAmB,SAAUC,EAAQC,EAAerwB,EAAUswB,GACrF,IAAIC,EAAQzxB,KACR0xB,EAAc7yB,EAAE2B,OAAO,CAAC,EAAGR,KAAK+Z,UAAuB,YAAE+E,WAAWwS,IACpEK,EAAgBD,EACf7yB,EAAEI,YAAYyyB,KAAgB7yB,EAAEgD,SAAS6vB,IAAiB7yB,EAAEiD,cAAc4vB,KAC7ED,EAAM1X,UAAuB,YAAE2E,uBAAuB4S,EAAQI,GAC1DF,IACFG,EAAgBH,EAAmBE,IAErCH,EAAcn+B,KAAKq+B,EAAOE,GAAe,SAAUC,EAAUn/B,GAE1C,IAAbm/B,GACFH,EAAM1X,UAAuB,YAAE+D,qBAAqBwT,EAAQI,GAEzD7yB,EAAEI,YAAYiC,IACjBA,EAAS0wB,EAAUn/B,EAEvB,IAEJ,EAIAw9B,GAAe/8B,UAAU2+B,OAAS,SAAUC,EAAeC,EAAeC,EAAkBC,EAAoBC,EAAiBC,EAAiBC,GAChJ,IAAIX,EAAQzxB,KACRqyB,EAAgBryB,KAAK+Z,UAAuB,YAAE+E,WAAWvG,IACzD+Z,EAAgBtyB,KAAK+Z,UAAuB,YAAE+E,WAAWrG,IAW7D,GAVAzY,KAAKqxB,iBAAiBlZ,GAAYnY,KAAKrG,IAAKm4B,GAC5C9xB,KAAKqxB,iBAAiBjZ,GAAiBpY,KAAKma,SAAU8X,GACtDjyB,KAAKqxB,iBAAiBhZ,GAAcrY,KAAKoa,MAAO+X,GAAiB,SAAUxe,GACzE,OAAO9U,EAAEwC,KAAKsS,EAChB,IACA3T,KAAKqxB,iBAAiB/Y,GAAYtY,KAAKkwB,UAAW6B,GAClD/xB,KAAKqxB,iBAAiB7Y,GAAcxY,KAAKqa,MAAO6X,IAI3CrzB,EAAEI,YAAYozB,IAAkBxzB,EAAEF,QAAQ0zB,IAAkBA,EAAcr/B,OAAQ,CAUrF,IATA,IAAIu/B,EACAC,EAAkB,SAAyBZ,EAAUn/B,GACtC,IAAbm/B,GACFH,EAAM1X,UAAuB,YAAE+D,qBAAqBvF,GAAega,GAEhE1zB,EAAEI,YAAY+yB,IACjBA,EAAiBJ,EAAUn/B,EAE/B,EACSK,EAAIu/B,EAAcr/B,OAAS,EAAGF,GAAK,EAAGA,IAC7Cy/B,EAAeF,EAAcI,MACxB5zB,EAAEiD,cAAcywB,IACnBd,EAAMpB,OAAOkC,EAAcC,GAI/Bf,EAAM1X,UAAuB,YAAEiC,MACjC,CAGA,IAAKnd,EAAEI,YAAYqzB,IAAkBzzB,EAAEF,QAAQ2zB,IAAkBA,EAAct/B,OAAQ,CAUrF,IATA,IAAI0/B,EACAC,EAAkB,SAAyBf,EAAUn/B,GACtC,IAAbm/B,GACFH,EAAM1X,UAAuB,YAAE+D,qBAAqBrF,GAAeia,GAEhE7zB,EAAEI,YAAYmzB,IACjBA,EAAiBR,EAAUn/B,EAE/B,EACSkU,EAAI2rB,EAAct/B,OAAS,EAAG2T,GAAK,EAAGA,IAC7C+rB,EAAeJ,EAAcG,MACxB5zB,EAAEiD,cAAc4wB,IACnBjB,EAAMroB,OAAOspB,EAAcC,GAG/BlB,EAAM1X,UAAuB,YAAEiC,MACjC,CACF,EACAiU,GAAe/8B,UAAU4lB,sBAAwB,SAAUpY,GACzD,MAAgB,iBAATA,GAAoC,WAATA,GAA8B,eAATA,GAAkC,aAATA,GAAgC,+BAATA,CACzG,EAGAuvB,GAAe/8B,UAAe,IAAI+8B,GAAe/8B,UAAUyG,IAC3Ds2B,GAAe/8B,UAAoB,SAAI+8B,GAAe/8B,UAAUinB,SAChE8V,GAAe/8B,UAAiB,MAAI+8B,GAAe/8B,UAAUknB,MAC7D6V,GAAe/8B,UAAqB,UAAI+8B,GAAe/8B,UAAUg9B,UACjED,GAAe/8B,UAAkB,OAAI+8B,GAAe/8B,UAAUm9B,OAC9DJ,GAAe/8B,UAAkB,OAAI+8B,GAAe/8B,UAAUkW,OAC9D6mB,GAAe/8B,UAAiB,MAAI+8B,GAAe/8B,UAAUmnB,MAC7D4V,GAAe/8B,UAAwB,aAAI+8B,GAAe/8B,UAAUo9B,aACpEL,GAAe/8B,UAAyB,cAAI+8B,GAAe/8B,UAAUs9B,cACrEP,GAAe/8B,UAAuB,YAAI+8B,GAAe/8B,UAAUu9B,YACnER,GAAe/8B,UAAoB,SAAI+8B,GAAe/8B,UAAU2K,SA+BhE,IAEI+0B,GAAgB,SAAuB/xB,GACzC,OAAOA,CACT,EACIgyB,GAAY,WAAsB,EAGlCC,GAAwB,WAOxBC,GAAU92B,EAAS+2B,gBAAkB,oBAAqB,IAAIA,eAK9DC,IAAoBF,KAA0C,IAA/Bv2B,EAAU+B,QAAQ,UAAoD,IAAlC/B,EAAU+B,QAAQ,WAGrF20B,GAAa,KACbn1B,EAAwB,aAC1Bm1B,GAAa,WAEX,OAAOn1B,EAAwB,WAAEmB,MAAMnB,EAAavD,UACtD,GAMF,IAAI24B,GAAiB,CACnB,SAAY,8BACZ,WAAc,OACd,cAAiB,MACjB,SAAY,uBACZ,IAAO,wBACP,mBAAqB,EACrB,wBAA0B,EAC1B,YAAe,SACf,iBAAoB,GACpB,cAAiB,GACjB,YAAe,GACf,OAAUN,GACV,cAAgB,EAChB,eAAiB,EACjB,MAAQ,EACR,SAAW,EACX,KAAO,EACP,OAAS,EACT,oBAAuB,IACvB,kBAAqB,IACrB,SAAW,EACX,qBAAuB,EACvB,gBAAkB,EAClB,eAAiB,EACjB,IAAM,EACN,6BAA+B,EAC/B,gCAAkC,EAClC,kCAAqC,eACrC,+BAAkC,KAClC,mBAAsB,GACtB,YAAe,CAAC,EAEhB,eAAkB,KAClB,uBAAyB,EACzB,YAAc,EACd,gBAAkB,EAClB,WAAc,GACd,wBAA2B,IAC3B,yBAA4B,IAC5B,iBAAmB,EACnB,MAAS,CAAC,GAERO,IAAa,EAMbC,GAAc,WAAwB,EAUtCC,GAAe,SAAsB1nB,EAAO8P,EAAQ3kB,GACtD,IAAIw8B,EACFh+B,EAASwB,IAAS+7B,GAAwB9C,GAAkBA,GAAgBj5B,GAC9E,GAAIxB,GAhGY,IAgGFw6B,GACZwD,EAAWh+B,MACN,CACL,GAAIA,IAAWsJ,EAAEF,QAAQpJ,GAEvB,YADAoD,EAAQlC,MAAM,gCAAkCM,GAGlDw8B,EAAW,IAAIF,EACjB,CAoBA,OAnBAE,EAASC,eAAiB,CAAC,EAC3BD,EAASE,6BAA8B,EACvCF,EAASG,kDAAoD,GAC7DH,EAAS3Z,MAAMhO,EAAO8P,EAAQ3kB,GAC9Bw8B,EAAiB,OAAI,IAAItD,GACzBsD,EAAiB,OAAE3Z,MAAM2Z,GAIzBr3B,EAAOC,MAAQD,EAAOC,OAASo3B,EAAS1jB,WAAW,UAI9ChR,EAAEI,YAAY1J,IAAWsJ,EAAEF,QAAQpJ,KAGtCg+B,EAASI,eAAevgC,KAAKmgC,EAAiB,OAAGh+B,EAAe,QAChEg+B,EAASI,eAAep+B,IAEnBg+B,CACT,EACIK,GAA0B,SAAiCnhC,GAC7D,IAAIohC,EAAYh1B,EAAE6E,WAAWjR,GAE7B,MAAO,CACL,KAFiBoM,EAAEqG,aAAa2uB,GAIpC,EAoBAR,GAAYngC,UAAUmG,KAAO,SAAUuS,EAAO8P,EAAQ3kB,GACpD,GAAI8H,EAAEI,YAAYlI,GAChB4B,EAAQlC,MAAM,iEADhB,CAIA,GAAIM,IAAS+7B,GAAb,CAIA,IAAIS,EAAWD,GAAa1nB,EAAO8P,EAAQ3kB,GAG3C,OAFAi5B,GAAgBj5B,GAAQw8B,EACxBA,EAASO,UACFP,CAJP,CAFE56B,EAAQlC,MAAM,+FAFhB,CASF,EASA48B,GAAYngC,UAAU0mB,MAAQ,SAAUhO,EAAO8P,EAAQ3kB,GAsBrD,GArBA2kB,EAASA,GAAU,CAAC,EACpB1b,KAAe,UAAI,EACnBA,KAAa,OAAI,CAAC,EAClBA,KAAwB,kBAAI,GAC5BA,KAAK+zB,WAAWl1B,EAAE2B,OAAO,CAAC,EAAG2yB,GAAgBzX,EAAQ,CACnD,KAAQ3kB,EACR,MAAS6U,EACT,aAAgB7U,IAAS+7B,GAAwB/7B,EAAO+7B,GAAwB,IAAM/7B,GAAQ,WAEhGiJ,KAAW,KAAI6yB,GACf7yB,KAAKg0B,mBAAqB,GAC1Bh0B,KAAKi0B,gBAAkB,GACvBj0B,KAAKk0B,kBAAoB,GACzBl0B,KAAKmxB,OAAS,CACZ,oBAAsB,EACtB,iBAAmB,GAIrBnxB,KAAK0a,iBAAmB,CAAC,EACzB1a,KAAKm0B,gBAAkBn0B,KAAK6P,WAAW,kBACnC7P,KAAKm0B,gBACP,GAAKt1B,EAAE6K,aAAaK,cAAa,IAAUgpB,IAKzC,GADA/yB,KAAKo0B,gBACDlB,IAAcj3B,EAASnB,iBAAkB,CAY3C,IAAIu5B,EAAkBx1B,EAAEvG,MAAK,WACtB0H,KAAK0a,iBAAiB4Z,OAAOngB,SAChCnU,KAAK0a,iBAAiB4Z,OAAOlgB,MAAM,CACjCe,WAAW,GAGjB,GAAGnV,MACH/D,EAASnB,iBAAiB,YAAY,SAAUy5B,GAC1CA,EAAc,WAChBF,GAEJ,IACAp4B,EAASnB,iBAAiB,oBAAoB,WACN,WAAlCkD,EAA4B,iBAC9Bq2B,GAEJ,GACF,OAjCAr0B,KAAKm0B,iBAAkB,EACvBx7B,EAAQgD,IAAI,6EAmChBqE,KAAkB,YAAIA,KAAa,OAAI,IAAIyb,GAAoBzb,KAAa,QAC5EA,KAAKw0B,uBAAyB,CAAC,EAC/Bx0B,KAAKy0B,aACL,IAAIC,EAAO71B,EAAEsH,OACRnG,KAAK2wB,mBAIR3wB,KAAKsc,cAAc,CACjB,YAAeoY,EACf,WAAcA,GACb,GAEP,EAIArB,GAAYngC,UAAU4gC,QAAU,WAC9B9zB,KAAK6P,WAAW,SAAhB7P,CAA0BA,MAC1BA,KAAK20B,yBACP,EAGAtB,GAAYngC,UAAUyhC,wBAA0B,WAC9C30B,KAAkB,YAAEod,sBAAsBpf,EAAWtB,UACjDsD,KAAK6P,WAAW,iBAClB7P,KAAkB,YAAEmd,yBAElBnd,KAAK6P,WAAW,kBAClB7P,KAAkB,YAAEqd,qBAAqBrf,EAAWtB,SAExD,EACA22B,GAAYngC,UAAU0hC,YAAc,WAClC/1B,EAAEM,KAAKa,KAAKg0B,oBAAoB,SAAU5yB,GACxCpB,KAAK60B,WAAW31B,MAAMc,KAAMoB,EAC9B,GAAGpB,MACEA,KAAK80B,0BACRj2B,EAAEM,KAAKa,KAAKi0B,iBAAiB,SAAU7yB,GACrCpB,KAAKka,cAAchb,MAAMc,KAAMoB,EACjC,GAAGpB,aAEEA,KAAKg0B,0BACLh0B,KAAKi0B,eACd,EACAZ,GAAYngC,UAAU2hC,WAAa,SAAUE,EAAU11B,GACrD,GAAIW,KAAK6P,WAAW,OAElB,OADAlX,EAAQlC,MAAM,0DACP,EAET,IAAK28B,GAEH,OADApzB,KAAKg0B,mBAAmB1gC,KAAK,CAACyhC,EAAU11B,KACjC,EAET,IAAI21B,GAAK,IAAID,GAAW17B,KAAK2G,MAC7B,OAAOg1B,EAAG1lB,MAAMpQ,MAAM81B,EAAI31B,EAC5B,EAWAg0B,GAAYngC,UAAU+hC,kBAAoB,SAAU/zB,EAAUzO,GAC5D,GAAIoM,EAAEI,YAAYiC,GAChB,OAAO,KAET,GAAI6xB,GAAS,CAIX,OAHwB,SAA2BnB,GACjD1wB,EAAS0wB,EAAUn/B,EACrB,CAEF,CAIE,IAAIyiC,EAAMl1B,KAAW,KACjBm1B,EAAgB,GAAK9uB,KAAKsP,MAAsB,IAAhBtP,KAAKC,UACrC8uB,EAAkBp1B,KAAK6P,WAAW,eAAiB,IAAMslB,EAAgB,IAK7E,OAJAD,EAAIC,GAAiB,SAAUvD,UACtBsD,EAAIC,GACXj0B,EAAS0wB,EAAUn/B,EACrB,EACO2iC,CAEX,EACA/B,GAAYngC,UAAUgnB,cAAgB,SAAUzS,EAAKhV,EAAMkd,EAASzO,GAClE,IAAIoR,GAAY,EAChB,GAAI2gB,GAEF,OADAjzB,KAAKi0B,gBAAgB3gC,KAAKkH,WACnB8X,EAET,IAAI+iB,EAAkB,CACpBxf,OAAQ7V,KAAK6P,WAAW,cACxBoG,UAAWjW,KAAK6P,WAAW,iBAC3BiG,QAAS9V,KAAK6P,WAAW,YAEvBylB,EAAY,KACXp0B,IAAarC,EAAEiB,WAAW6P,IAA+B,kBAAZA,IAChDzO,EAAWyO,EACXA,EAAU,MAEZA,EAAU9Q,EAAE2B,OAAO60B,EAAiB1lB,GAAW,CAAC,GAC3CojB,KACHpjB,EAAQkG,OAAS,OAEnB,IAAI0f,EAA8B,SAAnB5lB,EAAQkG,OACnB2f,EAAiBtC,IAAcqC,GAAgD,eAApC5lB,EAAQsG,UAAUhP,cAG7DwuB,EAAe9lB,EAAQmG,QA+B3B,GA9BIrjB,EAAc,UAChBgjC,GAAe,GAEbz1B,KAAK6P,WAAW,UAClBpd,EAAW,KAAI,GAEbgjC,IACFhjC,EAAc,QAAI,GAEhBuN,KAAK6P,WAAW,SAClBpd,EAAU,IAAI,GAEXsgC,KACC7xB,EACFzO,EAAe,SAAIyO,GACVu0B,GAAgBz1B,KAAK6P,WAAW,WAKzCpd,EAAe,SAAI,mBAGvBA,EAAS,GAAIuN,KAAK6P,WAAW,MAAQ,EAAI,EACzCpd,EAAQ,GAAI,IAAI+P,MAAOwG,UAAUnL,WAC7B03B,IACFD,EAAY,QAAU/tB,mBAAmB9U,EAAW,aAC7CA,EAAW,MAEpBgV,GAAO,IAAM5I,EAAEqI,eAAezU,GAC1B,QAASA,EAAM,CACjB,IAAIi7B,EAAM1vB,EAAW/I,cAAc,OACnCy4B,EAAIl4B,IAAMiS,EACVzJ,EAAW6lB,KAAK/tB,YAAY43B,EAC9B,MAAO,GAAI8H,EAAgB,CACzB,IACEljB,EAAY4gB,GAAWzrB,EAAK6tB,EAC9B,CAAE,MAAOthC,GACP2E,EAAQlC,MAAMzC,GACdse,GAAY,CACd,CACA,IACMpR,GACFA,EAASoR,EAAY,EAAI,EAE7B,CAAE,MAAOte,GACP2E,EAAQlC,MAAMzC,EAChB,CACF,MAAO,GAAI++B,GACT,IACE,IAAI2C,EAAM,IAAI1C,eACd0C,EAAI7M,KAAKlZ,EAAQkG,OAAQpO,GAAK,GAC9B,IAAI6N,EAAUtV,KAAK6P,WAAW,eAO9B,GANI0lB,IACFjgB,EAAQ,gBAAkB,qCAE5BzW,EAAEM,KAAKmW,GAAS,SAAUqgB,EAAaC,GACrCF,EAAIG,iBAAiBD,EAAYD,EACnC,IACIhmB,EAAQqG,YAAqC,qBAAhB0f,EAAIr/B,QAAyB,CAC5Dq/B,EAAIr/B,QAAUsZ,EAAQqG,WACtB,IAAI0R,GAAa,IAAIllB,MAAOwG,SAC9B,CAIA0sB,EAAII,iBAAkB,EACtBJ,EAAIK,mBAAqB,WAuBnB,IAAIt/B,EAtBR,GAAuB,IAAnBi/B,EAAI76B,WAEN,GAAmB,MAAf66B,EAAIzE,QACN,GAAI/vB,EACF,GAAIu0B,EAAc,CAChB,IAAI7D,EACJ,IACEA,EAAW/yB,EAAE6F,WAAWgxB,EAAIM,aAC9B,CAAE,MAAOhiC,GAEP,GADA2E,EAAQlC,MAAMzC,IACV2b,EAAQoG,mBAGV,OAFA6b,EAAW8D,EAAIM,YAInB,CACA90B,EAAS0wB,EACX,MACE1wB,EAASsgB,OAAOkU,EAAIM,oBAMtBv/B,EADEi/B,EAAIr/B,UAAYq/B,EAAIzE,SAAU,IAAIzuB,MAAOwG,UAAY0e,GAAcgO,EAAIr/B,QACjE,UAEA,oBAAsBq/B,EAAIzE,OAAS,IAAMyE,EAAIO,WAEvDt9B,EAAQlC,MAAMA,GACVyK,GAEAA,EADEu0B,EACO,CACPxE,OAAQ,EACRx6B,MAAOA,EACP2e,QAASsgB,GAGF,EAKnB,EACAA,EAAIQ,KAAKZ,EACX,CAAE,MAAOthC,GACP2E,EAAQlC,MAAMzC,GACdse,GAAY,CACd,KACK,CACL,IAAInc,EAAS6H,EAAW/I,cAAc,UACtCkB,EAAOjB,KAAO,kBACdiB,EAAOggC,OAAQ,EACfhgC,EAAOigC,OAAQ,EACfjgC,EAAOX,IAAMiS,EACb,IAAIzO,EAAIgF,EAAWtJ,qBAAqB,UAAU,GAClDsE,EAAEpD,WAAWm3B,aAAa52B,EAAQ6C,EACpC,CACA,OAAOsZ,CACT,EAcA+gB,GAAYngC,UAAUygC,eAAiB,SAAUr2B,GAC/C,IAAI+4B,EACFC,EAAc,GACdC,EAAc,GACdC,EAAiB,GACnB33B,EAAEM,KAAK7B,GAAO,SAAU8D,GAClBA,IACFi1B,EAAUj1B,EAAK,GACXvC,EAAEF,QAAQ03B,GACZG,EAAeljC,KAAK8N,GACK,oBAATA,EAChBA,EAAKhO,KAAK4M,MACDnB,EAAEF,QAAQyC,IAAqB,UAAZi1B,EAC5BC,EAAYhjC,KAAK8N,GACRvC,EAAEF,QAAQyC,KAAuC,IAA9Bi1B,EAAQ93B,QAAQ,UAA4C,oBAAlByB,KAAKq2B,GAC3EG,EAAeljC,KAAK8N,GAEpBm1B,EAAYjjC,KAAK8N,GAGvB,GAAGpB,MACH,IAAIy2B,EAAU,SAAiBC,EAAO92B,GACpCf,EAAEM,KAAKu3B,GAAO,SAAUt1B,GACtB,GAAIvC,EAAEF,QAAQyC,EAAK,IAAK,CAEtB,IAAIu1B,EAAS/2B,EACbf,EAAEM,KAAKiC,GAAM,SAAUhO,GACrBujC,EAASA,EAAOvjC,EAAK,IAAI8L,MAAMy3B,EAAQvjC,EAAK2F,MAAM,GACpD,GACF,MACEiH,KAAKoB,EAAK,IAAIlC,MAAMc,KAAMoB,EAAKrI,MAAM,GAEzC,GAAG6G,EACL,EACA62B,EAAQH,EAAat2B,MACrBy2B,EAAQF,EAAav2B,MACrBy2B,EAAQD,EAAgBx2B,KAC1B,EAIAqzB,GAAYngC,UAAU0jC,yBAA2B,WAC/C,QAAS52B,KAAK0a,iBAAiB4Z,MACjC,EACAjB,GAAYngC,UAAUkhC,cAAgB,WACpC,IAAIxoB,EAAQ5L,KAAK6P,WAAW,SAC5B,IAAK7P,KAAK42B,2BAA4B,CACpC,IAAIC,EAAch4B,EAAEvG,MAAK,SAAUw+B,GACjC,OAAO,IAAIhjB,GAAe,SAAWlI,EAAQkrB,EAAMC,aAAc,CAC/DhjB,UAAW/T,KAAa,OACxBiU,gBAAiBpV,EAAEvG,MAAK,SAAU7F,EAAMkd,EAAS6B,GAC/CxR,KAAKka,cAAcla,KAAK6P,WAAW,YAAcinB,EAAMtc,SAAUoZ,GAAwBnhC,GAAOkd,EAAS3P,KAAKi1B,kBAAkBzjB,EAAI/e,GACtI,GAAGuN,MACHkU,eAAgBrV,EAAEvG,MAAK,SAAU8I,GAC/B,OAAOpB,KAAKg3B,UAAU,eAAiBF,EAAM5hC,KAAMkM,EACrD,GAAGpB,OAEP,GAAGA,MACHA,KAAK0a,iBAAmB,CACtB4Z,OAAQuC,EAAY,CAClB3hC,KAAM,SACNslB,SAAU,UACVuc,aAAc,QAEhBr9B,OAAQm9B,EAAY,CAClB3hC,KAAM,SACNslB,SAAU,WACVuc,aAAc,QAEhBpc,OAAQkc,EAAY,CAClB3hC,KAAM,SACNslB,SAAU,WACVuc,aAAc,QAGpB,CACI/2B,KAAK6P,WAAW,oBAClB7P,KAAKi3B,qBAET,EACA5D,GAAYngC,UAAU+jC,oBAAsB,WACtCj3B,KAAK42B,6BACP52B,KAAKm0B,iBAAkB,EACvBt1B,EAAEM,KAAKa,KAAK0a,kBAAkB,SAAUD,GACtCA,EAAQ5U,OACV,IAEJ,EACAwtB,GAAYngC,UAAUgkC,mBAAqB,WACzCl3B,KAAKm0B,iBAAkB,EACvBt1B,EAAEM,KAAKa,KAAK0a,kBAAkB,SAAUD,GACtCA,EAAQpG,OACRoG,EAAQ7G,OACV,GACF,EAcAyf,GAAYngC,UAAUI,KAAO,SAAU8N,GACrCpB,KAAK2zB,eAAe,CAACvyB,GACvB,EAaAiyB,GAAYngC,UAAUikC,QAAU,SAAU7C,GAClB,qBAAXA,EACTt0B,KAAKmxB,OAAOiG,oBAAqB,EAEjCp3B,KAAKk0B,kBAAoBl0B,KAAKk0B,kBAAkBt4B,OAAO04B,EAE3D,EAGAjB,GAAYngC,UAAUqnB,gBAAkB,SAAU5K,EAASzO,GACzD,IAAIm2B,EAAiBx4B,EAAE2E,SAASmM,EAAQld,KAAM,KAC1C+nB,EAAW7K,EAAQ6K,SACnBC,EAAU9K,EAAQ8K,QAClB6c,EAA0B3nB,EAAQ2nB,wBAClCC,EAAuB5nB,EAAQ4nB,sBAAwB,CAAC,EAC5Dr2B,EAAWA,GAAY2xB,GACvB,IAAI2E,GAAgC,EAChCC,EAA2B54B,EAAEvG,MAAK,WAIpC,OAHKi/B,EAAqBG,aACxBL,EAAiBr3B,KAAKg3B,UAAU,eAAiBrnB,EAAQza,KAAMmiC,IAE7DA,GACF1+B,EAAQgD,IAAI,qBACZhD,EAAQgD,IAAI07B,GACLr3B,KAAKka,cAAcM,EAAUoZ,GAAwByD,GAAiBE,EAAsBv3B,KAAKi1B,kBAAkB/zB,EAAUm2B,KAE7H,IAEX,GAAGr3B,MAYH,OAXIA,KAAKm0B,kBAAoBmD,EAC3B7c,EAAQtI,QAAQklB,GAAgB,SAAU/kB,GACpCA,EACFpR,EAAS,EAAGm2B,GAEZI,GAEJ,IAEAD,EAAgCC,IAE3BD,GAAiCH,CAC1C,EAyBAhE,GAAYngC,UAAUoc,MAAQ0H,IAA0B,SAAUzH,EAAYtB,EAAY0B,EAASzO,GAC5FA,GAA+B,oBAAZyO,IACtBzO,EAAWyO,EACXA,EAAU,MAGZ,IAAIsG,GADJtG,EAAUA,GAAW,CAAC,GACa,UAC/BsG,IACFtG,EAAQsG,UAAYA,GAGtB,IAAIqhB,EAA0B3nB,EAA0B,iBAIxD,GAHwB,oBAAbzO,IACTA,EAAW2xB,IAETh0B,EAAEI,YAAYsQ,GAChB5W,EAAQlC,MAAM,gDADhB,CAIA,IAAIuJ,KAAK23B,mBAAmBpoB,GAA5B,EAMAtB,EAAaA,GAAc,CAAC,GACV,MAAIjO,KAAK6P,WAAW,SAGtC,IAAI+nB,EAAkB53B,KAAkB,YAAEmf,mBAAmB5P,GAC7D,IAAK1Q,EAAEI,YAAY24B,GAAkB,CACnC,IAAIC,GAAiB,IAAIr1B,MAAOwG,UAAY4uB,EAC5C3pB,EAAsB,UAAIJ,YAAYgqB,EAAiB,KAAMC,QAAQ,GACvE,CACA93B,KAAK20B,0BAOL1mB,EAAapP,EAAE2B,OAAO,CAAC,EAAG3B,EAAEgO,KAAKoB,aAAcjO,KAAkB,YAAEiO,aAAcjO,KAAKw0B,uBAAwBvmB,GAC9G,IAAI8pB,EAAqB/3B,KAAK6P,WAAW,sBACrChR,EAAEF,QAAQo5B,GACZl5B,EAAEM,KAAK44B,GAAoB,SAAUC,UAC5B/pB,EAAW+pB,EACpB,IAEAr/B,EAAQlC,MAAM,gDAAkDshC,GAElE,IAAItlC,EAAO,CACT,MAAS8c,EACT,WAActB,GAEZ1K,EAAMvD,KAAKua,gBAAgB,CAC7BrlB,KAAM,SACNzC,KAAMA,EACN+nB,SAAUxa,KAAK6P,WAAW,YAAc,UACxC4K,QAASza,KAAK0a,iBAAiB4Z,OAC/BgD,wBAAyBA,EACzBC,qBAAsB5nB,GACrBzO,GAEH,OADAlB,KAAKi4B,0CAA0CxlC,GACxC8Q,CAzCP,CAFErC,EAAS,EAFX,CA8CF,IAgBAmyB,GAAYngC,UAAUglC,UAAYlhB,IAA0B,SAAU6C,EAAWse,EAAWj3B,GACrFrC,EAAEF,QAAQw5B,KACbA,EAAY,CAACA,IAEf,IAAIz3B,EAAO,CAAC,EAGZ,OAFAA,EAAKmZ,GAAase,EAClBn4B,KAAK8c,SAASpc,GACPV,KAAa,OAAErG,IAAIkgB,EAAWse,EAAWj3B,EAClD,IAaAmyB,GAAYngC,UAAUklC,UAAYphB,IAA0B,SAAU6C,EAAWC,EAAU5Y,GACzF,IAAIm3B,EAAar4B,KAAK6wB,aAAahX,GACnC,QAAmB7iB,IAAfqhC,EAA0B,CAC5B,IAAI33B,EAAO,CAAC,EACZA,EAAKmZ,GAAa,CAACC,GACnB9Z,KAAK8c,SAASpc,EAChB,MACwC,IAAlC23B,EAAW95B,QAAQub,KACrBue,EAAW/kC,KAAKwmB,GAChB9Z,KAAK8c,SAASpc,IAGlB,OAAOV,KAAa,OAAEqa,MAAMR,EAAWC,EAAU5Y,EACnD,IAaAmyB,GAAYngC,UAAUolC,aAAethB,IAA0B,SAAU6C,EAAWC,EAAU5Y,GAC5F,IAAIq3B,EAAYv4B,KAAK6wB,aAAahX,GAElC,QAAkB7iB,IAAduhC,EAAyB,CAC3B,IAAIC,EAAMD,EAAUh6B,QAAQub,GACxB0e,GAAO,IACTD,EAAUE,OAAOD,EAAK,GACtBx4B,KAAK8c,SAAS,CACZjD,UAAW0e,KAGU,IAArBA,EAAUvlC,QACZgN,KAAK+c,WAAWlD,EAEpB,CACA,OAAO7Z,KAAa,OAAEoJ,OAAOyQ,EAAWC,EAAU5Y,EACpD,IAcAmyB,GAAYngC,UAAUwlC,kBAAoB1hB,IAA0B,SAAUzH,EAAYtB,EAAY0M,EAAQzZ,GAC5G,IAAIy3B,EAAiB95B,EAAE2B,OAAO,CAAC,EAAGyN,GAAc,CAAC,GAMjD,OALApP,EAAEM,KAAKwb,GAAQ,SAAUvY,EAAGC,GAChB,OAAND,QAAoBpL,IAANoL,IAChBu2B,EAAet2B,GAAKD,EAExB,IACOpC,KAAKsP,MAAMC,EAAYopB,EAAgBz3B,EAChD,IACAmyB,GAAYngC,UAAU0lC,gBAAkB,SAAU/e,EAAWC,GAC3D,OAAOD,EAAY,IAAM/K,KAAKC,UAAU+K,EAC1C,EACAuZ,GAAYngC,UAAU2lC,yBAA2B,SAAUhf,EAAWC,UAC7D9Z,KAAKwzB,eAAexzB,KAAK44B,gBAAgB/e,EAAWC,GAC7D,EAaAuZ,GAAYngC,UAAU4lC,UAAY,SAAUjf,EAAWC,GACrD,IAAIif,EAAU/4B,KAAK44B,gBAAgB/e,EAAWC,GAC1Ckf,EAAQh5B,KAAKwzB,eAAeuF,GAMhC,YALc/hC,IAAVgiC,GAAuBA,EAAMhf,aAAeH,GAAamf,EAAM/e,YAAcH,KAC/Ekf,EAAQ,IAAIrf,IACNC,MAAM5Z,KAAM6Z,EAAWC,GAC7B9Z,KAAKwzB,eAAeuF,GAAWC,GAE1BA,CACT,EAQA3F,GAAYngC,UAAU+lC,eAAiB,SAAU7qB,GAC3CvP,EAAEI,YAAYmP,KAChBA,EAAOpQ,EAAWvB,SAASpI,MAE7B2L,KAAKsP,MAAM,eAAgBzQ,EAAEgO,KAAKsB,aAAaC,GACjD,EA8BAilB,GAAYngC,UAAUgmC,YAAc,WAClC,OAAOl5B,KAAK60B,WAAWzhC,KAAK4M,KAAMiQ,EAAazV,UACjD,EA6BA64B,GAAYngC,UAAUimC,YAAc,WAClC,OAAOn5B,KAAK60B,WAAWzhC,KAAK4M,KAAMuQ,GAAa/V,UACjD,EAmBA64B,GAAYngC,UAAUkmC,WAAa,SAAU7pB,GACvC1Q,EAAEI,YAAYsQ,GAChB5W,EAAQlC,MAAM,iDAGZuJ,KAAK23B,mBAAmBpoB,IAG5BvP,KAAkB,YAAEif,gBAAgB1P,GAAY,IAAI/M,MAAOwG,UAC7D,EACA,IAAIqwB,GAAoB,CACtB,YAAc,GAQZC,GAAuB,SAA8BC,GACvD,IAAI5pB,EAUJ,OAREA,EADE9Q,EAAEgD,SAAS03B,GACHA,EACA16B,EAAEI,YAAYs6B,GAKd,CAAC,EAJD,CACR,KAAQA,GAKL16B,EAAE2B,OAAO,CAAC,EAAG64B,GAAmB1pB,EACzC,EAyBA0jB,GAAYngC,UAAU4pB,SAAW,SAAUlN,EAAO2pB,GAChD,IAAI5pB,EAAU2pB,GAAqBC,GAC/B5pB,EAAoB,WACtB3P,KAAkB,YAAE8c,SAASlN,EAAOD,EAAc,MAElD9Q,EAAE2B,OAAOR,KAAKw0B,uBAAwB5kB,EAE1C,EA6BAyjB,GAAYngC,UAAUopB,cAAgB,SAAU1M,EAAOgN,EAAe2c,GACpE,IAAI5pB,EAAU2pB,GAAqBC,GAC/B5pB,EAAoB,WACtB3P,KAAkB,YAAEsc,cAAc1M,EAAOgN,EAAejN,EAAc,OAEzC,qBAAlBiN,IACTA,EAAgB,QAElB/d,EAAEM,KAAKyQ,GAAO,SAAUnM,EAAK/C,GACtBV,KAAKw0B,uBAAuBrhC,eAAeuN,IAASV,KAAKw0B,uBAAuB9zB,KAAUkc,IAC7F5c,KAAKw0B,uBAAuB9zB,GAAQ+C,EAExC,GAAGzD,MAEP,EASAqzB,GAAYngC,UAAU6pB,WAAa,SAAUtkB,EAAUkX,IACrDA,EAAU2pB,GAAqB3pB,IACP,WACtB3P,KAAkB,YAAE+c,WAAWtkB,UAExBuH,KAAKw0B,uBAAuB/7B,EAEvC,EACA46B,GAAYngC,UAAUsmC,iBAAmB,SAAU94B,EAAM3I,GACvD,IAAI6X,EAAQ,CAAC,EACbA,EAAMlP,GAAQ3I,EACdiI,KAAK8c,SAASlN,EAChB,EA0BAyjB,GAAYngC,UAAUuG,SAAW,SAAUggC,EAAiB3H,EAAeC,EAAeC,EAAkBC,EAAoBC,EAAiBC,EAAiBC,GAShK,IAAIsH,EAAuB15B,KAAK2wB,kBAIhC,GAHA3wB,KAAK8c,SAAS,CACZ,SAAY2c,KAETz5B,KAAK6wB,aAAa,cAAe,CAGpC,IAAID,EAAY8I,EAChB15B,KAAKsc,cAAc,CACjB,4BAA8B,EAC9B,WAAcsU,GACb,GACL,CAII6I,IAAoBC,GAAwBD,IAAoBz5B,KAAK6wB,aAAaxV,MACpFrb,KAAK+c,WAAW1B,IAChBrb,KAAK8c,SAAS,CACZ,YAAe2c,KAGnBz5B,KAAK25B,gCAAgC35B,KAAK2wB,mBAC1C3wB,KAAKmxB,OAAOC,iBAAkB,EAE9BpxB,KAAa,OAAE6xB,OAAOC,EAAeC,EAAeC,EAAkBC,EAAoBC,EAAiBC,EAAiBC,GAIxHqH,IAAoBC,GACtB15B,KAAKsP,MAAM,YAAa,CACtB,YAAemqB,EACf,kBAAqBC,GACpB,CACDhC,YAAY,GAGlB,EAMArE,GAAYngC,UAAU0mC,MAAQ,WAC5B55B,KAAkB,YAAE4T,QACpB5T,KAAKmxB,OAAOC,iBAAkB,EAC9B,IAAIsD,EAAO71B,EAAEsH,OACbnG,KAAKsc,cAAc,CACjB,YAAeoY,EACf,WAAcA,GACb,GACL,EAkBArB,GAAYngC,UAAUy9B,gBAAkB,WACtC,OAAO3wB,KAAK6wB,aAAa,cAC3B,EAsCAwC,GAAYngC,UAAU2mC,MAAQ,SAAUA,EAAOC,GAI7C,GAAID,IAAU75B,KAAK6wB,aAAazV,IAE9B,OADAziB,EAAQ4G,SAAS,oEACT,EAEV,IAAIkyB,EAAQzxB,KAIZ,OAHInB,EAAEI,YAAY66B,KAChBA,EAAW95B,KAAK2wB,mBAEdkJ,IAAUC,GACZ95B,KAAKw5B,iBAAiBne,GAAcwe,GAC7B75B,KAAKsP,MAAM,gBAAiB,CACjC,MAASuqB,EACT,YAAeC,GACd,CACDpC,YAAY,IACX,WAEDjG,EAAMh4B,SAASogC,EACjB,MAEAlhC,EAAQlC,MAAM,0DACduJ,KAAKvG,SAASogC,IACN,EAEZ,EAaAxG,GAAYngC,UAAU6mC,SAAW,SAAUA,GACzC/5B,KAAKw5B,iBAAiB,cAAeO,EACvC,EA2HA1G,GAAYngC,UAAU6gC,WAAa,SAAUrY,GACvC7c,EAAEgD,SAAS6Z,KACb7c,EAAE2B,OAAOR,KAAa,OAAG0b,GACJA,EAAmB,YAEtC7c,EAAEM,KAAKa,KAAK0a,kBAAkB,SAAUD,GACtCA,EAAQlG,gBACV,IAEGvU,KAAK6P,WAAW,sBACnB7P,KAAa,OAAoB,iBAAIA,KAAa,OAAe,aAE9DA,KAAK6P,WAAW,yBACnB7P,KAAa,OAAuB,oBAAIA,KAAa,OAAkB,gBAErEA,KAAkB,aACpBA,KAAkB,YAAE8b,cAAc9b,KAAa,QAEjD9D,EAAOC,MAAQD,EAAOC,OAAS6D,KAAK6P,WAAW,SAEnD,EAKAwjB,GAAYngC,UAAU2c,WAAa,SAAUmqB,GAC3C,OAAOh6B,KAAa,OAAEg6B,EACxB,EAQA3G,GAAYngC,UAAU8jC,UAAY,SAAUiD,GAC1C,IAAI12B,GAAOvD,KAAa,OAAS,MAAEi6B,IAAcrH,IAAe1zB,MAAMc,KAAMjH,EAAM3F,KAAKoH,UAAW,IAKlG,MAJmB,qBAAR+I,IACT5K,EAAQlC,MAAMwjC,EAAY,gCAC1B12B,EAAM,MAEDA,CACT,EAoBA8vB,GAAYngC,UAAU29B,aAAe,SAAUqJ,GAC7C,OAAOl6B,KAAkB,YAAS,MAAEk6B,EACtC,EACA7G,GAAYngC,UAAU2K,SAAW,WAC/B,IAAI9G,EAAOiJ,KAAK6P,WAAW,QAI3B,OAHI9Y,IAAS+7B,KACX/7B,EAAO+7B,GAAwB,IAAM/7B,GAEhCA,CACT,EACAs8B,GAAYngC,UAAUykC,mBAAqB,SAAUpoB,GACnD,OAAO1Q,EAAEmI,YAAYxK,IAAcwD,KAAKmxB,OAAOiG,oBAAsBv4B,EAAEyC,QAAQtB,KAAKk0B,kBAAmB3kB,EACzG,EACA8jB,GAAYngC,UAAU+kC,0CAA4CjhB,IAA0B,SAAU+R,GACpG,GAAK/oB,KAAKyzB,4BAIR,IADA,IAAIxyB,EAAMjB,KAAwB,kBACzBlN,EAAI,EAAGA,EAAImO,EAAIjO,OAAQF,IAAK,CAEnC,GADY,IAAIywB,GAAqBtiB,EAAInO,GAAIkN,MACnC8oB,oBAAoBC,GAE5B,YADA/oB,KAAKm6B,mBAAmBl5B,EAAInO,GAGhC,MATAkN,KAAK0zB,kDAAkDpgC,KAAKy1B,EAWhE,IACAsK,GAAYngC,UAAUymC,gCAAkC3iB,IAA0B,SAAUojB,GAC1F,GAAKA,IAAep6B,KAAKmxB,OAAOC,kBAAmBpxB,KAAK6P,WAAW,yBAAnE,CAGAlX,EAAQgD,IAAI,+BACZ,IAAIlJ,EAAO,CACT,SAAW,EACX,QAAW,IACX,IAAO,MACP,MAASuN,KAAK6P,WAAW,SACzB,YAAeuqB,GAEjBp6B,KAAKka,cAAcla,KAAK6P,WAAW,YAAc,WAAYpd,EAAM,CACjEojB,OAAQ,MACRI,UAAW,OACVjW,KAAKi1B,kBAAkBp2B,EAAEvG,MAAK,SAAU6H,GACzC,GAAIA,EAAsB,eAAKA,EAAsB,cAAEnN,OAAS,EAAG,CACjEgN,KAAwB,kBAAI,GAC5B,IAAIq6B,EAAgB,GACpBx7B,EAAEM,KAAKgB,EAAsB,eAAG,SAAUm6B,IACvCA,EAAwB,kBAAKA,EAAwB,iBAAEtnC,OAAS,EAAIgN,KAAwB,kBAAIq6B,GAAe/mC,KAAKgnC,EACvH,GAAGt6B,MACCq6B,EAAcrnC,OAAS,GACzBgN,KAAKm6B,mBAAmB/mC,KAAK4M,KAAMq6B,EAAc,GAErD,CACAr6B,KAAKu6B,oCACP,GAAGv6B,OAxBH,CAyBF,IACAqzB,GAAYngC,UAAUqnC,mCAAqC,WACzDv6B,KAAKyzB,6BAA8B,EAInC,IADA,IAAIa,EAASt0B,KAAK0zB,kDACXY,EAAOthC,OAAS,GAAG,CACxB,IAAIP,EAAO6hC,EAAO7gC,QAClBuM,KAAKi4B,0CAA0CxlC,EACjD,CACF,EACA4gC,GAAYngC,UAAUinC,mBAAqB,SAAU3W,GAChC,IAAID,GAAqBC,EAAYxjB,MAC3C8lB,MACf,EAGAuN,GAAYngC,UAAUuhC,WAAa,WACwD,iBAAzDz0B,KAAK6P,WAAW,sCAGfhR,EAAE6K,aAAaK,kBACzC/J,KAAKw6B,yBAA2Bx6B,KAAKw6B,sBAAsB,CAC9D,iBAAoB,YAEpBx6B,KAAKy6B,gBAAgB,CACnB,oBAAsB,KAGrBz6B,KAAK80B,0BAA4B90B,KAAK80B,uBAAuB,CAChE,iBAAoB,YAEpB90B,KAAK06B,iBAAiB,CACpB,mBAAqB,IAGzB16B,KAAK26B,0BAA0B,CAC7B,iBAAoB,SACpB,oBAAsB,KAKtB36B,KAAK80B,yBACP90B,KAAK46B,yBAAyB,CAC5B,mBAAqB,IAMb56B,KAAKw6B,0BAA4Bx6B,KAAK6P,WAAW,iCAAkChR,EAAEiJ,OAAOnQ,IAAI,eAC1GkH,EAAEiJ,OAAOsB,OAAO,aAChBpJ,KAAK06B,iBAAiB,CACpB,kBAAqB16B,KAAK6P,WAAW,oCAG3C,EAQAwjB,GAAYngC,UAAU0nC,yBAA2B,SAAUjrB,GACzD,IAAIsM,EACJ,GAAItM,GAAWA,EAA2B,kBACxCsM,GAAW,MACN,KAAItM,IAAWA,EAA4B,mBAGhD,OAFAsM,GAAW,CAGb,CACKjc,KAAK6P,WAAW,wBAA0B7P,KAAkB,YAAEic,WAAaA,GAC9Ejc,KAAkB,YAAEwd,aAAavB,GAE/BA,GACFpd,EAAEM,KAAKa,KAAK0a,kBAAkB,SAAUD,GACtCA,EAAQ7G,OACV,GAEJ,EAGAyf,GAAYngC,UAAU2nC,gBAAkB,SAAUp7B,EAAMkQ,GAiBtD,OAhBAA,EAAU9Q,EAAE2B,OAAO,CACjB,MAAS3B,EAAEvG,KAAK0H,KAAKsP,MAAOtP,MAC5B,iBAAoBA,KAAK6P,WAAW,qCACpC,cAAiB7P,KAAK6P,WAAW,kCACjC,kBAAqB7P,KAAK6P,WAAW,qBACrC,kBAAqB7P,KAAK6P,WAAW,qBACrC,uBAA0B7P,KAAK6P,WAAW,0BAC1C,cAAiB7P,KAAK6P,WAAW,iBACjC,cAAiB7P,KAAK6P,WAAW,iBACjC,WAAc7P,KAAK6P,WAAW,eAC7BF,GAGE9Q,EAAE6K,aAAaK,iBAClB4F,EAA0B,iBAAI,UAEzBlQ,EAAKO,KAAK6P,WAAW,SAAU,CACpCP,MAAOK,EAAe,MACtBqI,eAAgBrI,EAA0B,iBAC1CsI,gBAAiBtI,EAA0B,iBAC3C+H,gBAAiB/H,EAA0B,iBAC3CgI,kBAAmBhI,EAAuB,cAC1C8H,aAAc9H,EAAuB,cACrCkI,iBAAkBlI,EAA2B,kBAC7CoI,gBAAiBpI,EAA2B,kBAC5C6H,qBAAsB7H,EAAgC,uBACtDmI,aAAcnI,EAAuB,cACrC8G,UAAW9G,EAAoB,YAEnC,EAiCA0jB,GAAYngC,UAAUunC,gBAAkB,SAAU9qB,GAChDA,EAAU9Q,EAAE2B,OAAO,CACjB,oBAAsB,GACrBmP,GACH3P,KAAK66B,gBAAgB1kB,GAAOxG,GAC5B3P,KAAK46B,yBAAyBjrB,EAChC,EA2BA0jB,GAAYngC,UAAUwnC,iBAAmB,SAAU/qB,IACjDA,EAAU9Q,EAAE2B,OAAO,CACjB,mBAAqB,EACrB,aAAe,GACdmP,IAGsB,aAAK3P,KAAa,QAAKA,KAAa,OAAE0wB,qBAC7D1wB,KAAa,OAAEywB,cACfzwB,KAAa,OAAEwwB,iBAEjBxwB,KAAK66B,gBAAgBxkB,GAAQ1G,GAC7B3P,KAAK46B,yBAAyBjrB,EAChC,EAeA0jB,GAAYngC,UAAUsnC,sBAAwB,SAAU7qB,GACtD,OAAO3P,KAAK66B,gBAAgBvkB,GAAY3G,EAC1C,EAeA0jB,GAAYngC,UAAU4hC,uBAAyB,SAAUnlB,GACvD,OAAO3P,KAAK66B,gBAAgBrkB,GAAa7G,EAC3C,EA2BA0jB,GAAYngC,UAAUynC,0BAA4B,SAAUhrB,GAC1DA,EAAU9Q,EAAE2B,OAAO,CACjB,oBAAsB,GACrBmP,GACH3P,KAAK66B,gBAAgBxjB,GAAe1H,GACpC3P,KAAK46B,yBAAyBjrB,EAChC,EAKA0jB,GAAYngC,UAAgB,KAAImgC,GAAYngC,UAAUmG,KACtDg6B,GAAYngC,UAAiB,MAAImgC,GAAYngC,UAAU0mC,MACvDvG,GAAYngC,UAAmB,QAAImgC,GAAYngC,UAAUikC,QACzD9D,GAAYngC,UAAsB,WAAImgC,GAAYngC,UAAUkmC,WAC5D/F,GAAYngC,UAAiB,MAAImgC,GAAYngC,UAAUoc,MACvD+jB,GAAYngC,UAAuB,YAAImgC,GAAYngC,UAAUgmC,YAC7D7F,GAAYngC,UAAuB,YAAImgC,GAAYngC,UAAUimC,YAC7D9F,GAAYngC,UAA0B,eAAImgC,GAAYngC,UAAU+lC,eAChE5F,GAAYngC,UAAoB,SAAImgC,GAAYngC,UAAU4pB,SAC1DuW,GAAYngC,UAAyB,cAAImgC,GAAYngC,UAAUopB,cAC/D+W,GAAYngC,UAAsB,WAAImgC,GAAYngC,UAAU6pB,WAC5DsW,GAAYngC,UAAoB,SAAImgC,GAAYngC,UAAUuG,SAC1D45B,GAAYngC,UAAiB,MAAImgC,GAAYngC,UAAU2mC,MACvDxG,GAAYngC,UAAoB,SAAImgC,GAAYngC,UAAU6mC,SAC1D1G,GAAYngC,UAAsB,WAAImgC,GAAYngC,UAAU6gC,WAC5DV,GAAYngC,UAAsB,WAAImgC,GAAYngC,UAAU2c,WAC5DwjB,GAAYngC,UAAwB,aAAImgC,GAAYngC,UAAU29B,aAC9DwC,GAAYngC,UAA2B,gBAAImgC,GAAYngC,UAAUy9B,gBACjE0C,GAAYngC,UAAoB,SAAImgC,GAAYngC,UAAU2K,SAC1Dw1B,GAAYngC,UAA2C,gCAAImgC,GAAYngC,UAAUymC,gCACjFtG,GAAYngC,UAA8C,mCAAImgC,GAAYngC,UAAUqnC,mCACpFlH,GAAYngC,UAA8B,mBAAImgC,GAAYngC,UAAUinC,mBACpE9G,GAAYngC,UAA4B,iBAAImgC,GAAYngC,UAAUwnC,iBAClErH,GAAYngC,UAA2B,gBAAImgC,GAAYngC,UAAUunC,gBACjEpH,GAAYngC,UAAkC,uBAAImgC,GAAYngC,UAAU4hC,uBACxEzB,GAAYngC,UAAiC,sBAAImgC,GAAYngC,UAAUsnC,sBACvEnH,GAAYngC,UAAqC,0BAAImgC,GAAYngC,UAAUynC,0BAC3EtH,GAAYngC,UAAqB,UAAImgC,GAAYngC,UAAU4lC,UAC3DzF,GAAYngC,UAAqB,UAAImgC,GAAYngC,UAAUglC,UAC3D7E,GAAYngC,UAAqB,UAAImgC,GAAYngC,UAAUklC,UAC3D/E,GAAYngC,UAAwB,aAAImgC,GAAYngC,UAAUolC,aAC9DjF,GAAYngC,UAA6B,kBAAImgC,GAAYngC,UAAUwlC,kBACnErF,GAAYngC,UAA+B,oBAAImgC,GAAYngC,UAAU+jC,oBACrE5D,GAAYngC,UAA8B,mBAAImgC,GAAYngC,UAAUgkC,mBAGpEzb,GAAoBvoB,UAAsB,WAAIuoB,GAAoBvoB,UAAU+a,WAC5EwN,GAAoBvoB,UAAiC,sBAAIuoB,GAAoBvoB,UAAUkqB,sBACvF3B,GAAoBvoB,UAAgC,qBAAIuoB,GAAoBvoB,UAAUmqB,qBACtF5B,GAAoBvoB,UAA+B,oBAAIuoB,GAAoBvoB,UAAU2qB,oBACrFpC,GAAoBvoB,UAAiB,MAAIuoB,GAAoBvoB,UAAU0gB,MACvE/U,EAAEqE,eAAemwB,GAAa,CAAC,WAAY,kCAAmC,uBAC9E,IAAIyH,GAAY,CAAC,EAYbC,GAAwB,WAG1B/K,GAAsB,KAAI,SAAUpkB,EAAO8P,EAAQ3kB,GACjD,GAAIA,EAMF,OAJKi5B,GAAgBj5B,KACnBi5B,GAAgBj5B,GAAQ+jC,GAAU/jC,GAAQu8B,GAAa1nB,EAAO8P,EAAQ3kB,GACtEi5B,GAAgBj5B,GAAM+8B,WAEjB9D,GAAgBj5B,GAEvB,IAAIw8B,EAAWvD,GACX8K,GAAUhI,IAEZS,EAAWuH,GAAUhI,IACZlnB,KAET2nB,EAAWD,GAAa1nB,EAAO8P,EAAQoX,KAC9BgB,UACTgH,GAAUhI,IAAyBS,GAErCvD,GAAkBuD,EAp0DL,IAq0DTxD,KACF9zB,EAAS62B,IAAyB9C,IAjCxCnxB,EAAEM,KAAK27B,IAAW,SAAUvH,EAAUx8B,GAChCA,IAAS+7B,KACX9C,GAAgBj5B,GAAQw8B,EAE5B,IAGAvD,GAAmB,EAAInxB,CA8BvB,CACF,EA6DA,IAAIzF,IAPF22B,GAl4DgB,EAm4DhBC,GAAkB,IAAIqD,GACtB0H,KACA/K,GAAsB,OAxDK,WAE3B,SAASgL,IAEHA,EAAmBC,OAGvBD,EAAmBC,MAAO,EAC1B7H,IAAa,EACbH,IAAmB,EACnBp0B,EAAEM,KAAK27B,IAAW,SAAUI,GAC1BA,EAAKtG,aACP,IACF,CAUA,GAAI52B,EAAWlD,iBACiB,aAA1BkD,EAAWnD,WAKbmgC,IAEAh9B,EAAWlD,iBAAiB,mBAAoBkgC,GAAoB,QAEjE,GAAIh9B,EAAWm9B,YAAa,CAEjCn9B,EAAWm9B,YAAY,qBAAsBH,GAG7C,IAAII,GAAW,EACf,IACEA,EAAqC,OAA1Bn/B,EAASo/B,YACtB,CAAE,MAAOrnC,GAET,CACIgK,EAAWuuB,gBAAgB+O,UAAYF,GA9B7C,SAASG,IACP,IACEv9B,EAAWuuB,gBAAgB+O,SAAS,OACtC,CAAE,MAAOtnC,GAEP,YADAiD,WAAWskC,EAAiB,EAE9B,CACAP,GACF,CAuBIO,EAEJ,CAGA18B,EAAEqL,eAAejO,EAAU,OAAQ++B,GAAoB,EACzD,CAMEQ,GACOxL,IAGTl8B,EAAOD,QAAUuF,E,sBCzoOjB,IAAIqiC,EAAW,SAAU5nC,GACvB,aAEA,IAEImD,EAFA0kC,EAAKzoC,OAAOC,UACZyoC,EAASD,EAAGvoC,eAEZyoC,EAA4B,oBAAX/jC,OAAwBA,OAAS,CAAC,EACnDgkC,EAAiBD,EAAQ7/B,UAAY,aACrC+/B,EAAsBF,EAAQG,eAAiB,kBAC/CC,EAAoBJ,EAAQ9jC,aAAe,gBAE/C,SAASmkC,EAAOngC,EAAKzD,EAAKN,GAOxB,OANA9E,OAAOwE,eAAeqE,EAAKzD,EAAK,CAC9BN,MAAOA,EACPL,YAAY,EACZwkC,cAAc,EACdC,UAAU,IAELrgC,EAAIzD,EACb,CACA,IAEE4jC,EAAO,CAAC,EAAG,GACb,CAAE,MAAOxmC,GACPwmC,EAAS,SAASngC,EAAKzD,EAAKN,GAC1B,OAAO+D,EAAIzD,GAAON,CACpB,CACF,CAEA,SAASqkC,EAAKC,EAASC,EAASp8B,EAAMq8B,GAEpC,IAAIC,EAAiBF,GAAWA,EAAQppC,qBAAqBupC,EAAYH,EAAUG,EAC/EC,EAAYzpC,OAAOmF,OAAOokC,EAAetpC,WACzC0M,EAAU,IAAI+8B,EAAQJ,GAAe,IAMzC,OAFAG,EAAUE,QAuMZ,SAA0BP,EAASn8B,EAAMN,GACvC,IAAIi9B,EAAQC,EAEZ,OAAO,SAAgBjnB,EAAQzW,GAC7B,GAAIy9B,IAAUE,EACZ,MAAM,IAAIrnC,MAAM,gCAGlB,GAAImnC,IAAUG,EAAmB,CAC/B,GAAe,UAAXnnB,EACF,MAAMzW,EAKR,OAAO69B,GACT,CAKA,IAHAr9B,EAAQiW,OAASA,EACjBjW,EAAQR,IAAMA,IAED,CACX,IAAI89B,EAAWt9B,EAAQs9B,SACvB,GAAIA,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAUt9B,GACnD,GAAIu9B,EAAgB,CAClB,GAAIA,IAAmBE,EAAkB,SACzC,OAAOF,CACT,CACF,CAEA,GAAuB,SAAnBv9B,EAAQiW,OAGVjW,EAAQ09B,KAAO19B,EAAQ29B,MAAQ39B,EAAQR,SAElC,GAAuB,UAAnBQ,EAAQiW,OAAoB,CACrC,GAAIgnB,IAAUC,EAEZ,MADAD,EAAQG,EACFp9B,EAAQR,IAGhBQ,EAAQ49B,kBAAkB59B,EAAQR,IAEpC,KAA8B,WAAnBQ,EAAQiW,QACjBjW,EAAQ69B,OAAO,SAAU79B,EAAQR,KAGnCy9B,EAAQE,EAER,IAAIW,EAASC,EAAStB,EAASn8B,EAAMN,GACrC,GAAoB,WAAhB89B,EAAOxoC,KAAmB,CAO5B,GAJA2nC,EAAQj9B,EAAQq7B,KACZ+B,EACAY,EAEAF,EAAOt+B,MAAQi+B,EACjB,SAGF,MAAO,CACLtlC,MAAO2lC,EAAOt+B,IACd67B,KAAMr7B,EAAQq7B,KAGlB,CAA2B,UAAhByC,EAAOxoC,OAChB2nC,EAAQG,EAGRp9B,EAAQiW,OAAS,QACjBjW,EAAQR,IAAMs+B,EAAOt+B,IAEzB,CACF,CACF,CAnRsBy+B,CAAiBxB,EAASn8B,EAAMN,GAE7C88B,CACT,CAaA,SAASiB,EAASG,EAAIhiC,EAAKsD,GACzB,IACE,MAAO,CAAElK,KAAM,SAAUkK,IAAK0+B,EAAG1qC,KAAK0I,EAAKsD,GAC7C,CAAE,MAAO3J,GACP,MAAO,CAAEP,KAAM,QAASkK,IAAK3J,EAC/B,CACF,CAlBA5B,EAAQuoC,KAAOA,EAoBf,IAAIU,EAAyB,iBACzBc,EAAyB,iBACzBb,EAAoB,YACpBC,EAAoB,YAIpBK,EAAmB,CAAC,EAMxB,SAASZ,IAAa,CACtB,SAASsB,IAAqB,CAC9B,SAASC,IAA8B,CAIvC,IAAIC,EAAoB,CAAC,EACzBhC,EAAOgC,EAAmBpC,GAAgB,WACxC,OAAO77B,IACT,IAEA,IAAIk+B,EAAWjrC,OAAOkrC,eAClBC,EAA0BF,GAAYA,EAASA,EAASl9B,EAAO,MAC/Do9B,GACAA,IAA4B1C,GAC5BC,EAAOvoC,KAAKgrC,EAAyBvC,KAGvCoC,EAAoBG,GAGtB,IAAIC,EAAKL,EAA2B9qC,UAClCupC,EAAUvpC,UAAYD,OAAOmF,OAAO6lC,GAYtC,SAASK,EAAsBprC,GAC7B,CAAC,OAAQ,QAAS,UAAUmL,SAAQ,SAASwX,GAC3ComB,EAAO/oC,EAAW2iB,GAAQ,SAASzW,GACjC,OAAOY,KAAK48B,QAAQ/mB,EAAQzW,EAC9B,GACF,GACF,CA+BA,SAASm/B,EAAc7B,EAAW8B,GAChC,SAASC,EAAO5oB,EAAQzW,EAAKjL,EAASC,GACpC,IAAIspC,EAASC,EAASjB,EAAU7mB,GAAS6mB,EAAWt9B,GACpD,GAAoB,UAAhBs+B,EAAOxoC,KAEJ,CACL,IAAIiL,EAASu9B,EAAOt+B,IAChBrH,EAAQoI,EAAOpI,MACnB,OAAIA,GACiB,kBAAVA,GACP4jC,EAAOvoC,KAAK2E,EAAO,WACdymC,EAAYrqC,QAAQ4D,EAAM2mC,SAAS3oC,MAAK,SAASgC,GACtD0mC,EAAO,OAAQ1mC,EAAO5D,EAASC,EACjC,IAAG,SAASqB,GACVgpC,EAAO,QAAShpC,EAAKtB,EAASC,EAChC,IAGKoqC,EAAYrqC,QAAQ4D,GAAOhC,MAAK,SAAS4oC,GAI9Cx+B,EAAOpI,MAAQ4mC,EACfxqC,EAAQgM,EACV,IAAG,SAAS1J,GAGV,OAAOgoC,EAAO,QAAShoC,EAAOtC,EAASC,EACzC,GACF,CAzBEA,EAAOspC,EAAOt+B,IA0BlB,CAEA,IAAIw/B,EAgCJ5+B,KAAK48B,QA9BL,SAAiB/mB,EAAQzW,GACvB,SAASy/B,IACP,OAAO,IAAIL,GAAY,SAASrqC,EAASC,GACvCqqC,EAAO5oB,EAAQzW,EAAKjL,EAASC,EAC/B,GACF,CAEA,OAAOwqC,EAaLA,EAAkBA,EAAgB7oC,KAChC8oC,EAGAA,GACEA,GACR,CAKF,CA4GA,SAASzB,EAAoBF,EAAUt9B,GACrC,IAAIiW,EAASqnB,EAASnhC,SAAS6D,EAAQiW,QACvC,GAAIA,IAAW7e,EAAW,CAKxB,GAFA4I,EAAQs9B,SAAW,KAEI,UAAnBt9B,EAAQiW,OAAoB,CAE9B,GAAIqnB,EAASnhC,SAAiB,SAG5B6D,EAAQiW,OAAS,SACjBjW,EAAQR,IAAMpI,EACdomC,EAAoBF,EAAUt9B,GAEP,UAAnBA,EAAQiW,QAGV,OAAOwnB,EAIXz9B,EAAQiW,OAAS,QACjBjW,EAAQR,IAAM,IAAIW,UAChB,iDACJ,CAEA,OAAOs9B,CACT,CAEA,IAAIK,EAASC,EAAS9nB,EAAQqnB,EAASnhC,SAAU6D,EAAQR,KAEzD,GAAoB,UAAhBs+B,EAAOxoC,KAIT,OAHA0K,EAAQiW,OAAS,QACjBjW,EAAQR,IAAMs+B,EAAOt+B,IACrBQ,EAAQs9B,SAAW,KACZG,EAGT,IAAIxwB,EAAO6wB,EAAOt+B,IAElB,OAAMyN,EAOFA,EAAKouB,MAGPr7B,EAAQs9B,EAAS4B,YAAcjyB,EAAK9U,MAGpC6H,EAAQ1C,KAAOggC,EAAS6B,QAQD,WAAnBn/B,EAAQiW,SACVjW,EAAQiW,OAAS,OACjBjW,EAAQR,IAAMpI,GAUlB4I,EAAQs9B,SAAW,KACZG,GANExwB,GA3BPjN,EAAQiW,OAAS,QACjBjW,EAAQR,IAAM,IAAIW,UAAU,oCAC5BH,EAAQs9B,SAAW,KACZG,EA+BX,CAqBA,SAAS2B,EAAaC,GACpB,IAAI/iB,EAAQ,CAAEgjB,OAAQD,EAAK,IAEvB,KAAKA,IACP/iB,EAAMijB,SAAWF,EAAK,IAGpB,KAAKA,IACP/iB,EAAMkjB,WAAaH,EAAK,GACxB/iB,EAAMmjB,SAAWJ,EAAK,IAGxBj/B,KAAKs/B,WAAWhsC,KAAK4oB,EACvB,CAEA,SAASqjB,EAAcrjB,GACrB,IAAIwhB,EAASxhB,EAAMsjB,YAAc,CAAC,EAClC9B,EAAOxoC,KAAO,gBACPwoC,EAAOt+B,IACd8c,EAAMsjB,WAAa9B,CACrB,CAEA,SAASf,EAAQJ,GAIfv8B,KAAKs/B,WAAa,CAAC,CAAEJ,OAAQ,SAC7B3C,EAAYl+B,QAAQ2gC,EAAch/B,MAClCA,KAAK45B,OAAM,EACb,CA6BA,SAAS54B,EAAOD,GACd,GAAIA,EAAU,CACZ,IAAI0+B,EAAiB1+B,EAAS86B,GAC9B,GAAI4D,EACF,OAAOA,EAAersC,KAAK2N,GAG7B,GAA6B,oBAAlBA,EAAS7D,KAClB,OAAO6D,EAGT,IAAK0gB,MAAM1gB,EAAS/N,QAAS,CAC3B,IAAIF,GAAK,EAAGoK,EAAO,SAASA,IAC1B,OAASpK,EAAIiO,EAAS/N,QACpB,GAAI2oC,EAAOvoC,KAAK2N,EAAUjO,GAGxB,OAFAoK,EAAKnF,MAAQgJ,EAASjO,GACtBoK,EAAK+9B,MAAO,EACL/9B,EAOX,OAHAA,EAAKnF,MAAQf,EACbkG,EAAK+9B,MAAO,EAEL/9B,CACT,EAEA,OAAOA,EAAKA,KAAOA,CACrB,CACF,CAGA,MAAO,CAAEA,KAAM+/B,EACjB,CAGA,SAASA,IACP,MAAO,CAAEllC,MAAOf,EAAWikC,MAAM,EACnC,CA8MA,OA7mBA8C,EAAkB7qC,UAAY8qC,EAC9B/B,EAAOoC,EAAI,cAAeL,GAC1B/B,EAAO+B,EAA4B,cAAeD,GAClDA,EAAkB2B,YAAczD,EAC9B+B,EACAhC,EACA,qBAaFnoC,EAAQ8rC,oBAAsB,SAASC,GACrC,IAAI3/B,EAAyB,oBAAX2/B,GAAyBA,EAAO5jC,YAClD,QAAOiE,IACHA,IAAS89B,GAG2B,uBAAnC99B,EAAKy/B,aAAez/B,EAAKlJ,MAEhC,EAEAlD,EAAQgsC,KAAO,SAASD,GAQtB,OAPI3sC,OAAO6sC,eACT7sC,OAAO6sC,eAAeF,EAAQ5B,IAE9B4B,EAAOG,UAAY/B,EACnB/B,EAAO2D,EAAQ5D,EAAmB,sBAEpC4D,EAAO1sC,UAAYD,OAAOmF,OAAOimC,GAC1BuB,CACT,EAMA/rC,EAAQmsC,MAAQ,SAAS5gC,GACvB,MAAO,CAAEs/B,QAASt/B,EACpB,EAqEAk/B,EAAsBC,EAAcrrC,WACpC+oC,EAAOsC,EAAcrrC,UAAW4oC,GAAqB,WACnD,OAAO97B,IACT,IACAnM,EAAQ0qC,cAAgBA,EAKxB1qC,EAAQsiC,MAAQ,SAASkG,EAASC,EAASp8B,EAAMq8B,EAAaiC,QACxC,IAAhBA,IAAwBA,EAActqC,SAE1C,IAAI+rC,EAAO,IAAI1B,EACbnC,EAAKC,EAASC,EAASp8B,EAAMq8B,GAC7BiC,GAGF,OAAO3qC,EAAQ8rC,oBAAoBrD,GAC/B2D,EACAA,EAAK/iC,OAAOnH,MAAK,SAASoK,GACxB,OAAOA,EAAO86B,KAAO96B,EAAOpI,MAAQkoC,EAAK/iC,MAC3C,GACN,EAqKAohC,EAAsBD,GAEtBpC,EAAOoC,EAAIrC,EAAmB,aAO9BC,EAAOoC,EAAIxC,GAAgB,WACzB,OAAO77B,IACT,IAEAi8B,EAAOoC,EAAI,YAAY,WACrB,MAAO,oBACT,IAiCAxqC,EAAQwN,KAAO,SAAS7I,GACtB,IAAI6I,EAAO,GACX,IAAK,IAAIhJ,KAAOG,EACd6I,EAAK/N,KAAK+E,GAMZ,OAJAgJ,EAAK6+B,UAIE,SAAShjC,IACd,KAAOmE,EAAKrO,QAAQ,CAClB,IAAIqF,EAAMgJ,EAAKoxB,MACf,GAAIp6B,KAAOG,EAGT,OAFA0E,EAAKnF,MAAQM,EACb6E,EAAK+9B,MAAO,EACL/9B,CAEX,CAMA,OADAA,EAAK+9B,MAAO,EACL/9B,CACT,CACF,EAoCArJ,EAAQmN,OAASA,EAMjB27B,EAAQzpC,UAAY,CAClB8I,YAAa2gC,EAEb/C,MAAO,SAASuG,GAcd,GAbAngC,KAAKogC,KAAO,EACZpgC,KAAK9C,KAAO,EAGZ8C,KAAKs9B,KAAOt9B,KAAKu9B,MAAQvmC,EACzBgJ,KAAKi7B,MAAO,EACZj7B,KAAKk9B,SAAW,KAEhBl9B,KAAK6V,OAAS,OACd7V,KAAKZ,IAAMpI,EAEXgJ,KAAKs/B,WAAWjhC,QAAQkhC,IAEnBY,EACH,IAAK,IAAIppC,KAAQiJ,KAEQ,MAAnBjJ,EAAK6N,OAAO,IACZ+2B,EAAOvoC,KAAK4M,KAAMjJ,KACjB0qB,OAAO1qB,EAAKgC,MAAM,MACrBiH,KAAKjJ,GAAQC,EAIrB,EAEAqd,KAAM,WACJrU,KAAKi7B,MAAO,EAEZ,IACIoF,EADYrgC,KAAKs/B,WAAW,GACLE,WAC3B,GAAwB,UAApBa,EAAWnrC,KACb,MAAMmrC,EAAWjhC,IAGnB,OAAOY,KAAKsgC,IACd,EAEA9C,kBAAmB,SAAS+C,GAC1B,GAAIvgC,KAAKi7B,KACP,MAAMsF,EAGR,IAAI3gC,EAAUI,KACd,SAASwgC,EAAOnkC,EAAKokC,GAYnB,OAXA/C,EAAOxoC,KAAO,QACdwoC,EAAOt+B,IAAMmhC,EACb3gC,EAAQ1C,KAAOb,EAEXokC,IAGF7gC,EAAQiW,OAAS,OACjBjW,EAAQR,IAAMpI,KAGNypC,CACZ,CAEA,IAAK,IAAI3tC,EAAIkN,KAAKs/B,WAAWtsC,OAAS,EAAGF,GAAK,IAAKA,EAAG,CACpD,IAAIopB,EAAQlc,KAAKs/B,WAAWxsC,GACxB4qC,EAASxhB,EAAMsjB,WAEnB,GAAqB,SAAjBtjB,EAAMgjB,OAIR,OAAOsB,EAAO,OAGhB,GAAItkB,EAAMgjB,QAAUl/B,KAAKogC,KAAM,CAC7B,IAAIM,EAAW/E,EAAOvoC,KAAK8oB,EAAO,YAC9BykB,EAAahF,EAAOvoC,KAAK8oB,EAAO,cAEpC,GAAIwkB,GAAYC,EAAY,CAC1B,GAAI3gC,KAAKogC,KAAOlkB,EAAMijB,SACpB,OAAOqB,EAAOtkB,EAAMijB,UAAU,GACzB,GAAIn/B,KAAKogC,KAAOlkB,EAAMkjB,WAC3B,OAAOoB,EAAOtkB,EAAMkjB,WAGxB,MAAO,GAAIsB,GACT,GAAI1gC,KAAKogC,KAAOlkB,EAAMijB,SACpB,OAAOqB,EAAOtkB,EAAMijB,UAAU,OAG3B,KAAIwB,EAMT,MAAM,IAAIjrC,MAAM,0CALhB,GAAIsK,KAAKogC,KAAOlkB,EAAMkjB,WACpB,OAAOoB,EAAOtkB,EAAMkjB,WAKxB,CACF,CACF,CACF,EAEA3B,OAAQ,SAASvoC,EAAMkK,GACrB,IAAK,IAAItM,EAAIkN,KAAKs/B,WAAWtsC,OAAS,EAAGF,GAAK,IAAKA,EAAG,CACpD,IAAIopB,EAAQlc,KAAKs/B,WAAWxsC,GAC5B,GAAIopB,EAAMgjB,QAAUl/B,KAAKogC,MACrBzE,EAAOvoC,KAAK8oB,EAAO,eACnBlc,KAAKogC,KAAOlkB,EAAMkjB,WAAY,CAChC,IAAIwB,EAAe1kB,EACnB,KACF,CACF,CAEI0kB,IACU,UAAT1rC,GACS,aAATA,IACD0rC,EAAa1B,QAAU9/B,GACvBA,GAAOwhC,EAAaxB,aAGtBwB,EAAe,MAGjB,IAAIlD,EAASkD,EAAeA,EAAapB,WAAa,CAAC,EAIvD,OAHA9B,EAAOxoC,KAAOA,EACdwoC,EAAOt+B,IAAMA,EAETwhC,GACF5gC,KAAK6V,OAAS,OACd7V,KAAK9C,KAAO0jC,EAAaxB,WAClB/B,GAGFr9B,KAAK4tB,SAAS8P,EACvB,EAEA9P,SAAU,SAAS8P,EAAQ2B,GACzB,GAAoB,UAAhB3B,EAAOxoC,KACT,MAAMwoC,EAAOt+B,IAcf,MAXoB,UAAhBs+B,EAAOxoC,MACS,aAAhBwoC,EAAOxoC,KACT8K,KAAK9C,KAAOwgC,EAAOt+B,IACM,WAAhBs+B,EAAOxoC,MAChB8K,KAAKsgC,KAAOtgC,KAAKZ,IAAMs+B,EAAOt+B,IAC9BY,KAAK6V,OAAS,SACd7V,KAAK9C,KAAO,OACa,WAAhBwgC,EAAOxoC,MAAqBmqC,IACrCr/B,KAAK9C,KAAOmiC,GAGPhC,CACT,EAEAwD,OAAQ,SAASzB,GACf,IAAK,IAAItsC,EAAIkN,KAAKs/B,WAAWtsC,OAAS,EAAGF,GAAK,IAAKA,EAAG,CACpD,IAAIopB,EAAQlc,KAAKs/B,WAAWxsC,GAC5B,GAAIopB,EAAMkjB,aAAeA,EAGvB,OAFAp/B,KAAK4tB,SAAS1R,EAAMsjB,WAAYtjB,EAAMmjB,UACtCE,EAAcrjB,GACPmhB,CAEX,CACF,EAEA,MAAS,SAAS6B,GAChB,IAAK,IAAIpsC,EAAIkN,KAAKs/B,WAAWtsC,OAAS,EAAGF,GAAK,IAAKA,EAAG,CACpD,IAAIopB,EAAQlc,KAAKs/B,WAAWxsC,GAC5B,GAAIopB,EAAMgjB,SAAWA,EAAQ,CAC3B,IAAIxB,EAASxhB,EAAMsjB,WACnB,GAAoB,UAAhB9B,EAAOxoC,KAAkB,CAC3B,IAAI4rC,EAASpD,EAAOt+B,IACpBmgC,EAAcrjB,EAChB,CACA,OAAO4kB,CACT,CACF,CAIA,MAAM,IAAIprC,MAAM,wBAClB,EAEAqrC,cAAe,SAAShgC,EAAU+9B,EAAYC,GAa5C,OAZA/+B,KAAKk9B,SAAW,CACdnhC,SAAUiF,EAAOD,GACjB+9B,WAAYA,EACZC,QAASA,GAGS,SAAhB/+B,KAAK6V,SAGP7V,KAAKZ,IAAMpI,GAGNqmC,CACT,GAOKxpC,CAET,CAhtBc,CAqtBiBC,EAAOD,SAGtC,IACEmtC,mBAAqBvF,CACvB,CAAE,MAAOwF,GAWmB,kBAAfC,WACTA,WAAWF,mBAAqBvF,EAEhC99B,SAAS,IAAK,yBAAdA,CAAwC89B,EAE5C,C,sBChvBA0F,EAAQ,KAIRA,EAAQ,I,6YCIuC,IAEzCC,EAAW,WACf,SAAAA,IAAe,ICCT7sC,EDDQk9B,EAAA,M,4FAAA4P,CAAA,KAAAD,GCCR7sC,EAAI,IAAI+sC,gBAAgBzoC,OAAO4D,SAAS4Q,QACtC,CAAC,SAAU,WAAY,OAAQ,UAAW,UAChDhP,SAAQ,SAACrG,GACT,IAAIupC,EAAE,OAAA3lC,OAAU5D,GACZJ,EAAIrD,EAAEoD,IAAI4pC,GACV3pC,GAAU,IAALA,GACP8C,IAAQf,IAAI4nC,EAAI3pC,EAAEsO,UAAU,EAAG,IAEnC,IDPEs7B,MACAA,MACAA,MACAxhC,KAAKyhC,QAAUzhC,KAAKyhC,QAAQnpC,KAAK0H,MACjCnH,OAAOiC,iBAAiB,oBAAoB,kBAAM22B,EAAKgQ,SAAS,GAClE,C,YAACC,EAsBA,O,EAtBAN,E,EAAA,EAAA/oC,IAAA,UAAAN,O,EAAA4pC,IAAA9B,MAED,SAAA+B,IAAA,IAAAC,EAAAC,EAAA,OAAAH,IAAAvF,MAAA,SAAA2F,GAAA,cAAAA,EAAA3B,KAAA2B,EAAA7kC,MAAA,OAQK,GAPezI,SAASutC,iBAAiB,qBAElC3jC,SAAQ,SAAC4jC,GACjBA,EAAUnnC,iBAAiB,SAAS,WACfmnC,EAAUC,cAClB9mC,UAAU+mC,OAAO,uBAC9B,GACF,KAEI1tC,SAAS2tC,cAAc,yBAAyB,CAADL,EAAA7kC,KAAA,eAAA6kC,EAAA7kC,KAAA,EACX,sDAEpC,KAAD,EAAA2kC,EAAAE,EAAAzE,KAFgBwE,EAAUD,EAAA,QAG3B7hC,KAAKqiC,IAAM,IAAIP,EAAW9hC,MAAM,WAE9BvL,SAAS2tC,cAAc,qBAAqB,CAADL,EAAA7kC,KAAA,gBAAA6kC,EAAA7kC,KAAA,GACX,+BAAiE,KAAD,GAClG,IADiBolC,EAAiFP,EAAAzE,KAA3E,SACZt9B,MAAM,yBAAA+hC,EAAA1tB,OAAA,GAAAutB,EAAA,SApBpBF,E,8KAsBA,kBAAAA,EAAAxiC,MAAA,KAAA1E,UAAA,K,8BAAA4mC,CAAA,CA9Bc,GAiCjB,IAAIA,C,oBE5CJttC,EAAOD,QAAU,EAAQ,I,qBCAzB,QAGmB0uC,EAHnB,cAAoW,OAAtO1mC,EAArD,oBAAXhE,QAAoD,kBAApBA,OAAOkE,SAAmC,SAAiBD,GAAO,cAAcA,CAAK,EAAsB,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXjE,QAAyBiE,EAAIE,cAAgBnE,QAAUiE,IAAQjE,OAAO3E,UAAY,gBAAkB4I,CAAK,EAAYD,EAAQC,EAAM,CAGtWymC,EASV,WACP,aAGA,SAASC,EAAOjtC,GACd,IAAK,IAAIzC,EAAI,EAAGA,EAAI0H,UAAUxH,OAAQF,IAAK,CACzC,IAAI2N,EAASjG,UAAU1H,GACvB,IAAK,IAAIuF,KAAOoI,EACdlL,EAAO8C,GAAOoI,EAAOpI,EAEzB,CACA,OAAO9C,CACT,CAkGA,IAAIktC,EA/EJ,SAASppC,EAAKqpC,EAAWC,GACvB,SAAShpC,EAAItB,EAAKN,EAAO6qC,GACvB,GAAwB,qBAAbnuC,SAAX,CAIkC,kBADlCmuC,EAAaJ,EAAO,CAAC,EAAGG,EAAmBC,IACrBl6B,UACpBk6B,EAAWl6B,QAAU,IAAIlG,KAAKA,KAAKC,MAA6B,MAArBmgC,EAAWl6B,UAEpDk6B,EAAWl6B,UACbk6B,EAAWl6B,QAAUk6B,EAAWl6B,QAAQm6B,eAE1CxqC,EAAMkP,mBAAmBlP,GAAK2G,QAAQ,uBAAwB6I,oBAAoB7I,QAAQ,QAAS8jC,QACnG,IAAIC,EAAwB,GAC5B,IAAK,IAAIC,KAAiBJ,EACnBA,EAAWI,KAGhBD,GAAyB,KAAOC,GACE,IAA9BJ,EAAWI,KAWfD,GAAyB,IAAMH,EAAWI,GAAe/6B,MAAM,KAAK,KAEtE,OAAOxT,SAASqT,OAASzP,EAAM,IAAMqqC,EAAUO,MAAMlrC,EAAOM,GAAO0qC,CA5BnE,CA6BF,CAuBA,OAAO9vC,OAAOmF,OAAO,CACnBuB,IAAKA,EACLhC,IAxBF,SAAaU,GACX,GAAwB,qBAAb5D,YAA4B+F,UAAUxH,QAAWqF,GAA5D,CAQA,IAFA,IAAI6qC,EAAUzuC,SAASqT,OAASrT,SAASqT,OAAOG,MAAM,MAAQ,GAC1Dk7B,EAAM,CAAC,EACFrwC,EAAI,EAAGA,EAAIowC,EAAQlwC,OAAQF,IAAK,CACvC,IAAI4b,EAAQw0B,EAAQpwC,GAAGmV,MAAM,KACzBlQ,EAAQ2W,EAAM3V,MAAM,GAAG0L,KAAK,KAChC,IACE,IAAI2+B,EAAWv7B,mBAAmB6G,EAAM,IAExC,GADAy0B,EAAIC,GAAYV,EAAUW,KAAKtrC,EAAOqrC,GAClC/qC,IAAQ+qC,EACV,KAEJ,CAAE,MAAOpvC,GAAI,CACf,CACA,OAAOqE,EAAM8qC,EAAI9qC,GAAO8qC,CAjBxB,CAkBF,EAIE/5B,OAAQ,SAAgB/Q,EAAKuqC,GAC3BjpC,EAAItB,EAAK,GAAImqC,EAAO,CAAC,EAAGI,EAAY,CAClCl6B,SAAU,IAEd,EACA46B,eAAgB,SAAwBV,GACtC,OAAOvpC,EAAK2G,KAAK0iC,UAAWF,EAAO,CAAC,EAAGxiC,KAAK4iC,WAAYA,GAC1D,EACAW,cAAe,SAAuBb,GACpC,OAAOrpC,EAAKmpC,EAAO,CAAC,EAAGxiC,KAAK0iC,UAAWA,GAAY1iC,KAAK4iC,WAC1D,GACC,CACDA,WAAY,CACV7qC,MAAO9E,OAAOuwC,OAAOb,IAEvBD,UAAW,CACT3qC,MAAO9E,OAAOuwC,OAAOd,KAG3B,CACUrpC,CA9Fa,CACrBgqC,KAAM,SAActrC,GAIlB,MAHiB,MAAbA,EAAM,KACRA,EAAQA,EAAMgB,MAAM,GAAI,IAEnBhB,EAAMiH,QAAQ,mBAAoB6I,mBAC3C,EACAo7B,MAAO,SAAelrC,GACpB,OAAOwP,mBAAmBxP,GAAOiH,QAAQ,2CAA4C6I,mBACvF,GAqF+B,CAC/B47B,KAAM,MAIR,OAAOhB,CACT,EA5HwE,WAAtB5mC,EAAQhI,IAA4C,qBAAXC,EAAyBA,EAAOD,QAAU0uC,SAAuE,2BAAd,KAAc,iC","file":"js/application-d1f9fea0f6e405203f39.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t9: 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t9: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"10\":\"header-menu\",\"11\":\"scholarship-app\",\"13\":\"vendors~scholarship-app\"}[chunkId]||chunkId) + \"-\" + {\"0\":\"7bcc94985626f03b5884\",\"1\":\"b0198736da3cc1c3336f\",\"2\":\"18491c744e9b900f692a\",\"3\":\"520d59eab6036a166b1b\",\"4\":\"9b7d05f1126550754c42\",\"5\":\"e2d6a105398624c2ebb8\",\"6\":\"1caf1023c6c0c88c9bc2\",\"7\":\"987e1b77e568272819a1\",\"10\":\"6af55b1097ff4e691cab\",\"11\":\"4d4fd7ed919343d17338\",\"13\":\"eaba3db1057a0176f75f\",\"14\":\"375d37f4900ec987ebd1\",\"15\":\"46456922fa942b403c2a\",\"16\":\"08685ee4720a46a07bb5\",\"17\":\"8f94288345b024cd47a8\",\"18\":\"e6fc8f575a02f72ee62e\",\"19\":\"4cbe4d0ef77f73c281e1\",\"20\":\"74aef5c10f3647749fa4\",\"21\":\"a982534a6b817eda7463\",\"22\":\"48ac1f40cad927914a4d\",\"23\":\"2b08e6340d5794477d6d\",\"24\":\"ff8ec18ca6498c9bcf05\",\"25\":\"b8c23260ecea93968adc\",\"26\":\"786bdbd7f253d4831e2c\",\"27\":\"b468a19f82138f23b69b\",\"28\":\"064c4f63f0bcce460141\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"1\":1,\"2\":1,\"5\":1,\"6\":1,\"11\":1,\"15\":1,\"16\":1,\"17\":1,\"18\":1,\"19\":1,\"20\":1,\"21\":1,\"22\":1,\"23\":1,\"24\":1,\"25\":1,\"26\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"10\":\"header-menu\",\"11\":\"scholarship-app\",\"13\":\"vendors~scholarship-app\"}[chunkId]||chunkId) + \"-\" + {\"0\":\"31d6cfe0\",\"1\":\"f026f77b\",\"2\":\"c831c510\",\"3\":\"31d6cfe0\",\"4\":\"31d6cfe0\",\"5\":\"c57ab829\",\"6\":\"00e3321b\",\"7\":\"31d6cfe0\",\"10\":\"31d6cfe0\",\"11\":\"33e1b139\",\"13\":\"31d6cfe0\",\"14\":\"31d6cfe0\",\"15\":\"69ab8670\",\"16\":\"a8bebb40\",\"17\":\"c615580a\",\"18\":\"85a9c765\",\"19\":\"02deee80\",\"20\":\"3b533475\",\"21\":\"8db316ac\",\"22\":\"32fda3c5\",\"23\":\"593bec8d\",\"24\":\"8419eb9e\",\"25\":\"0ba0211c\",\"26\":\"9cf99d2e\",\"27\":\"31d6cfe0\",\"28\":\"31d6cfe0\"}[chunkId] + \".chunk.css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://assets.apply.risefortheworld.org/packs/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 222);\n","/*\n *\n * @file analytics\n * Code for handling our google tag manager instance\n * Note that dataLayer pushes occur in other places (ScholarshipApplication.js)\n */\n\nimport Cookies from \"js-cookie\";\nimport mixpanel from \"mixpanel-browser\";\n\nconst setupMixpanel = function () {\n const MixpanelToken = window.mixpanel_token || false;\n\n if (MixpanelToken) {\n mixpanel.init(MixpanelToken, { debug: window.mix_panel_debug || false });\n if (window.mixpanel_identify) {\n mixpanel.identify(window.mixpanel_identify);\n mixpanel.people.set(\"email\", window.mixpanel_email);\n }\n }\n};\n\n/*\n *\n * We need the client_id from the Gtag so that it can be sent to the back end via a cookie.\n * gtag.js doesn't support event callbacks so we'll poll for 5 seconds or until the client_id is found\n *\n */\nconst setCookiesForMeasurementProtocol = function () {\n const GTAG_POLL_MAX_EXECUTIONS = 10;\n\n /**\n *\n * Starts polling if we have a measurement_id\n *\n */\n function maybe_start_polling() {\n if (typeof window.ga_measurement_id != \"undefined\") {\n window.__rise_gtm_poll = setInterval(fetch_client_id, 500);\n window.__rise_gtm_poll_ex = 0;\n }\n }\n\n /**\n *\n * Worker function that checks for the client_id in the dataLayer\n * and unsets the interval if it finds it\n *\n */\n function fetch_client_id() {\n if (window.__rise_gtm_poll_ex > GTAG_POLL_MAX_EXECUTIONS) {\n clearInterval(window.__rise_gtm_poll);\n console.warn(\"gtag.js client_id not found after \" + GTAG_POLL_MAX_EXECUTIONS + \" attempts\");\n return;\n } else {\n window.__rise_gtm_poll_ex += 1;\n }\n\n if (typeof window.dataLayer != \"undefined\") {\n clearInterval(window.__rise_gtm_poll);\n (function () {\n window.dataLayer.push(arguments);\n })(\"get\", window.ga_measurement_id, \"client_id\", (id) => set_cookie_client_id(id));\n }\n }\n\n /*\n *\n * Create ga_client_id cookie with the ID value if the cookie was not created before\n *\n */\n function set_cookie_client_id(id) {\n const ga_client_id = Cookies.get(\"ga_client_id\");\n if (!ga_client_id) {\n Cookies.set(\"ga_client_id\", id);\n }\n // Also set ga_debug_mode\n if (typeof window.ga_debug_mode != \"undefined\") {\n if (window.ga_debug_mode) {\n Cookies.set(\"ga_debug_mode\", \"1\");\n } else {\n Cookies.set(\"ga_debug_mode\", \"0\");\n }\n }\n }\n\n // Bootstrap the polling\n if (document.readyState === \"complete\") {\n maybe_start_polling();\n } else {\n window.addEventListener(\"DOMContentLoaded\", maybe_start_polling);\n }\n\n window.setGtmPreviewCookie = function (cookieValue) {\n Cookies.set(\"ga_server_preview\", cookieValue);\n return \"Set ga_server_preview cookie to \" + cookieValue;\n };\n};\n\n/*\n Our FAQ accordions need to be instrumented. When expanded, we will\n send the select_content event to the dataLayer including the innerText of the\n clicked accordion title as the content_id. The content_type is 'faq'.\n*/\nconst listenForFAQEvents = function () {\n // attach event listener to the document and listen for clicks\n // on elements with data attribute data-ga-event=\"select_content\"\n // but only send the dataLayer event if the parent node has classs\n // faqs__item--expanded or\n\n document.addEventListener(\"click\", function (event) {\n if (event.target.dataset.gaEvent === \"faq\") {\n if (event.target.parentNode.classList.contains(\"faqs__item--expanded\")) {\n pushSelectContentEvent(\"faq\", event.target.innerText);\n }\n }\n if (event.target.matches(\".essay-question__resources a\")) {\n pushSelectContentEvent(\"resources\", event.target.innerText);\n }\n });\n};\n\nconst pushSelectContentEvent = function (content_type, content_id) {\n console.log(`select_content: ${content_type}: ${content_id}`);\n if (typeof window.dataLayer === \"undefined\") {\n return;\n }\n window.dataLayer.push({\n event: \"select_content\",\n content_type: content_type,\n content_id: content_id,\n });\n};\n\nexport { listenForFAQEvents, pushSelectContentEvent, setCookiesForMeasurementProtocol, setupMixpanel };\n","'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\nvar Config = {\n DEBUG: false,\n LIB_VERSION: '2.42.0'\n};\n\n// since es6 imports are static and we run unit tests from the console, window won't be defined when importing this file\nvar window$1;\nif (typeof window === 'undefined') {\n var loc = {\n hostname: ''\n };\n window$1 = {\n navigator: {\n userAgent: ''\n },\n document: {\n location: loc,\n referrer: ''\n },\n screen: {\n width: 0,\n height: 0\n },\n location: loc\n };\n} else {\n window$1 = window;\n}\n\n/*\n * Saved references to long variable names, so that closure compiler can\n * minimize file size.\n */\n\nvar ArrayProto = Array.prototype;\nvar FuncProto = Function.prototype;\nvar ObjProto = Object.prototype;\nvar slice = ArrayProto.slice;\nvar toString = ObjProto.toString;\nvar hasOwnProperty = ObjProto.hasOwnProperty;\nvar windowConsole = window$1.console;\nvar navigator$1 = window$1.navigator;\nvar document$1 = window$1.document;\nvar windowOpera = window$1.opera;\nvar screen = window$1.screen;\nvar userAgent = navigator$1.userAgent;\nvar nativeBind = FuncProto.bind;\nvar nativeForEach = ArrayProto.forEach;\nvar nativeIndexOf = ArrayProto.indexOf;\nvar nativeMap = ArrayProto.map;\nvar nativeIsArray = Array.isArray;\nvar breaker = {};\nvar _ = {\n trim: function trim(str) {\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n};\n\n// Console override\nvar console = {\n /** @type {function(...*)} */\n log: function log() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n try {\n windowConsole.log.apply(windowConsole, arguments);\n } catch (err) {\n _.each(arguments, function (arg) {\n windowConsole.log(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n warn: function warn() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel warning:'].concat(_.toArray(arguments));\n try {\n windowConsole.warn.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function (arg) {\n windowConsole.warn(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n error: function error() {\n if (Config.DEBUG && !_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel error:'].concat(_.toArray(arguments));\n try {\n windowConsole.error.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function (arg) {\n windowConsole.error(arg);\n });\n }\n }\n },\n /** @type {function(...*)} */\n critical: function critical() {\n if (!_.isUndefined(windowConsole) && windowConsole) {\n var args = ['Mixpanel error:'].concat(_.toArray(arguments));\n try {\n windowConsole.error.apply(windowConsole, args);\n } catch (err) {\n _.each(args, function (arg) {\n windowConsole.error(arg);\n });\n }\n }\n }\n};\nvar log_func_with_prefix = function log_func_with_prefix(func, prefix) {\n return function () {\n arguments[0] = '[' + prefix + '] ' + arguments[0];\n return func.apply(console, arguments);\n };\n};\nvar console_with_prefix = function console_with_prefix(prefix) {\n return {\n log: log_func_with_prefix(console.log, prefix),\n error: log_func_with_prefix(console.error, prefix),\n critical: log_func_with_prefix(console.critical, prefix)\n };\n};\n\n// UNDERSCORE\n// Embed part of the Underscore Library\n_.bind = function (func, context) {\n var args, _bound;\n if (nativeBind && func.bind === nativeBind) {\n return nativeBind.apply(func, slice.call(arguments, 1));\n }\n if (!_.isFunction(func)) {\n throw new TypeError();\n }\n args = slice.call(arguments, 2);\n _bound = function bound() {\n if (!(this instanceof _bound)) {\n return func.apply(context, args.concat(slice.call(arguments)));\n }\n var ctor = {};\n ctor.prototype = func.prototype;\n var self = new ctor();\n ctor.prototype = null;\n var result = func.apply(self, args.concat(slice.call(arguments)));\n if (Object(result) === result) {\n return result;\n }\n return self;\n };\n return _bound;\n};\n_.bind_instance_methods = function (obj) {\n for (var func in obj) {\n if (typeof obj[func] === 'function') {\n obj[func] = _.bind(obj[func], obj);\n }\n }\n};\n\n/**\n * @param {*=} obj\n * @param {function(...*)=} iterator\n * @param {Object=} context\n */\n_.each = function (obj, iterator, context) {\n if (obj === null || obj === undefined) {\n return;\n }\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, l = obj.length; i < l; i++) {\n if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) {\n return;\n }\n }\n } else {\n for (var key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n if (iterator.call(context, obj[key], key, obj) === breaker) {\n return;\n }\n }\n }\n }\n};\n_.escapeHTML = function (s) {\n var escaped = s;\n if (escaped && _.isString(escaped)) {\n escaped = escaped.replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"').replace(/'/g, ''');\n }\n return escaped;\n};\n_.extend = function (obj) {\n _.each(slice.call(arguments, 1), function (source) {\n for (var prop in source) {\n if (source[prop] !== void 0) {\n obj[prop] = source[prop];\n }\n }\n });\n return obj;\n};\n_.isArray = nativeIsArray || function (obj) {\n return toString.call(obj) === '[object Array]';\n};\n\n// from a comment on http://dbj.org/dbj/?p=286\n// fails on only one very rare and deliberate custom object:\n// var bomb = { toString : undefined, valueOf: function(o) { return \"function BOMBA!\"; }};\n_.isFunction = function (f) {\n try {\n return /^\\s*\\bfunction\\b/.test(f);\n } catch (x) {\n return false;\n }\n};\n_.isArguments = function (obj) {\n return !!(obj && hasOwnProperty.call(obj, 'callee'));\n};\n_.toArray = function (iterable) {\n if (!iterable) {\n return [];\n }\n if (iterable.toArray) {\n return iterable.toArray();\n }\n if (_.isArray(iterable)) {\n return slice.call(iterable);\n }\n if (_.isArguments(iterable)) {\n return slice.call(iterable);\n }\n return _.values(iterable);\n};\n_.map = function (arr, callback, context) {\n if (nativeMap && arr.map === nativeMap) {\n return arr.map(callback, context);\n } else {\n var results = [];\n _.each(arr, function (item) {\n results.push(callback.call(context, item));\n });\n return results;\n }\n};\n_.keys = function (obj) {\n var results = [];\n if (obj === null) {\n return results;\n }\n _.each(obj, function (value, key) {\n results[results.length] = key;\n });\n return results;\n};\n_.values = function (obj) {\n var results = [];\n if (obj === null) {\n return results;\n }\n _.each(obj, function (value) {\n results[results.length] = value;\n });\n return results;\n};\n_.include = function (obj, target) {\n var found = false;\n if (obj === null) {\n return found;\n }\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) {\n return obj.indexOf(target) != -1;\n }\n _.each(obj, function (value) {\n if (found || (found = value === target)) {\n return breaker;\n }\n });\n return found;\n};\n_.includes = function (str, needle) {\n return str.indexOf(needle) !== -1;\n};\n\n// Underscore Addons\n_.inherit = function (subclass, superclass) {\n subclass.prototype = new superclass();\n subclass.prototype.constructor = subclass;\n subclass.superclass = superclass.prototype;\n return subclass;\n};\n_.isObject = function (obj) {\n return obj === Object(obj) && !_.isArray(obj);\n};\n_.isEmptyObject = function (obj) {\n if (_.isObject(obj)) {\n for (var key in obj) {\n if (hasOwnProperty.call(obj, key)) {\n return false;\n }\n }\n return true;\n }\n return false;\n};\n_.isUndefined = function (obj) {\n return obj === void 0;\n};\n_.isString = function (obj) {\n return toString.call(obj) == '[object String]';\n};\n_.isDate = function (obj) {\n return toString.call(obj) == '[object Date]';\n};\n_.isNumber = function (obj) {\n return toString.call(obj) == '[object Number]';\n};\n_.isElement = function (obj) {\n return !!(obj && obj.nodeType === 1);\n};\n_.encodeDates = function (obj) {\n _.each(obj, function (v, k) {\n if (_.isDate(v)) {\n obj[k] = _.formatDate(v);\n } else if (_.isObject(v)) {\n obj[k] = _.encodeDates(v); // recurse\n }\n });\n\n return obj;\n};\n_.timestamp = function () {\n Date.now = Date.now || function () {\n return +new Date();\n };\n return Date.now();\n};\n_.formatDate = function (d) {\n // YYYY-MM-DDTHH:MM:SS in UTC\n function pad(n) {\n return n < 10 ? '0' + n : n;\n }\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds());\n};\n_.safewrap = function (f) {\n return function () {\n try {\n return f.apply(this, arguments);\n } catch (e) {\n console.critical('Implementation error. Please turn on debug and contact support@mixpanel.com.');\n if (Config.DEBUG) {\n console.critical(e);\n }\n }\n };\n};\n_.safewrap_class = function (klass, functions) {\n for (var i = 0; i < functions.length; i++) {\n klass.prototype[functions[i]] = _.safewrap(klass.prototype[functions[i]]);\n }\n};\n_.safewrap_instance_methods = function (obj) {\n for (var func in obj) {\n if (typeof obj[func] === 'function') {\n obj[func] = _.safewrap(obj[func]);\n }\n }\n};\n_.strip_empty_properties = function (p) {\n var ret = {};\n _.each(p, function (v, k) {\n if (_.isString(v) && v.length > 0) {\n ret[k] = v;\n }\n });\n return ret;\n};\n\n/*\n * this function returns a copy of object after truncating it. If\n * passed an Array or Object it will iterate through obj and\n * truncate all the values recursively.\n */\n_.truncate = function (obj, length) {\n var ret;\n if (typeof obj === 'string') {\n ret = obj.slice(0, length);\n } else if (_.isArray(obj)) {\n ret = [];\n _.each(obj, function (val) {\n ret.push(_.truncate(val, length));\n });\n } else if (_.isObject(obj)) {\n ret = {};\n _.each(obj, function (val, key) {\n ret[key] = _.truncate(val, length);\n });\n } else {\n ret = obj;\n }\n return ret;\n};\n_.JSONEncode = function () {\n return function (mixed_val) {\n var value = mixed_val;\n var quote = function quote(string) {\n var escapable = /[\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g; // eslint-disable-line no-control-regex\n var meta = {\n // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n };\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string' ? c : \"\\\\u\" + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n };\n var str = function str(key, holder) {\n var gap = '';\n var indent = ' ';\n var i = 0; // The loop counter.\n var k = ''; // The member key.\n var v = ''; // The member value.\n var length = 0;\n var mind = gap;\n var partial = [];\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n if (value && _typeof(value) === 'object' && typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n // What happens next depends on the value's type.\n switch (_typeof(value)) {\n case 'string':\n return quote(value);\n case 'number':\n // JSON numbers must be finite. Encode non-finite numbers as null.\n return isFinite(value) ? String(value) : 'null';\n case 'boolean':\n case 'null':\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce 'null'. The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n case 'object':\n // If the type is 'object', we might be dealing with an object or an array or\n // null.\n // Due to a specification blunder in ECMAScript, typeof null is 'object',\n // so watch out for that case.\n if (!value) {\n return 'null';\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n gap += indent;\n partial = [];\n\n // Is the value an array?\n if (toString.apply(value) === '[object Array]') {\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n v = partial.length === 0 ? '[]' : gap ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n // Iterate through all of the keys in the object.\n for (k in value) {\n if (hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n v = partial.length === 0 ? '{}' : gap ? '{' + partial.join(',') + '' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n };\n\n // Make a fake root object containing our value under the key of ''.\n // Return the result of stringifying the value.\n return str('', {\n '': value\n });\n };\n}();\n\n/**\n * From https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n * Slightly modified to throw a real Error rather than a POJO\n */\n_.JSONDecode = function () {\n var at,\n // The index of the current character\n ch,\n // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n 'b': '\\b',\n 'f': '\\f',\n 'n': '\\n',\n 'r': '\\r',\n 't': '\\t'\n },\n text,\n error = function error(m) {\n var e = new SyntaxError(m);\n e.at = at;\n e.text = text;\n throw e;\n },\n next = function next(c) {\n // If a c parameter is provided, verify that it matches the current character.\n if (c && c !== ch) {\n error('Expected \\'' + c + '\\' instead of \\'' + ch + '\\'');\n }\n // Get the next character. When there are no more characters,\n // return the empty string.\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function number() {\n // Parse a number value.\n var number,\n string = '';\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n return number;\n }\n },\n string = function string() {\n // Parse a string value.\n var hex,\n i,\n string = '',\n uffff;\n // When parsing for string values, we must look for \" and \\ characters.\n if (ch === '\"') {\n while (next()) {\n if (ch === '\"') {\n next();\n return string;\n }\n if (ch === '\\\\') {\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n } else {\n string += ch;\n }\n }\n }\n error('Bad string');\n },\n white = function white() {\n // Skip whitespace.\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function word() {\n // true, false, or null.\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error('Unexpected \"' + ch + '\"');\n },\n value,\n // Placeholder for the value function.\n array = function array() {\n // Parse an array value.\n var array = [];\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function object() {\n // Parse an object value.\n var key,\n object = {};\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n\n while (ch) {\n key = string();\n white();\n next(':');\n if (Object.hasOwnProperty.call(object, key)) {\n error('Duplicate key \"' + key + '\"');\n }\n object[key] = value();\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n value = function value() {\n // Parse a JSON value. It could be an object, an array, a string,\n // a number, or a word.\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the\n // above functions and variables.\n return function (source) {\n var result;\n text = source;\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n return result;\n };\n}();\n_.base64Encode = function (data) {\n var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var o1,\n o2,\n o3,\n h1,\n h2,\n h3,\n h4,\n bits,\n i = 0,\n ac = 0,\n enc = '',\n tmp_arr = [];\n if (!data) {\n return data;\n }\n data = _.utf8Encode(data);\n do {\n // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n bits = o1 << 16 | o2 << 8 | o3;\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n enc = tmp_arr.join('');\n switch (data.length % 3) {\n case 1:\n enc = enc.slice(0, -2) + '==';\n break;\n case 2:\n enc = enc.slice(0, -1) + '=';\n break;\n }\n return enc;\n};\n_.utf8Encode = function (string) {\n string = (string + '').replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n var utftext = '',\n start,\n end;\n var stringl = 0,\n n;\n start = end = 0;\n stringl = string.length;\n for (n = 0; n < stringl; n++) {\n var c1 = string.charCodeAt(n);\n var enc = null;\n if (c1 < 128) {\n end++;\n } else if (c1 > 127 && c1 < 2048) {\n enc = String.fromCharCode(c1 >> 6 | 192, c1 & 63 | 128);\n } else {\n enc = String.fromCharCode(c1 >> 12 | 224, c1 >> 6 & 63 | 128, c1 & 63 | 128);\n }\n if (enc !== null) {\n if (end > start) {\n utftext += string.substring(start, end);\n }\n utftext += enc;\n start = end = n + 1;\n }\n }\n if (end > start) {\n utftext += string.substring(start, string.length);\n }\n return utftext;\n};\n_.UUID = function () {\n // Time/ticks information\n // 1*new Date() is a cross browser version of Date.now()\n var T = function T() {\n var d = 1 * new Date(),\n i = 0;\n\n // this while loop figures how many browser ticks go by\n // before 1*new Date() returns a new number, ie the amount\n // of ticks that go by per millisecond\n while (d == 1 * new Date()) {\n i++;\n }\n return d.toString(16) + i.toString(16);\n };\n\n // Math.Random entropy\n var R = function R() {\n return Math.random().toString(16).replace('.', '');\n };\n\n // User agent entropy\n // This function takes the user agent string, and then xors\n // together each sequence of 8 bytes. This produces a final\n // sequence of 8 bytes which it returns as hex.\n var UA = function UA() {\n var ua = userAgent,\n i,\n ch,\n buffer = [],\n ret = 0;\n function xor(result, byte_array) {\n var j,\n tmp = 0;\n for (j = 0; j < byte_array.length; j++) {\n tmp |= buffer[j] << j * 8;\n }\n return result ^ tmp;\n }\n for (i = 0; i < ua.length; i++) {\n ch = ua.charCodeAt(i);\n buffer.unshift(ch & 0xFF);\n if (buffer.length >= 4) {\n ret = xor(ret, buffer);\n buffer = [];\n }\n }\n if (buffer.length > 0) {\n ret = xor(ret, buffer);\n }\n return ret.toString(16);\n };\n return function () {\n var se = (screen.height * screen.width).toString(16);\n return T() + '-' + R() + '-' + UA() + '-' + se + '-' + T();\n };\n}();\n\n// _.isBlockedUA()\n// This is to block various web spiders from executing our JS and\n// sending false tracking data\nvar BLOCKED_UA_STRS = ['baiduspider', 'bingbot', 'bingpreview', 'facebookexternal', 'pinterest', 'screaming frog', 'yahoo! slurp', 'yandexbot',\n// a whole bunch of goog-specific crawlers\n// https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers\n'adsbot-google', 'apis-google', 'duplexweb-google', 'feedfetcher-google', 'google favicon', 'google web preview', 'google-read-aloud', 'googlebot', 'googleweblight', 'mediapartners-google', 'storebot-google'];\n_.isBlockedUA = function (ua) {\n var i;\n ua = ua.toLowerCase();\n for (i = 0; i < BLOCKED_UA_STRS.length; i++) {\n if (ua.indexOf(BLOCKED_UA_STRS[i]) !== -1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @param {Object=} formdata\n * @param {string=} arg_separator\n */\n_.HTTPBuildQuery = function (formdata, arg_separator) {\n var use_val,\n use_key,\n tmp_arr = [];\n if (_.isUndefined(arg_separator)) {\n arg_separator = '&';\n }\n _.each(formdata, function (val, key) {\n use_val = encodeURIComponent(val.toString());\n use_key = encodeURIComponent(key);\n tmp_arr[tmp_arr.length] = use_key + '=' + use_val;\n });\n return tmp_arr.join(arg_separator);\n};\n_.getQueryParam = function (url, param) {\n // Expects a raw URL\n\n param = param.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n var regexS = '[\\\\?&]' + param + '=([^]*)',\n regex = new RegExp(regexS),\n results = regex.exec(url);\n if (results === null || results && typeof results[1] !== 'string' && results[1].length) {\n return '';\n } else {\n var result = results[1];\n try {\n result = decodeURIComponent(result);\n } catch (err) {\n console.error('Skipping decoding for malformed query param: ' + result);\n }\n return result.replace(/\\+/g, ' ');\n }\n};\n\n// _.cookie\n// Methods partially borrowed from quirksmode.org/js/cookies.html\n_.cookie = {\n get: function get(name) {\n var nameEQ = name + '=';\n var ca = document$1.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n },\n parse: function parse(name) {\n var cookie;\n try {\n cookie = _.JSONDecode(_.cookie.get(name)) || {};\n } catch (err) {\n // noop\n }\n return cookie;\n },\n set_seconds: function set_seconds(name, value, seconds, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document$1.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n if (seconds) {\n var date = new Date();\n date.setTime(date.getTime() + seconds * 1000);\n expires = '; expires=' + date.toGMTString();\n }\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n document$1.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n },\n set: function set(name, value, days, is_cross_subdomain, is_secure, is_cross_site, domain_override) {\n var cdomain = '',\n expires = '',\n secure = '';\n if (domain_override) {\n cdomain = '; domain=' + domain_override;\n } else if (is_cross_subdomain) {\n var domain = extract_domain(document$1.location.hostname);\n cdomain = domain ? '; domain=.' + domain : '';\n }\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = '; expires=' + date.toGMTString();\n }\n if (is_cross_site) {\n is_secure = true;\n secure = '; SameSite=None';\n }\n if (is_secure) {\n secure += '; secure';\n }\n var new_cookie_val = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;\n document$1.cookie = new_cookie_val;\n return new_cookie_val;\n },\n remove: function remove(name, is_cross_subdomain, domain_override) {\n _.cookie.set(name, '', -1, is_cross_subdomain, false, false, domain_override);\n }\n};\nvar _localStorageSupported = null;\nvar localStorageSupported = function localStorageSupported(storage, forceCheck) {\n if (_localStorageSupported !== null && !forceCheck) {\n return _localStorageSupported;\n }\n var supported = true;\n try {\n storage = storage || window.localStorage;\n var key = '__mplss_' + cheap_guid(8),\n val = 'xyz';\n storage.setItem(key, val);\n if (storage.getItem(key) !== val) {\n supported = false;\n }\n storage.removeItem(key);\n } catch (err) {\n supported = false;\n }\n _localStorageSupported = supported;\n return supported;\n};\n\n// _.localStorage\n_.localStorage = {\n is_supported: function is_supported(force_check) {\n var supported = localStorageSupported(null, force_check);\n if (!supported) {\n console.error('localStorage unsupported; falling back to cookie store');\n }\n return supported;\n },\n error: function error(msg) {\n console.error('localStorage error: ' + msg);\n },\n get: function get(name) {\n try {\n return window.localStorage.getItem(name);\n } catch (err) {\n _.localStorage.error(err);\n }\n return null;\n },\n parse: function parse(name) {\n try {\n return _.JSONDecode(_.localStorage.get(name)) || {};\n } catch (err) {\n // noop\n }\n return null;\n },\n set: function set(name, value) {\n try {\n window.localStorage.setItem(name, value);\n } catch (err) {\n _.localStorage.error(err);\n }\n },\n remove: function remove(name) {\n try {\n window.localStorage.removeItem(name);\n } catch (err) {\n _.localStorage.error(err);\n }\n }\n};\n_.register_event = function () {\n // written by Dean Edwards, 2005\n // with input from Tino Zijdel - crisp@xs4all.nl\n // with input from Carl Sverre - mail@carlsverre.com\n // with input from Mixpanel\n // http://dean.edwards.name/weblog/2005/10/add-event/\n // https://gist.github.com/1930440\n\n /**\n * @param {Object} element\n * @param {string} type\n * @param {function(...*)} handler\n * @param {boolean=} oldSchool\n * @param {boolean=} useCapture\n */\n var register_event = function register_event(element, type, handler, oldSchool, useCapture) {\n if (!element) {\n console.error('No valid element provided to register_event');\n return;\n }\n if (element.addEventListener && !oldSchool) {\n element.addEventListener(type, handler, !!useCapture);\n } else {\n var ontype = 'on' + type;\n var old_handler = element[ontype]; // can be undefined\n element[ontype] = makeHandler(element, handler, old_handler);\n }\n };\n function makeHandler(element, new_handler, old_handlers) {\n var handler = function handler(event) {\n event = event || fixEvent(window.event);\n\n // this basically happens in firefox whenever another script\n // overwrites the onload callback and doesn't pass the event\n // object to previously defined callbacks. All the browsers\n // that don't define window.event implement addEventListener\n // so the dom_loaded handler will still be fired as usual.\n if (!event) {\n return undefined;\n }\n var ret = true;\n var old_result, new_result;\n if (_.isFunction(old_handlers)) {\n old_result = old_handlers(event);\n }\n new_result = new_handler.call(element, event);\n if (false === old_result || false === new_result) {\n ret = false;\n }\n return ret;\n };\n return handler;\n }\n function fixEvent(event) {\n if (event) {\n event.preventDefault = fixEvent.preventDefault;\n event.stopPropagation = fixEvent.stopPropagation;\n }\n return event;\n }\n fixEvent.preventDefault = function () {\n this.returnValue = false;\n };\n fixEvent.stopPropagation = function () {\n this.cancelBubble = true;\n };\n return register_event;\n}();\nvar TOKEN_MATCH_REGEX = new RegExp('^(\\\\w*)\\\\[(\\\\w+)([=~\\\\|\\\\^\\\\$\\\\*]?)=?\"?([^\\\\]\"]*)\"?\\\\]$');\n_.dom_query = function () {\n /* document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n elements = document.getElementsBySelector('div#main p a.external')\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n Version 0.5 - Carl Sverre, Jan 7th 2013\n -- Now uses jQuery-esque `hasClass` for testing class name\n equality. This fixes a bug related to '-' characters being\n considered not part of a 'word' in regex.\n */\n\n function getAllChildren(e) {\n // Returns all children of element. Workaround required for IE5/Windows. Ugh.\n return e.all ? e.all : e.getElementsByTagName('*');\n }\n var bad_whitespace = /[\\t\\r\\n]/g;\n function hasClass(elem, selector) {\n var className = ' ' + selector + ' ';\n return (' ' + elem.className + ' ').replace(bad_whitespace, ' ').indexOf(className) >= 0;\n }\n function getElementsBySelector(selector) {\n // Attempt to fail gracefully in lesser browsers\n if (!document$1.getElementsByTagName) {\n return [];\n }\n // Split selector in to tokens\n var tokens = selector.split(' ');\n var token, bits, tagName, found, foundCount, i, j, k, elements, currentContextIndex;\n var currentContext = [document$1];\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i].replace(/^\\s+/, '').replace(/\\s+$/, '');\n if (token.indexOf('#') > -1) {\n // Token is an ID selector\n bits = token.split('#');\n tagName = bits[0];\n var id = bits[1];\n var element = document$1.getElementById(id);\n if (!element || tagName && element.nodeName.toLowerCase() != tagName) {\n // element not found or tag with that ID not found, return false\n return [];\n }\n // Set currentContext to contain just this element\n currentContext = [element];\n continue; // Skip to next token\n }\n\n if (token.indexOf('.') > -1) {\n // Token contains a class selector\n bits = token.split('.');\n tagName = bits[0];\n var className = bits[1];\n if (!tagName) {\n tagName = '*';\n }\n // Get elements matching tag, filter them for class selector\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (found[j].className && _.isString(found[j].className) &&\n // some SVG elements have classNames which are not strings\n hasClass(found[j], className)) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n continue; // Skip to next token\n }\n // Code to deal with attribute selectors\n var token_match = token.match(TOKEN_MATCH_REGEX);\n if (token_match) {\n tagName = token_match[1];\n var attrName = token_match[2];\n var attrOperator = token_match[3];\n var attrValue = token_match[4];\n if (!tagName) {\n tagName = '*';\n }\n // Grab all of the tagName elements within current context\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n if (tagName == '*') {\n elements = getAllChildren(currentContext[j]);\n } else {\n elements = currentContext[j].getElementsByTagName(tagName);\n }\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = [];\n currentContextIndex = 0;\n var checkFunction; // This function will be used to filter the elements\n switch (attrOperator) {\n case '=':\n // Equality\n checkFunction = function checkFunction(e) {\n return e.getAttribute(attrName) == attrValue;\n };\n break;\n case '~':\n // Match one of space seperated words\n checkFunction = function checkFunction(e) {\n return e.getAttribute(attrName).match(new RegExp('\\\\b' + attrValue + '\\\\b'));\n };\n break;\n case '|':\n // Match start with value followed by optional hyphen\n checkFunction = function checkFunction(e) {\n return e.getAttribute(attrName).match(new RegExp('^' + attrValue + '-?'));\n };\n break;\n case '^':\n // Match starts with value\n checkFunction = function checkFunction(e) {\n return e.getAttribute(attrName).indexOf(attrValue) === 0;\n };\n break;\n case '$':\n // Match ends with value - fails with \"Warning\" in Opera 7\n checkFunction = function checkFunction(e) {\n return e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length;\n };\n break;\n case '*':\n // Match ends with value\n checkFunction = function checkFunction(e) {\n return e.getAttribute(attrName).indexOf(attrValue) > -1;\n };\n break;\n default:\n // Just test for existence of attribute\n checkFunction = function checkFunction(e) {\n return e.getAttribute(attrName);\n };\n }\n currentContext = [];\n currentContextIndex = 0;\n for (j = 0; j < found.length; j++) {\n if (checkFunction(found[j])) {\n currentContext[currentContextIndex++] = found[j];\n }\n }\n // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);\n continue; // Skip to next token\n }\n // If we get here, token is JUST an element (not a class or ID selector)\n tagName = token;\n found = [];\n foundCount = 0;\n for (j = 0; j < currentContext.length; j++) {\n elements = currentContext[j].getElementsByTagName(tagName);\n for (k = 0; k < elements.length; k++) {\n found[foundCount++] = elements[k];\n }\n }\n currentContext = found;\n }\n return currentContext;\n }\n return function (query) {\n if (_.isElement(query)) {\n return [query];\n } else if (_.isObject(query) && !_.isUndefined(query.length)) {\n return query;\n } else {\n return getElementsBySelector.call(this, query);\n }\n };\n}();\n_.info = {\n campaignParams: function campaignParams() {\n var campaign_keywords = 'utm_source utm_medium utm_campaign utm_content utm_term'.split(' '),\n kw = '',\n params = {};\n _.each(campaign_keywords, function (kwkey) {\n kw = _.getQueryParam(document$1.URL, kwkey);\n if (kw.length) {\n params[kwkey] = kw;\n }\n });\n return params;\n },\n searchEngine: function searchEngine(referrer) {\n if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google';\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing';\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo';\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo';\n } else {\n return null;\n }\n },\n searchInfo: function searchInfo(referrer) {\n var search = _.info.searchEngine(referrer),\n param = search != 'yahoo' ? 'q' : 'p',\n ret = {};\n if (search !== null) {\n ret['$search_engine'] = search;\n var keyword = _.getQueryParam(referrer, param);\n if (keyword.length) {\n ret['mp_keyword'] = keyword;\n }\n }\n return ret;\n },\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function browser(user_agent, vendor, opera) {\n vendor = vendor || ''; // vendor is undefined for at least IE9\n if (opera || _.includes(user_agent, ' OPR/')) {\n if (_.includes(user_agent, 'Mini')) {\n return 'Opera Mini';\n }\n return 'Opera';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (_.includes(user_agent, 'IEMobile') || _.includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile';\n } else if (_.includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet';\n } else if (_.includes(user_agent, 'Edge') || _.includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge';\n } else if (_.includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile';\n } else if (_.includes(user_agent, 'Chrome')) {\n return 'Chrome';\n } else if (_.includes(user_agent, 'CriOS')) {\n return 'Chrome iOS';\n } else if (_.includes(user_agent, 'UCWEB') || _.includes(user_agent, 'UCBrowser')) {\n return 'UC Browser';\n } else if (_.includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS';\n } else if (_.includes(vendor, 'Apple')) {\n if (_.includes(user_agent, 'Mobile')) {\n return 'Mobile Safari';\n }\n return 'Safari';\n } else if (_.includes(user_agent, 'Android')) {\n return 'Android Mobile';\n } else if (_.includes(user_agent, 'Konqueror')) {\n return 'Konqueror';\n } else if (_.includes(user_agent, 'Firefox')) {\n return 'Firefox';\n } else if (_.includes(user_agent, 'MSIE') || _.includes(user_agent, 'Trident/')) {\n return 'Internet Explorer';\n } else if (_.includes(user_agent, 'Gecko')) {\n return 'Mozilla';\n } else {\n return '';\n }\n },\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function browserVersion(userAgent, vendor, opera) {\n var browser = _.info.browser(userAgent, vendor, opera);\n var versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n 'Chrome': /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser': /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n 'Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n 'Opera': /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n 'Firefox': /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n 'Konqueror': /Konqueror:(\\d+(\\.\\d+)?)/,\n 'BlackBerry': /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n 'Mozilla': /rv:(\\d+(\\.\\d+)?)/\n };\n var regex = versionRegexs[browser];\n if (regex === undefined) {\n return null;\n }\n var matches = userAgent.match(regex);\n if (!matches) {\n return null;\n }\n return parseFloat(matches[matches.length - 2]);\n },\n os: function os() {\n var a = userAgent;\n if (/Windows/i.test(a)) {\n if (/Phone/.test(a) || /WPDesktop/.test(a)) {\n return 'Windows Phone';\n }\n return 'Windows';\n } else if (/(iPhone|iPad|iPod)/.test(a)) {\n return 'iOS';\n } else if (/Android/.test(a)) {\n return 'Android';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(a)) {\n return 'BlackBerry';\n } else if (/Mac/i.test(a)) {\n return 'Mac OS X';\n } else if (/Linux/.test(a)) {\n return 'Linux';\n } else if (/CrOS/.test(a)) {\n return 'Chrome OS';\n } else {\n return '';\n }\n },\n device: function device(user_agent) {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone';\n } else if (/iPad/.test(user_agent)) {\n return 'iPad';\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch';\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone';\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry';\n } else if (/Android/.test(user_agent)) {\n return 'Android';\n } else {\n return '';\n }\n },\n referringDomain: function referringDomain(referrer) {\n var split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n },\n properties: function properties() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator$1.vendor, windowOpera),\n '$referrer': document$1.referrer,\n '$referring_domain': _.info.referringDomain(document$1.referrer),\n '$device': _.info.device(userAgent)\n }), {\n '$current_url': window$1.location.href,\n '$browser_version': _.info.browserVersion(userAgent, navigator$1.vendor, windowOpera),\n '$screen_height': screen.height,\n '$screen_width': screen.width,\n 'mp_lib': 'web',\n '$lib_version': Config.LIB_VERSION,\n '$insert_id': cheap_guid(),\n 'time': _.timestamp() / 1000 // epoch time in seconds\n });\n },\n\n people_properties: function people_properties() {\n return _.extend(_.strip_empty_properties({\n '$os': _.info.os(),\n '$browser': _.info.browser(userAgent, navigator$1.vendor, windowOpera)\n }), {\n '$browser_version': _.info.browserVersion(userAgent, navigator$1.vendor, windowOpera)\n });\n },\n pageviewInfo: function pageviewInfo(page) {\n return _.strip_empty_properties({\n 'mp_page': page,\n 'mp_referrer': document$1.referrer,\n 'mp_browser': _.info.browser(userAgent, navigator$1.vendor, windowOpera),\n 'mp_platform': _.info.os()\n });\n }\n};\nvar cheap_guid = function cheap_guid(maxlen) {\n var guid = Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10);\n return maxlen ? guid.substring(0, maxlen) : guid;\n};\n\n// naive way to extract domain name (example.com) from full hostname (my.sub.example.com)\nvar SIMPLE_DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]*\\.[a-z]+$/i;\n// this next one attempts to account for some ccSLDs, e.g. extracting oxford.ac.uk from www.oxford.ac.uk\nvar DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z.]{2,6}$/i;\n/**\n * Attempts to extract main domain name from full hostname, using a few blunt heuristics. For\n * common TLDs like .com/.org that always have a simple SLD.TLD structure (example.com), we\n * simply extract the last two .-separated parts of the hostname (SIMPLE_DOMAIN_MATCH_REGEX).\n * For others, we attempt to account for short ccSLD+TLD combos (.ac.uk) with the legacy\n * DOMAIN_MATCH_REGEX (kept to maintain backwards compatibility with existing Mixpanel\n * integrations). The only _reliable_ way to extract domain from hostname is with an up-to-date\n * list like at https://publicsuffix.org/ so for cases that this helper fails at, the SDK\n * offers the 'cookie_domain' config option to set it explicitly.\n * @example\n * extract_domain('my.sub.example.com')\n * // 'example.com'\n */\nvar extract_domain = function extract_domain(hostname) {\n var domain_regex = DOMAIN_MATCH_REGEX;\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n if (tld.length > 4 || tld === 'com' || tld === 'org') {\n domain_regex = SIMPLE_DOMAIN_MATCH_REGEX;\n }\n var matches = hostname.match(domain_regex);\n return matches ? matches[0] : '';\n};\nvar JSONStringify = null;\nvar JSONParse = null;\nif (typeof JSON !== 'undefined') {\n JSONStringify = JSON.stringify;\n JSONParse = JSON.parse;\n}\nJSONStringify = JSONStringify || _.JSONEncode;\nJSONParse = JSONParse || _.JSONDecode;\n\n// EXPORTS (for closure compiler)\n_['toArray'] = _.toArray;\n_['isObject'] = _.isObject;\n_['JSONEncode'] = _.JSONEncode;\n_['JSONDecode'] = _.JSONDecode;\n_['isBlockedUA'] = _.isBlockedUA;\n_['isEmptyObject'] = _.isEmptyObject;\n_['info'] = _.info;\n_['info']['device'] = _.info.device;\n_['info']['browser'] = _.info.browser;\n_['info']['browserVersion'] = _.info.browserVersion;\n_['info']['properties'] = _.info.properties;\n\n/**\n * DomTracker Object\n * @constructor\n */\nvar DomTracker = function DomTracker() {};\n\n// interface\nDomTracker.prototype.create_properties = function () {};\nDomTracker.prototype.event_handler = function () {};\nDomTracker.prototype.after_track_handler = function () {};\nDomTracker.prototype.init = function (mixpanel_instance) {\n this.mp = mixpanel_instance;\n return this;\n};\n\n/**\n * @param {Object|string} query\n * @param {string} event_name\n * @param {Object=} properties\n * @param {function=} user_callback\n */\nDomTracker.prototype.track = function (query, event_name, properties, user_callback) {\n var that = this;\n var elements = _.dom_query(query);\n if (elements.length === 0) {\n console.error('The DOM query (' + query + ') returned 0 elements');\n return;\n }\n _.each(elements, function (element) {\n _.register_event(element, this.override_event, function (e) {\n var options = {};\n var props = that.create_properties(properties, this);\n var timeout = that.mp.get_config('track_links_timeout');\n that.event_handler(e, this, options);\n\n // in case the mixpanel servers don't get back to us in time\n window.setTimeout(that.track_callback(user_callback, props, options, true), timeout);\n\n // fire the tracking event\n that.mp.track(event_name, props, that.track_callback(user_callback, props, options));\n });\n }, this);\n return true;\n};\n\n/**\n * @param {function} user_callback\n * @param {Object} props\n * @param {boolean=} timeout_occured\n */\nDomTracker.prototype.track_callback = function (user_callback, props, options, timeout_occured) {\n timeout_occured = timeout_occured || false;\n var that = this;\n return function () {\n // options is referenced from both callbacks, so we can have\n // a 'lock' of sorts to ensure only one fires\n if (options.callback_fired) {\n return;\n }\n options.callback_fired = true;\n if (user_callback && user_callback(timeout_occured, props) === false) {\n // user can prevent the default functionality by\n // returning false from their callback\n return;\n }\n that.after_track_handler(props, options, timeout_occured);\n };\n};\nDomTracker.prototype.create_properties = function (properties, element) {\n var props;\n if (typeof properties === 'function') {\n props = properties(element);\n } else {\n props = _.extend({}, properties);\n }\n return props;\n};\n\n/**\n * LinkTracker Object\n * @constructor\n * @extends DomTracker\n */\nvar LinkTracker = function LinkTracker() {\n this.override_event = 'click';\n};\n_.inherit(LinkTracker, DomTracker);\nLinkTracker.prototype.create_properties = function (properties, element) {\n var props = LinkTracker.superclass.create_properties.apply(this, arguments);\n if (element.href) {\n props['url'] = element.href;\n }\n return props;\n};\nLinkTracker.prototype.event_handler = function (evt, element, options) {\n options.new_tab = evt.which === 2 || evt.metaKey || evt.ctrlKey || element.target === '_blank';\n options.href = element.href;\n if (!options.new_tab) {\n evt.preventDefault();\n }\n};\nLinkTracker.prototype.after_track_handler = function (props, options) {\n if (options.new_tab) {\n return;\n }\n setTimeout(function () {\n window.location = options.href;\n }, 0);\n};\n\n/**\n * FormTracker Object\n * @constructor\n * @extends DomTracker\n */\nvar FormTracker = function FormTracker() {\n this.override_event = 'submit';\n};\n_.inherit(FormTracker, DomTracker);\nFormTracker.prototype.event_handler = function (evt, element, options) {\n options.element = element;\n evt.preventDefault();\n};\nFormTracker.prototype.after_track_handler = function (props, options) {\n setTimeout(function () {\n options.element.submit();\n }, 0);\n};\n\n// eslint-disable-line camelcase\n\nvar logger$2 = console_with_prefix('lock');\n\n/**\n * SharedLock: a mutex built on HTML5 localStorage, to ensure that only one browser\n * window/tab at a time will be able to access shared resources.\n *\n * Based on the Alur and Taubenfeld fast lock\n * (http://www.cs.rochester.edu/research/synchronization/pseudocode/fastlock.html)\n * with an added timeout to ensure there will be eventual progress in the event\n * that a window is closed in the middle of the callback.\n *\n * Implementation based on the original version by David Wolever (https://github.com/wolever)\n * at https://gist.github.com/wolever/5fd7573d1ef6166e8f8c4af286a69432.\n *\n * @example\n * const myLock = new SharedLock('some-key');\n * myLock.withLock(function() {\n * console.log('I hold the mutex!');\n * });\n *\n * @constructor\n */\nvar SharedLock = function SharedLock(key, options) {\n options = options || {};\n this.storageKey = key;\n this.storage = options.storage || window.localStorage;\n this.pollIntervalMS = options.pollIntervalMS || 100;\n this.timeoutMS = options.timeoutMS || 2000;\n};\n\n// pass in a specific pid to test contention scenarios; otherwise\n// it is chosen randomly for each acquisition attempt\nSharedLock.prototype.withLock = function (lockedCB, errorCB, pid) {\n if (!pid && typeof errorCB !== 'function') {\n pid = errorCB;\n errorCB = null;\n }\n var i = pid || new Date().getTime() + '|' + Math.random();\n var startTime = new Date().getTime();\n var key = this.storageKey;\n var pollIntervalMS = this.pollIntervalMS;\n var timeoutMS = this.timeoutMS;\n var storage = this.storage;\n var keyX = key + ':X';\n var keyY = key + ':Y';\n var keyZ = key + ':Z';\n var reportError = function reportError(err) {\n errorCB && errorCB(err);\n };\n var delay = function delay(cb) {\n if (new Date().getTime() - startTime > timeoutMS) {\n logger$2.error('Timeout waiting for mutex on ' + key + '; clearing lock. [' + i + ']');\n storage.removeItem(keyZ);\n storage.removeItem(keyY);\n loop();\n return;\n }\n setTimeout(function () {\n try {\n cb();\n } catch (err) {\n reportError(err);\n }\n }, pollIntervalMS * (Math.random() + 0.1));\n };\n var waitFor = function waitFor(predicate, cb) {\n if (predicate()) {\n cb();\n } else {\n delay(function () {\n waitFor(predicate, cb);\n });\n }\n };\n var getSetY = function getSetY() {\n var valY = storage.getItem(keyY);\n if (valY && valY !== i) {\n // if Y == i then this process already has the lock (useful for test cases)\n return false;\n } else {\n storage.setItem(keyY, i);\n if (storage.getItem(keyY) === i) {\n return true;\n } else {\n if (!localStorageSupported(storage, true)) {\n throw new Error('localStorage support dropped while acquiring lock');\n }\n return false;\n }\n }\n };\n var loop = function loop() {\n storage.setItem(keyX, i);\n waitFor(getSetY, function () {\n if (storage.getItem(keyX) === i) {\n criticalSection();\n return;\n }\n delay(function () {\n if (storage.getItem(keyY) !== i) {\n loop();\n return;\n }\n waitFor(function () {\n return !storage.getItem(keyZ);\n }, criticalSection);\n });\n });\n };\n var criticalSection = function criticalSection() {\n storage.setItem(keyZ, '1');\n try {\n lockedCB();\n } finally {\n storage.removeItem(keyZ);\n if (storage.getItem(keyY) === i) {\n storage.removeItem(keyY);\n }\n if (storage.getItem(keyX) === i) {\n storage.removeItem(keyX);\n }\n }\n };\n try {\n if (localStorageSupported(storage, true)) {\n loop();\n } else {\n throw new Error('localStorage support check failed');\n }\n } catch (err) {\n reportError(err);\n }\n};\n\n// eslint-disable-line camelcase\n\nvar logger$1 = console_with_prefix('batch');\n\n/**\n * RequestQueue: queue for batching API requests with localStorage backup for retries.\n * Maintains an in-memory queue which represents the source of truth for the current\n * page, but also writes all items out to a copy in the browser's localStorage, which\n * can be read on subsequent pageloads and retried. For batchability, all the request\n * items in the queue should be of the same type (events, people updates, group updates)\n * so they can be sent in a single request to the same API endpoint.\n *\n * LocalStorage keying and locking: In order for reloads and subsequent pageloads of\n * the same site to access the same persisted data, they must share the same localStorage\n * key (for instance based on project token and queue type). Therefore access to the\n * localStorage entry is guarded by an asynchronous mutex (SharedLock) to prevent\n * simultaneously open windows/tabs from overwriting each other's data (which would lead\n * to data loss in some situations).\n * @constructor\n */\nvar RequestQueue = function RequestQueue(storageKey, options) {\n options = options || {};\n this.storageKey = storageKey;\n this.storage = options.storage || window.localStorage;\n this.lock = new SharedLock(storageKey, {\n storage: this.storage\n });\n this.pid = options.pid || null; // pass pid to test out storage lock contention scenarios\n\n this.memQueue = [];\n};\n\n/**\n * Add one item to queues (memory and localStorage). The queued entry includes\n * the given item along with an auto-generated ID and a \"flush-after\" timestamp.\n * It is expected that the item will be sent over the network and dequeued\n * before the flush-after time; if this doesn't happen it is considered orphaned\n * (e.g., the original tab where it was enqueued got closed before it could be\n * sent) and the item can be sent by any tab that finds it in localStorage.\n *\n * The final callback param is called with a param indicating success or\n * failure of the enqueue operation; it is asynchronous because the localStorage\n * lock is asynchronous.\n */\nRequestQueue.prototype.enqueue = function (item, flushInterval, cb) {\n var queueEntry = {\n 'id': cheap_guid(),\n 'flushAfter': new Date().getTime() + flushInterval * 2,\n 'payload': item\n };\n this.lock.withLock(_.bind(function lockAcquired() {\n var succeeded;\n try {\n var storedQueue = this.readFromStorage();\n storedQueue.push(queueEntry);\n succeeded = this.saveToStorage(storedQueue);\n if (succeeded) {\n // only add to in-memory queue when storage succeeds\n this.memQueue.push(queueEntry);\n }\n } catch (err) {\n logger$1.error('Error enqueueing item', item);\n succeeded = false;\n }\n if (cb) {\n cb(succeeded);\n }\n }, this), function lockFailure(err) {\n logger$1.error('Error acquiring storage lock', err);\n if (cb) {\n cb(false);\n }\n }, this.pid);\n};\n\n/**\n * Read out the given number of queue entries. If this.memQueue\n * has fewer than batchSize items, then look for \"orphaned\" items\n * in the persisted queue (items where the 'flushAfter' time has\n * already passed).\n */\nRequestQueue.prototype.fillBatch = function (batchSize) {\n var batch = this.memQueue.slice(0, batchSize);\n if (batch.length < batchSize) {\n // don't need lock just to read events; localStorage is thread-safe\n // and the worst that could happen is a duplicate send of some\n // orphaned events, which will be deduplicated on the server side\n var storedQueue = this.readFromStorage();\n if (storedQueue.length) {\n // item IDs already in batch; don't duplicate out of storage\n var idsInBatch = {}; // poor man's Set\n _.each(batch, function (item) {\n idsInBatch[item['id']] = true;\n });\n for (var i = 0; i < storedQueue.length; i++) {\n var item = storedQueue[i];\n if (new Date().getTime() > item['flushAfter'] && !idsInBatch[item['id']]) {\n item.orphaned = true;\n batch.push(item);\n if (batch.length >= batchSize) {\n break;\n }\n }\n }\n }\n }\n return batch;\n};\n\n/**\n * Remove items with matching 'id' from array (immutably)\n * also remove any item without a valid id (e.g., malformed\n * storage entries).\n */\nvar filterOutIDsAndInvalid = function filterOutIDsAndInvalid(items, idSet) {\n var filteredItems = [];\n _.each(items, function (item) {\n if (item['id'] && !idSet[item['id']]) {\n filteredItems.push(item);\n }\n });\n return filteredItems;\n};\n\n/**\n * Remove items with matching IDs from both in-memory queue\n * and persisted queue\n */\nRequestQueue.prototype.removeItemsByID = function (ids, cb) {\n var idSet = {}; // poor man's Set\n _.each(ids, function (id) {\n idSet[id] = true;\n });\n this.memQueue = filterOutIDsAndInvalid(this.memQueue, idSet);\n this.lock.withLock(_.bind(function lockAcquired() {\n var succeeded;\n try {\n var storedQueue = this.readFromStorage();\n storedQueue = filterOutIDsAndInvalid(storedQueue, idSet);\n succeeded = this.saveToStorage(storedQueue);\n } catch (err) {\n logger$1.error('Error removing items', ids);\n succeeded = false;\n }\n if (cb) {\n cb(succeeded);\n }\n }, this), function lockFailure(err) {\n logger$1.error('Error acquiring storage lock', err);\n if (cb) {\n cb(false);\n }\n }, this.pid);\n};\n\n// internal helper for RequestQueue.updatePayloads\nvar updatePayloads = function updatePayloads(existingItems, itemsToUpdate) {\n var newItems = [];\n _.each(existingItems, function (item) {\n var id = item['id'];\n if (id in itemsToUpdate) {\n var newPayload = itemsToUpdate[id];\n if (newPayload !== null) {\n item['payload'] = newPayload;\n newItems.push(item);\n }\n } else {\n // no update\n newItems.push(item);\n }\n });\n return newItems;\n};\n\n/**\n * Update payloads of given items in both in-memory queue and\n * persisted queue. Items set to null are removed from queues.\n */\nRequestQueue.prototype.updatePayloads = function (itemsToUpdate, cb) {\n this.memQueue = updatePayloads(this.memQueue, itemsToUpdate);\n this.lock.withLock(_.bind(function lockAcquired() {\n var succeeded;\n try {\n var storedQueue = this.readFromStorage();\n storedQueue = updatePayloads(storedQueue, itemsToUpdate);\n succeeded = this.saveToStorage(storedQueue);\n } catch (err) {\n logger$1.error('Error updating items', itemsToUpdate);\n succeeded = false;\n }\n if (cb) {\n cb(succeeded);\n }\n }, this), function lockFailure(err) {\n logger$1.error('Error acquiring storage lock', err);\n if (cb) {\n cb(false);\n }\n }, this.pid);\n};\n\n/**\n * Read and parse items array from localStorage entry, handling\n * malformed/missing data if necessary.\n */\nRequestQueue.prototype.readFromStorage = function () {\n var storageEntry;\n try {\n storageEntry = this.storage.getItem(this.storageKey);\n if (storageEntry) {\n storageEntry = JSONParse(storageEntry);\n if (!_.isArray(storageEntry)) {\n logger$1.error('Invalid storage entry:', storageEntry);\n storageEntry = null;\n }\n }\n } catch (err) {\n logger$1.error('Error retrieving queue', err);\n storageEntry = null;\n }\n return storageEntry || [];\n};\n\n/**\n * Serialize the given items array to localStorage.\n */\nRequestQueue.prototype.saveToStorage = function (queue) {\n try {\n this.storage.setItem(this.storageKey, JSONStringify(queue));\n return true;\n } catch (err) {\n logger$1.error('Error saving queue', err);\n return false;\n }\n};\n\n/**\n * Clear out queues (memory and localStorage).\n */\nRequestQueue.prototype.clear = function () {\n this.memQueue = [];\n this.storage.removeItem(this.storageKey);\n};\n\n// eslint-disable-line camelcase\n\n// maximum interval between request retries after exponential backoff\nvar MAX_RETRY_INTERVAL_MS = 10 * 60 * 1000; // 10 minutes\n\nvar logger = console_with_prefix('batch');\n\n/**\n * RequestBatcher: manages the queueing, flushing, retry etc of requests of one\n * type (events, people, groups).\n * Uses RequestQueue to manage the backing store.\n * @constructor\n */\nvar RequestBatcher = function RequestBatcher(storageKey, options) {\n this.queue = new RequestQueue(storageKey, {\n storage: options.storage\n });\n this.libConfig = options.libConfig;\n this.sendRequest = options.sendRequestFunc;\n this.beforeSendHook = options.beforeSendHook;\n\n // seed variable batch size + flush interval with configured values\n this.batchSize = this.libConfig['batch_size'];\n this.flushInterval = this.libConfig['batch_flush_interval_ms'];\n this.stopped = !this.libConfig['batch_autostart'];\n};\n\n/**\n * Add one item to queue.\n */\nRequestBatcher.prototype.enqueue = function (item, cb) {\n this.queue.enqueue(item, this.flushInterval, cb);\n};\n\n/**\n * Start flushing batches at the configured time interval. Must call\n * this method upon SDK init in order to send anything over the network.\n */\nRequestBatcher.prototype.start = function () {\n this.stopped = false;\n this.flush();\n};\n\n/**\n * Stop flushing batches. Can be restarted by calling start().\n */\nRequestBatcher.prototype.stop = function () {\n this.stopped = true;\n if (this.timeoutID) {\n clearTimeout(this.timeoutID);\n this.timeoutID = null;\n }\n};\n\n/**\n * Clear out queue.\n */\nRequestBatcher.prototype.clear = function () {\n this.queue.clear();\n};\n\n/**\n * Restore batch size configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetBatchSize = function () {\n this.batchSize = this.libConfig['batch_size'];\n};\n\n/**\n * Restore flush interval time configuration to whatever is set in the main SDK.\n */\nRequestBatcher.prototype.resetFlush = function () {\n this.scheduleFlush(this.libConfig['batch_flush_interval_ms']);\n};\n\n/**\n * Schedule the next flush in the given number of milliseconds.\n */\nRequestBatcher.prototype.scheduleFlush = function (flushMS) {\n this.flushInterval = flushMS;\n if (!this.stopped) {\n // don't schedule anymore if batching has been stopped\n this.timeoutID = setTimeout(_.bind(this.flush, this), this.flushInterval);\n }\n};\n\n/**\n * Flush one batch to network. Depending on success/failure modes, it will either\n * remove the batch from the queue or leave it in for retry, and schedule the next\n * flush. In cases of most network or API failures, it will back off exponentially\n * when retrying.\n * @param {Object} [options]\n * @param {boolean} [options.sendBeacon] - whether to send batch with\n * navigator.sendBeacon (only useful for sending batches before page unloads, as\n * sendBeacon offers no callbacks or status indications)\n */\nRequestBatcher.prototype.flush = function (options) {\n try {\n if (this.requestInProgress) {\n logger.log('Flush: Request already in progress');\n return;\n }\n options = options || {};\n var timeoutMS = this.libConfig['batch_request_timeout_ms'];\n var startTime = new Date().getTime();\n var currentBatchSize = this.batchSize;\n var batch = this.queue.fillBatch(currentBatchSize);\n var dataForRequest = [];\n var transformedItems = {};\n _.each(batch, function (item) {\n var payload = item['payload'];\n if (this.beforeSendHook && !item.orphaned) {\n payload = this.beforeSendHook(payload);\n }\n if (payload) {\n dataForRequest.push(payload);\n }\n transformedItems[item['id']] = payload;\n }, this);\n if (dataForRequest.length < 1) {\n this.resetFlush();\n return; // nothing to do\n }\n\n this.requestInProgress = true;\n var batchSendCallback = _.bind(function (res) {\n this.requestInProgress = false;\n try {\n // handle API response in a try-catch to make sure we can reset the\n // flush operation if something goes wrong\n\n var removeItemsFromQueue = false;\n if (options.unloading) {\n // update persisted data to include hook transformations\n this.queue.updatePayloads(transformedItems);\n } else if (_.isObject(res) && res.error === 'timeout' && new Date().getTime() - startTime >= timeoutMS) {\n logger.error('Network timeout; retrying');\n this.flush();\n } else if (_.isObject(res) && res.xhr_req && (res.xhr_req['status'] >= 500 || res.xhr_req['status'] === 429 || res.error === 'timeout')) {\n // network or API error, or 429 Too Many Requests, retry\n var retryMS = this.flushInterval * 2;\n var headers = res.xhr_req['responseHeaders'];\n if (headers) {\n var retryAfter = headers['Retry-After'];\n if (retryAfter) {\n retryMS = parseInt(retryAfter, 10) * 1000 || retryMS;\n }\n }\n retryMS = Math.min(MAX_RETRY_INTERVAL_MS, retryMS);\n logger.error('Error; retry in ' + retryMS + ' ms');\n this.scheduleFlush(retryMS);\n } else if (_.isObject(res) && res.xhr_req && res.xhr_req['status'] === 413) {\n // 413 Payload Too Large\n if (batch.length > 1) {\n var halvedBatchSize = Math.max(1, Math.floor(currentBatchSize / 2));\n this.batchSize = Math.min(this.batchSize, halvedBatchSize, batch.length - 1);\n logger.error('413 response; reducing batch size to ' + this.batchSize);\n this.resetFlush();\n } else {\n logger.error('Single-event request too large; dropping', batch);\n this.resetBatchSize();\n removeItemsFromQueue = true;\n }\n } else {\n // successful network request+response; remove each item in batch from queue\n // (even if it was e.g. a 400, in which case retrying won't help)\n removeItemsFromQueue = true;\n }\n if (removeItemsFromQueue) {\n this.queue.removeItemsByID(_.map(batch, function (item) {\n return item['id'];\n }), _.bind(this.flush, this) // handle next batch if the queue isn't empty\n );\n }\n } catch (err) {\n logger.error('Error handling API response', err);\n this.resetFlush();\n }\n }, this);\n var requestOptions = {\n method: 'POST',\n verbose: true,\n ignore_json_errors: true,\n // eslint-disable-line camelcase\n timeout_ms: timeoutMS // eslint-disable-line camelcase\n };\n\n if (options.unloading) {\n requestOptions.transport = 'sendBeacon';\n }\n logger.log('MIXPANEL REQUEST:', dataForRequest);\n this.sendRequest(dataForRequest, requestOptions, batchSendCallback);\n } catch (err) {\n logger.error('Error flushing request queue', err);\n this.resetFlush();\n }\n};\n\n/**\n * A function used to track a Mixpanel event (e.g. MixpanelLib.track)\n * @callback trackFunction\n * @param {String} event_name The name of the event. This can be anything the user does - 'Button Click', 'Sign Up', 'Item Purchased', etc.\n * @param {Object} [properties] A set of properties to include with the event you're sending. These describe the user who did the event or details about the event itself.\n * @param {Function} [callback] If provided, the callback function will be called after tracking the event.\n */\n\n/** Public **/\n\nvar GDPR_DEFAULT_PERSISTENCE_PREFIX = '__mp_opt_in_out_';\n\n/**\n * Opt the user in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nfunction optIn(token, options) {\n _optInOut(true, token, options);\n}\n\n/**\n * Opt the user out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-out cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-out cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-out cookie is set as secure or not\n */\nfunction optOut(token, options) {\n _optInOut(false, token, options);\n}\n\n/**\n * Check whether the user has opted in to data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {boolean} whether the user has opted in to the given opt type\n */\nfunction hasOptedIn(token, options) {\n return _getStorageValue(token, options) === '1';\n}\n\n/**\n * Check whether the user has opted out of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the user has opted out of the given opt type\n */\nfunction hasOptedOut(token, options) {\n if (_hasDoNotTrackFlagOn(options)) {\n console.warn('This browser has \"Do Not Track\" enabled. This will prevent the Mixpanel SDK from sending any data. To ignore the \"Do Not Track\" browser setting, initialize the Mixpanel instance with the config \"ignore_dnt: true\"');\n return true;\n }\n var optedOut = _getStorageValue(token, options) === '0';\n if (optedOut) {\n console.warn('You are opted out of Mixpanel tracking. This will prevent the Mixpanel SDK from sending any data.');\n }\n return optedOut;\n}\n\n/**\n * Wrap a MixpanelLib method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction addOptOutCheckMixpanelLib(method) {\n return _addOptOutCheck(method, function (name) {\n return this.get_config(name);\n });\n}\n\n/**\n * Wrap a MixpanelPeople method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction addOptOutCheckMixpanelPeople(method) {\n return _addOptOutCheck(method, function (name) {\n return this._get_config(name);\n });\n}\n\n/**\n * Wrap a MixpanelGroup method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction addOptOutCheckMixpanelGroup(method) {\n return _addOptOutCheck(method, function (name) {\n return this._get_config(name);\n });\n}\n\n/**\n * Clear the user's opt in/out status of data tracking and cookies/localstorage for the given token\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistenceType] Persistence mechanism used - cookie or localStorage\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nfunction clearOptInOut(token, options) {\n options = options || {};\n _getStorage(options).remove(_getStorageKey(token, options), !!options.crossSubdomainCookie, options.cookieDomain);\n}\n\n/** Private **/\n\n/**\n * Get storage util\n * @param {Object} [options]\n * @param {string} [options.persistenceType]\n * @returns {object} either _.cookie or _.localstorage\n */\nfunction _getStorage(options) {\n options = options || {};\n return options.persistenceType === 'localStorage' ? _.localStorage : _.cookie;\n}\n\n/**\n * Get the name of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the name of the cookie for the given opt type\n */\nfunction _getStorageKey(token, options) {\n options = options || {};\n return (options.persistencePrefix || GDPR_DEFAULT_PERSISTENCE_PREFIX) + token;\n}\n\n/**\n * Get the value of the cookie that is used for the given opt type (tracking, cookie, etc.)\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @returns {string} the value of the cookie for the given opt type\n */\nfunction _getStorageValue(token, options) {\n return _getStorage(options).get(_getStorageKey(token, options));\n}\n\n/**\n * Check whether the user has set the DNT/doNotTrack setting to true in their browser\n * @param {Object} [options]\n * @param {string} [options.window] - alternate window object to check; used to force various DNT settings in browser tests\n * @param {boolean} [options.ignoreDnt] - flag to ignore browser DNT settings and always return false\n * @returns {boolean} whether the DNT setting is true\n */\nfunction _hasDoNotTrackFlagOn(options) {\n if (options && options.ignoreDnt) {\n return false;\n }\n var win = options && options.window || window$1;\n var nav = win['navigator'] || {};\n var hasDntOn = false;\n _.each([nav['doNotTrack'],\n // standard\n nav['msDoNotTrack'], win['doNotTrack']], function (dntValue) {\n if (_.includes([true, 1, '1', 'yes'], dntValue)) {\n hasDntOn = true;\n }\n });\n return hasDntOn;\n}\n\n/**\n * Set cookie/localstorage for the user indicating that they are opted in or out for the given opt type\n * @param {boolean} optValue - whether to opt the user in or out for the given opt type\n * @param {string} token - Mixpanel project tracking token\n * @param {Object} [options]\n * @param {trackFunction} [options.track] - function used for tracking a Mixpanel event to record the opt-in action\n * @param {string} [options.trackEventName] - event name to be used for tracking the opt-in action\n * @param {Object} [options.trackProperties] - set of properties to be tracked along with the opt-in action\n * @param {string} [options.persistencePrefix=__mp_opt_in_out] - custom prefix to be used in the cookie/localstorage name\n * @param {Number} [options.cookieExpiration] - number of days until the opt-in cookie expires\n * @param {string} [options.cookieDomain] - custom cookie domain\n * @param {boolean} [options.crossSiteCookie] - whether the opt-in cookie is set as cross-site-enabled\n * @param {boolean} [options.crossSubdomainCookie] - whether the opt-in cookie is set as cross-subdomain or not\n * @param {boolean} [options.secureCookie] - whether the opt-in cookie is set as secure or not\n */\nfunction _optInOut(optValue, token, options) {\n if (!_.isString(token) || !token.length) {\n console.error('gdpr.' + (optValue ? 'optIn' : 'optOut') + ' called with an invalid token');\n return;\n }\n options = options || {};\n _getStorage(options).set(_getStorageKey(token, options), optValue ? 1 : 0, _.isNumber(options.cookieExpiration) ? options.cookieExpiration : null, !!options.crossSubdomainCookie, !!options.secureCookie, !!options.crossSiteCookie, options.cookieDomain);\n if (options.track && optValue) {\n // only track event if opting in (optValue=true)\n options.track(options.trackEventName || '$opt_in', options.trackProperties, {\n 'send_immediately': true\n });\n }\n}\n\n/**\n * Wrap a method with a check for whether the user is opted out of data tracking and cookies/localstorage for the given token\n * If the user has opted out, return early instead of executing the method.\n * If a callback argument was provided, execute it passing the 0 error code.\n * @param {function} method - wrapped method to be executed if the user has not opted out\n * @param {function} getConfigValue - getter function for the Mixpanel API token and other options to be used with opt-out check\n * @returns {*} the result of executing method OR undefined if the user has opted out\n */\nfunction _addOptOutCheck(method, getConfigValue) {\n return function () {\n var optedOut = false;\n try {\n var token = getConfigValue.call(this, 'token');\n var ignoreDnt = getConfigValue.call(this, 'ignore_dnt');\n var persistenceType = getConfigValue.call(this, 'opt_out_tracking_persistence_type');\n var persistencePrefix = getConfigValue.call(this, 'opt_out_tracking_cookie_prefix');\n var win = getConfigValue.call(this, 'window'); // used to override window during browser tests\n\n if (token) {\n // if there was an issue getting the token, continue method execution as normal\n optedOut = hasOptedOut(token, {\n ignoreDnt: ignoreDnt,\n persistenceType: persistenceType,\n persistencePrefix: persistencePrefix,\n window: win\n });\n }\n } catch (err) {\n console.error('Unexpected error when checking tracking opt-out status: ' + err);\n }\n if (!optedOut) {\n return method.apply(this, arguments);\n }\n var callback = arguments[arguments.length - 1];\n if (typeof callback === 'function') {\n callback(0);\n }\n return;\n };\n}\n\n/** @const */\nvar SET_ACTION = '$set';\n/** @const */\nvar SET_ONCE_ACTION = '$set_once';\n/** @const */\nvar UNSET_ACTION = '$unset';\n/** @const */\nvar ADD_ACTION = '$add';\n/** @const */\nvar APPEND_ACTION = '$append';\n/** @const */\nvar UNION_ACTION = '$union';\n/** @const */\nvar REMOVE_ACTION = '$remove';\n/** @const */\nvar DELETE_ACTION = '$delete';\n\n// Common internal methods for mixpanel.people and mixpanel.group APIs.\n// These methods shouldn't involve network I/O.\nvar apiActions = {\n set_action: function set_action(prop, to) {\n var data = {};\n var $set = {};\n if (_.isObject(prop)) {\n _.each(prop, function (v, k) {\n if (!this._is_reserved_property(k)) {\n $set[k] = v;\n }\n }, this);\n } else {\n $set[prop] = to;\n }\n data[SET_ACTION] = $set;\n return data;\n },\n unset_action: function unset_action(prop) {\n var data = {};\n var $unset = [];\n if (!_.isArray(prop)) {\n prop = [prop];\n }\n _.each(prop, function (k) {\n if (!this._is_reserved_property(k)) {\n $unset.push(k);\n }\n }, this);\n data[UNSET_ACTION] = $unset;\n return data;\n },\n set_once_action: function set_once_action(prop, to) {\n var data = {};\n var $set_once = {};\n if (_.isObject(prop)) {\n _.each(prop, function (v, k) {\n if (!this._is_reserved_property(k)) {\n $set_once[k] = v;\n }\n }, this);\n } else {\n $set_once[prop] = to;\n }\n data[SET_ONCE_ACTION] = $set_once;\n return data;\n },\n union_action: function union_action(list_name, values) {\n var data = {};\n var $union = {};\n if (_.isObject(list_name)) {\n _.each(list_name, function (v, k) {\n if (!this._is_reserved_property(k)) {\n $union[k] = _.isArray(v) ? v : [v];\n }\n }, this);\n } else {\n $union[list_name] = _.isArray(values) ? values : [values];\n }\n data[UNION_ACTION] = $union;\n return data;\n },\n append_action: function append_action(list_name, value) {\n var data = {};\n var $append = {};\n if (_.isObject(list_name)) {\n _.each(list_name, function (v, k) {\n if (!this._is_reserved_property(k)) {\n $append[k] = v;\n }\n }, this);\n } else {\n $append[list_name] = value;\n }\n data[APPEND_ACTION] = $append;\n return data;\n },\n remove_action: function remove_action(list_name, value) {\n var data = {};\n var $remove = {};\n if (_.isObject(list_name)) {\n _.each(list_name, function (v, k) {\n if (!this._is_reserved_property(k)) {\n $remove[k] = v;\n }\n }, this);\n } else {\n $remove[list_name] = value;\n }\n data[REMOVE_ACTION] = $remove;\n return data;\n },\n delete_action: function delete_action() {\n var data = {};\n data[DELETE_ACTION] = '';\n return data;\n }\n};\n\n/**\n * Mixpanel Group Object\n * @constructor\n */\nvar MixpanelGroup = function MixpanelGroup() {};\n_.extend(MixpanelGroup.prototype, apiActions);\nMixpanelGroup.prototype._init = function (mixpanel_instance, group_key, group_id) {\n this._mixpanel = mixpanel_instance;\n this._group_key = group_key;\n this._group_id = group_id;\n};\n\n/**\n * Set properties on a group.\n *\n * ### Usage:\n *\n * mixpanel.get_group('company', 'mixpanel').set('Location', '405 Howard');\n *\n * // or set multiple properties at once\n * mixpanel.get_group('company', 'mixpanel').set({\n * 'Location': '405 Howard',\n * 'Founded' : 2009,\n * });\n * // properties can be strings, integers, dates, or lists\n *\n * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values.\n * @param {*} [to] A value to set on the given property name\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype.set = addOptOutCheckMixpanelGroup(function (prop, to, callback) {\n var data = this.set_action(prop, to);\n if (_.isObject(prop)) {\n callback = to;\n }\n return this._send_request(data, callback);\n});\n\n/**\n * Set properties on a group, only if they do not yet exist.\n * This will not overwrite previous group property values, unlike\n * group.set().\n *\n * ### Usage:\n *\n * mixpanel.get_group('company', 'mixpanel').set_once('Location', '405 Howard');\n *\n * // or set multiple properties at once\n * mixpanel.get_group('company', 'mixpanel').set_once({\n * 'Location': '405 Howard',\n * 'Founded' : 2009,\n * });\n * // properties can be strings, integers, lists or dates\n *\n * @param {Object|String} prop If a string, this is the name of the property. If an object, this is an associative array of names and values.\n * @param {*} [to] A value to set on the given property name\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype.set_once = addOptOutCheckMixpanelGroup(function (prop, to, callback) {\n var data = this.set_once_action(prop, to);\n if (_.isObject(prop)) {\n callback = to;\n }\n return this._send_request(data, callback);\n});\n\n/**\n * Unset properties on a group permanently.\n *\n * ### Usage:\n *\n * mixpanel.get_group('company', 'mixpanel').unset('Founded');\n *\n * @param {String} prop The name of the property.\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype.unset = addOptOutCheckMixpanelGroup(function (prop, callback) {\n var data = this.unset_action(prop);\n return this._send_request(data, callback);\n});\n\n/**\n * Merge a given list with a list-valued group property, excluding duplicate values.\n *\n * ### Usage:\n *\n * // merge a value to a list, creating it if needed\n * mixpanel.get_group('company', 'mixpanel').union('Location', ['San Francisco', 'London']);\n *\n * @param {String} list_name Name of the property.\n * @param {Array} values Values to merge with the given property\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype.union = addOptOutCheckMixpanelGroup(function (list_name, values, callback) {\n if (_.isObject(list_name)) {\n callback = values;\n }\n var data = this.union_action(list_name, values);\n return this._send_request(data, callback);\n});\n\n/**\n * Permanently delete a group.\n *\n * ### Usage:\n *\n * mixpanel.get_group('company', 'mixpanel').delete();\n *\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype['delete'] = addOptOutCheckMixpanelGroup(function (callback) {\n // bracket notation above prevents a minification error related to reserved words\n var data = this.delete_action();\n return this._send_request(data, callback);\n});\n\n/**\n * Remove a property from a group. The value will be ignored if doesn't exist.\n *\n * ### Usage:\n *\n * mixpanel.get_group('company', 'mixpanel').remove('Location', 'London');\n *\n * @param {String} list_name Name of the property.\n * @param {Object} value Value to remove from the given group property\n * @param {Function} [callback] If provided, the callback will be called after the tracking event\n */\nMixpanelGroup.prototype.remove = addOptOutCheckMixpanelGroup(function (list_name, value, callback) {\n var data = this.remove_action(list_name, value);\n return this._send_request(data, callback);\n});\nMixpanelGroup.prototype._send_request = function (data, callback) {\n data['$group_key'] = this._group_key;\n data['$group_id'] = this._group_id;\n data['$token'] = this._get_config('token');\n var date_encoded_data = _.encodeDates(data);\n return this._mixpanel._track_or_batch({\n type: 'groups',\n data: date_encoded_data,\n endpoint: this._get_config('api_host') + '/groups/',\n batcher: this._mixpanel.request_batchers.groups\n }, callback);\n};\nMixpanelGroup.prototype._is_reserved_property = function (prop) {\n return prop === '$group_key' || prop === '$group_id';\n};\nMixpanelGroup.prototype._get_config = function (conf) {\n return this._mixpanel.get_config(conf);\n};\nMixpanelGroup.prototype.toString = function () {\n return this._mixpanel.toString() + '.group.' + this._group_key + '.' + this._group_id;\n};\n\n// MixpanelGroup Exports\nMixpanelGroup.prototype['remove'] = MixpanelGroup.prototype.remove;\nMixpanelGroup.prototype['set'] = MixpanelGroup.prototype.set;\nMixpanelGroup.prototype['set_once'] = MixpanelGroup.prototype.set_once;\nMixpanelGroup.prototype['union'] = MixpanelGroup.prototype.union;\nMixpanelGroup.prototype['unset'] = MixpanelGroup.prototype.unset;\nMixpanelGroup.prototype['toString'] = MixpanelGroup.prototype.toString;\n\n/*\n * Constants\n */\n/** @const */\nvar SET_QUEUE_KEY = '__mps';\n/** @const */\nvar SET_ONCE_QUEUE_KEY = '__mpso';\n/** @const */\nvar UNSET_QUEUE_KEY = '__mpus';\n/** @const */\nvar ADD_QUEUE_KEY = '__mpa';\n/** @const */\nvar APPEND_QUEUE_KEY = '__mpap';\n/** @const */\nvar REMOVE_QUEUE_KEY = '__mpr';\n/** @const */\nvar UNION_QUEUE_KEY = '__mpu';\n// This key is deprecated, but we want to check for it to see whether aliasing is allowed.\n/** @const */\nvar PEOPLE_DISTINCT_ID_KEY = '$people_distinct_id';\n/** @const */\nvar ALIAS_ID_KEY = '__alias';\n/** @const */\nvar CAMPAIGN_IDS_KEY = '__cmpns';\n/** @const */\nvar EVENT_TIMERS_KEY = '__timers';\n/** @const */\nvar RESERVED_PROPERTIES = [SET_QUEUE_KEY, SET_ONCE_QUEUE_KEY, UNSET_QUEUE_KEY, ADD_QUEUE_KEY, APPEND_QUEUE_KEY, REMOVE_QUEUE_KEY, UNION_QUEUE_KEY, PEOPLE_DISTINCT_ID_KEY, ALIAS_ID_KEY, CAMPAIGN_IDS_KEY, EVENT_TIMERS_KEY];\n\n/**\n * Mixpanel Persistence Object\n * @constructor\n */\nvar MixpanelPersistence = function MixpanelPersistence(config) {\n this['props'] = {};\n this.campaign_params_saved = false;\n if (config['persistence_name']) {\n this.name = 'mp_' + config['persistence_name'];\n } else {\n this.name = 'mp_' + config['token'] + '_mixpanel';\n }\n var storage_type = config['persistence'];\n if (storage_type !== 'cookie' && storage_type !== 'localStorage') {\n console.critical('Unknown persistence type ' + storage_type + '; falling back to cookie');\n storage_type = config['persistence'] = 'cookie';\n }\n if (storage_type === 'localStorage' && _.localStorage.is_supported()) {\n this.storage = _.localStorage;\n } else {\n this.storage = _.cookie;\n }\n this.load();\n this.update_config(config);\n this.upgrade(config);\n this.save();\n};\nMixpanelPersistence.prototype.properties = function () {\n var p = {};\n // Filter out reserved properties\n _.each(this['props'], function (v, k) {\n if (!_.include(RESERVED_PROPERTIES, k)) {\n p[k] = v;\n }\n });\n return p;\n};\nMixpanelPersistence.prototype.load = function () {\n if (this.disabled) {\n return;\n }\n var entry = this.storage.parse(this.name);\n if (entry) {\n this['props'] = _.extend({}, entry);\n }\n};\nMixpanelPersistence.prototype.upgrade = function (config) {\n var upgrade_from_old_lib = config['upgrade'],\n old_cookie_name,\n old_cookie;\n if (upgrade_from_old_lib) {\n old_cookie_name = 'mp_super_properties';\n // Case where they had a custom cookie name before.\n if (typeof upgrade_from_old_lib === 'string') {\n old_cookie_name = upgrade_from_old_lib;\n }\n old_cookie = this.storage.parse(old_cookie_name);\n\n // remove the cookie\n this.storage.remove(old_cookie_name);\n this.storage.remove(old_cookie_name, true);\n if (old_cookie) {\n this['props'] = _.extend(this['props'], old_cookie['all'], old_cookie['events']);\n }\n }\n if (!config['cookie_name'] && config['name'] !== 'mixpanel') {\n // special case to handle people with cookies of the form\n // mp_TOKEN_INSTANCENAME from the first release of this library\n old_cookie_name = 'mp_' + config['token'] + '_' + config['name'];\n old_cookie = this.storage.parse(old_cookie_name);\n if (old_cookie) {\n this.storage.remove(old_cookie_name);\n this.storage.remove(old_cookie_name, true);\n\n // Save the prop values that were in the cookie from before -\n // this should only happen once as we delete the old one.\n this.register_once(old_cookie);\n }\n }\n if (this.storage === _.localStorage) {\n old_cookie = _.cookie.parse(this.name);\n _.cookie.remove(this.name);\n _.cookie.remove(this.name, true);\n if (old_cookie) {\n this.register_once(old_cookie);\n }\n }\n};\nMixpanelPersistence.prototype.save = function () {\n if (this.disabled) {\n return;\n }\n this._expire_notification_campaigns();\n this.storage.set(this.name, _.JSONEncode(this['props']), this.expire_days, this.cross_subdomain, this.secure, this.cross_site, this.cookie_domain);\n};\nMixpanelPersistence.prototype.remove = function () {\n // remove both domain and subdomain cookies\n this.storage.remove(this.name, false, this.cookie_domain);\n this.storage.remove(this.name, true, this.cookie_domain);\n};\n\n// removes the storage entry and deletes all loaded data\n// forced name for tests\nMixpanelPersistence.prototype.clear = function () {\n this.remove();\n this['props'] = {};\n};\n\n/**\n* @param {Object} props\n* @param {*=} default_value\n* @param {number=} days\n*/\nMixpanelPersistence.prototype.register_once = function (props, default_value, days) {\n if (_.isObject(props)) {\n if (typeof default_value === 'undefined') {\n default_value = 'None';\n }\n this.expire_days = typeof days === 'undefined' ? this.default_expiry : days;\n _.each(props, function (val, prop) {\n if (!this['props'].hasOwnProperty(prop) || this['props'][prop] === default_value) {\n this['props'][prop] = val;\n }\n }, this);\n this.save();\n return true;\n }\n return false;\n};\n\n/**\n* @param {Object} props\n* @param {number=} days\n*/\nMixpanelPersistence.prototype.register = function (props, days) {\n if (_.isObject(props)) {\n this.expire_days = typeof days === 'undefined' ? this.default_expiry : days;\n _.extend(this['props'], props);\n this.save();\n return true;\n }\n return false;\n};\nMixpanelPersistence.prototype.unregister = function (prop) {\n if (prop in this['props']) {\n delete this['props'][prop];\n this.save();\n }\n};\nMixpanelPersistence.prototype._expire_notification_campaigns = _.safewrap(function () {\n var campaigns_shown = this['props'][CAMPAIGN_IDS_KEY],\n EXPIRY_TIME = Config.DEBUG ? 60 * 1000 : 60 * 60 * 1000; // 1 minute (Config.DEBUG) / 1 hour (PDXN)\n if (!campaigns_shown) {\n return;\n }\n for (var campaign_id in campaigns_shown) {\n if (1 * new Date() - campaigns_shown[campaign_id] > EXPIRY_TIME) {\n delete campaigns_shown[campaign_id];\n }\n }\n if (_.isEmptyObject(campaigns_shown)) {\n delete this['props'][CAMPAIGN_IDS_KEY];\n }\n});\nMixpanelPersistence.prototype.update_campaign_params = function () {\n if (!this.campaign_params_saved) {\n this.register_once(_.info.campaignParams());\n this.campaign_params_saved = true;\n }\n};\nMixpanelPersistence.prototype.update_search_keyword = function (referrer) {\n this.register(_.info.searchInfo(referrer));\n};\n\n// EXPORTED METHOD, we test this directly.\nMixpanelPersistence.prototype.update_referrer_info = function (referrer) {\n // If referrer doesn't exist, we want to note the fact that it was type-in traffic.\n this.register_once({\n '$initial_referrer': referrer || '$direct',\n '$initial_referring_domain': _.info.referringDomain(referrer) || '$direct'\n }, '');\n};\nMixpanelPersistence.prototype.get_referrer_info = function () {\n return _.strip_empty_properties({\n '$initial_referrer': this['props']['$initial_referrer'],\n '$initial_referring_domain': this['props']['$initial_referring_domain']\n });\n};\n\n// safely fills the passed in object with stored properties,\n// does not override any properties defined in both\n// returns the passed in object\nMixpanelPersistence.prototype.safe_merge = function (props) {\n _.each(this['props'], function (val, prop) {\n if (!(prop in props)) {\n props[prop] = val;\n }\n });\n return props;\n};\nMixpanelPersistence.prototype.update_config = function (config) {\n this.default_expiry = this.expire_days = config['cookie_expiration'];\n this.set_disabled(config['disable_persistence']);\n this.set_cookie_domain(config['cookie_domain']);\n this.set_cross_site(config['cross_site_cookie']);\n this.set_cross_subdomain(config['cross_subdomain_cookie']);\n this.set_secure(config['secure_cookie']);\n};\nMixpanelPersistence.prototype.set_disabled = function (disabled) {\n this.disabled = disabled;\n if (this.disabled) {\n this.remove();\n } else {\n this.save();\n }\n};\nMixpanelPersistence.prototype.set_cookie_domain = function (cookie_domain) {\n if (cookie_domain !== this.cookie_domain) {\n this.remove();\n this.cookie_domain = cookie_domain;\n this.save();\n }\n};\nMixpanelPersistence.prototype.set_cross_site = function (cross_site) {\n if (cross_site !== this.cross_site) {\n this.cross_site = cross_site;\n this.remove();\n this.save();\n }\n};\nMixpanelPersistence.prototype.set_cross_subdomain = function (cross_subdomain) {\n if (cross_subdomain !== this.cross_subdomain) {\n this.cross_subdomain = cross_subdomain;\n this.remove();\n this.save();\n }\n};\nMixpanelPersistence.prototype.get_cross_subdomain = function () {\n return this.cross_subdomain;\n};\nMixpanelPersistence.prototype.set_secure = function (secure) {\n if (secure !== this.secure) {\n this.secure = secure ? true : false;\n this.remove();\n this.save();\n }\n};\nMixpanelPersistence.prototype._add_to_people_queue = function (queue, data) {\n var q_key = this._get_queue_key(queue),\n q_data = data[queue],\n set_q = this._get_or_create_queue(SET_ACTION),\n set_once_q = this._get_or_create_queue(SET_ONCE_ACTION),\n unset_q = this._get_or_create_queue(UNSET_ACTION),\n add_q = this._get_or_create_queue(ADD_ACTION),\n union_q = this._get_or_create_queue(UNION_ACTION),\n remove_q = this._get_or_create_queue(REMOVE_ACTION, []),\n append_q = this._get_or_create_queue(APPEND_ACTION, []);\n if (q_key === SET_QUEUE_KEY) {\n // Update the set queue - we can override any existing values\n _.extend(set_q, q_data);\n // if there was a pending increment, override it\n // with the set.\n this._pop_from_people_queue(ADD_ACTION, q_data);\n // if there was a pending union, override it\n // with the set.\n this._pop_from_people_queue(UNION_ACTION, q_data);\n this._pop_from_people_queue(UNSET_ACTION, q_data);\n } else if (q_key === SET_ONCE_QUEUE_KEY) {\n // only queue the data if there is not already a set_once call for it.\n _.each(q_data, function (v, k) {\n if (!(k in set_once_q)) {\n set_once_q[k] = v;\n }\n });\n this._pop_from_people_queue(UNSET_ACTION, q_data);\n } else if (q_key === UNSET_QUEUE_KEY) {\n _.each(q_data, function (prop) {\n // undo previously-queued actions on this key\n _.each([set_q, set_once_q, add_q, union_q], function (enqueued_obj) {\n if (prop in enqueued_obj) {\n delete enqueued_obj[prop];\n }\n });\n _.each(append_q, function (append_obj) {\n if (prop in append_obj) {\n delete append_obj[prop];\n }\n });\n unset_q[prop] = true;\n });\n } else if (q_key === ADD_QUEUE_KEY) {\n _.each(q_data, function (v, k) {\n // If it exists in the set queue, increment\n // the value\n if (k in set_q) {\n set_q[k] += v;\n } else {\n // If it doesn't exist, update the add\n // queue\n if (!(k in add_q)) {\n add_q[k] = 0;\n }\n add_q[k] += v;\n }\n }, this);\n this._pop_from_people_queue(UNSET_ACTION, q_data);\n } else if (q_key === UNION_QUEUE_KEY) {\n _.each(q_data, function (v, k) {\n if (_.isArray(v)) {\n if (!(k in union_q)) {\n union_q[k] = [];\n }\n // We may send duplicates, the server will dedup them.\n union_q[k] = union_q[k].concat(v);\n }\n });\n this._pop_from_people_queue(UNSET_ACTION, q_data);\n } else if (q_key === REMOVE_QUEUE_KEY) {\n remove_q.push(q_data);\n this._pop_from_people_queue(APPEND_ACTION, q_data);\n } else if (q_key === APPEND_QUEUE_KEY) {\n append_q.push(q_data);\n this._pop_from_people_queue(UNSET_ACTION, q_data);\n }\n console.log('MIXPANEL PEOPLE REQUEST (QUEUED, PENDING IDENTIFY):');\n console.log(data);\n this.save();\n};\nMixpanelPersistence.prototype._pop_from_people_queue = function (queue, data) {\n var q = this._get_queue(queue);\n if (!_.isUndefined(q)) {\n _.each(data, function (v, k) {\n if (queue === APPEND_ACTION || queue === REMOVE_ACTION) {\n // list actions: only remove if both k+v match\n // e.g. remove should not override append in a case like\n // append({foo: 'bar'}); remove({foo: 'qux'})\n _.each(q, function (queued_action) {\n if (queued_action[k] === v) {\n delete queued_action[k];\n }\n });\n } else {\n delete q[k];\n }\n }, this);\n this.save();\n }\n};\nMixpanelPersistence.prototype._get_queue_key = function (queue) {\n if (queue === SET_ACTION) {\n return SET_QUEUE_KEY;\n } else if (queue === SET_ONCE_ACTION) {\n return SET_ONCE_QUEUE_KEY;\n } else if (queue === UNSET_ACTION) {\n return UNSET_QUEUE_KEY;\n } else if (queue === ADD_ACTION) {\n return ADD_QUEUE_KEY;\n } else if (queue === APPEND_ACTION) {\n return APPEND_QUEUE_KEY;\n } else if (queue === REMOVE_ACTION) {\n return REMOVE_QUEUE_KEY;\n } else if (queue === UNION_ACTION) {\n return UNION_QUEUE_KEY;\n } else {\n console.error('Invalid queue:', queue);\n }\n};\nMixpanelPersistence.prototype._get_queue = function (queue) {\n return this['props'][this._get_queue_key(queue)];\n};\nMixpanelPersistence.prototype._get_or_create_queue = function (queue, default_val) {\n var key = this._get_queue_key(queue);\n default_val = _.isUndefined(default_val) ? {} : default_val;\n return this['props'][key] || (this['props'][key] = default_val);\n};\nMixpanelPersistence.prototype.set_event_timer = function (event_name, timestamp) {\n var timers = this['props'][EVENT_TIMERS_KEY] || {};\n timers[event_name] = timestamp;\n this['props'][EVENT_TIMERS_KEY] = timers;\n this.save();\n};\nMixpanelPersistence.prototype.remove_event_timer = function (event_name) {\n var timers = this['props'][EVENT_TIMERS_KEY] || {};\n var timestamp = timers[event_name];\n if (!_.isUndefined(timestamp)) {\n delete this['props'][EVENT_TIMERS_KEY][event_name];\n this.save();\n }\n return timestamp;\n};\n\n/*\n * This file is a js implementation for a subset in eval_node.c\n */\n\n/*\n * Constants\n */\n// Metadata keys\n/** @const */\nvar OPERATOR_KEY = 'operator';\n/** @const */\nvar PROPERTY_KEY = 'property';\n/** @const */\nvar WINDOW_KEY = 'window';\n/** @const */\nvar UNIT_KEY = 'unit';\n/** @const */\nvar VALUE_KEY = 'value';\n/** @const */\nvar HOUR_KEY = 'hour';\n/** @const */\nvar DAY_KEY = 'day';\n/** @const */\nvar WEEK_KEY = 'week';\n/** @const */\nvar MONTH_KEY = 'month';\n\n// Operands\n/** @const */\nvar EVENT_PROPERTY = 'event';\n/** @const */\nvar LITERAL_PROPERTY = 'literal';\n\n// Binary Operators\n/** @const */\nvar AND_OPERATOR = 'and';\n/** @const */\nvar OR_OPERATOR = 'or';\n/** @const */\nvar IN_OPERATOR = 'in';\n/** @const */\nvar NOT_IN_OPERATOR = 'not in';\n/** @const */\nvar PLUS_OPERATOR = '+';\n/** @const */\nvar MINUS_OPERATOR = '-';\n/** @const */\nvar MUL_OPERATOR = '*';\n/** @const */\nvar DIV_OPERATOR = '/';\n/** @const */\nvar MOD_OPERATOR = '%';\n/** @const */\nvar EQUALS_OPERATOR = '==';\n/** @const */\nvar NOT_EQUALS_OPERATOR = '!=';\n/** @const */\nvar GREATER_OPERATOR = '>';\n/** @const */\nvar LESS_OPERATOR = '<';\n/** @const */\nvar GREATER_EQUAL_OPERATOR = '>=';\n/** @const */\nvar LESS_EQUAL_OPERATOR = '<=';\n\n// Typecast Operators\n/** @const */\nvar BOOLEAN_OPERATOR = 'boolean';\n/** @const */\nvar DATETIME_OPERATOR = 'datetime';\n/** @const */\nvar LIST_OPERATOR = 'list';\n/** @const */\nvar NUMBER_OPERATOR = 'number';\n/** @const */\nvar STRING_OPERATOR = 'string';\n\n// Unary Operators\n/** @const */\nvar NOT_OPERATOR = 'not';\n/** @const */\nvar DEFINED_OPERATOR = 'defined';\n/** @const */\nvar NOT_DEFINED_OPERATOR = 'not defined';\n\n// Special literals\n/** @const */\nvar NOW_LITERAL = 'now';\n\n// Type cast functions\nfunction toNumber(value) {\n if (value === null) {\n return null;\n }\n switch (_typeof(value)) {\n case 'object':\n if (_.isDate(value) && value.getTime() >= 0) {\n return value.getTime();\n }\n return null;\n case 'boolean':\n return Number(value);\n case 'number':\n return value;\n case 'string':\n value = Number(value);\n if (!isNaN(value)) {\n return value;\n }\n return 0;\n }\n return null;\n}\nfunction evaluateNumber(op, properties) {\n if (!op['operator'] || op['operator'] !== NUMBER_OPERATOR || !op['children'] || op['children'].length !== 1) {\n throw 'Invalid cast operator: number ' + op;\n }\n return toNumber(evaluateSelector(op['children'][0], properties));\n}\nfunction toBoolean(value) {\n if (value === null) {\n return false;\n }\n switch (_typeof(value)) {\n case 'boolean':\n return value;\n case 'number':\n return value !== 0.0;\n case 'string':\n return value.length > 0;\n case 'object':\n if (_.isArray(value) && value.length > 0) {\n return true;\n }\n if (_.isDate(value) && value.getTime() > 0) {\n return true;\n }\n if (_.isObject(value) && !_.isEmptyObject(value)) {\n return true;\n }\n return false;\n }\n return false;\n}\nfunction evaluateBoolean(op, properties) {\n if (!op['operator'] || op['operator'] !== BOOLEAN_OPERATOR || !op['children'] || op['children'].length !== 1) {\n throw 'Invalid cast operator: boolean ' + op;\n }\n return toBoolean(evaluateSelector(op['children'][0], properties));\n}\nfunction evaluateDateTime(op, properties) {\n if (!op['operator'] || op['operator'] !== DATETIME_OPERATOR || !op['children'] || op['children'].length !== 1) {\n throw 'Invalid cast operator: datetime ' + op;\n }\n var v = evaluateSelector(op['children'][0], properties);\n if (v === null) {\n return null;\n }\n switch (_typeof(v)) {\n case 'number':\n case 'string':\n var d = new Date(v);\n if (isNaN(d.getTime())) {\n return null;\n }\n return d;\n case 'object':\n if (_.isDate(v)) {\n return v;\n }\n }\n return null;\n}\nfunction evaluateList(op, properties) {\n if (!op['operator'] || op['operator'] !== LIST_OPERATOR || !op['children'] || op['children'].length !== 1) {\n throw 'Invalid cast operator: list ' + op;\n }\n var v = evaluateSelector(op['children'][0], properties);\n if (v === null) {\n return null;\n }\n if (_.isArray(v)) {\n return v;\n }\n return null;\n}\nfunction evaluateString(op, properties) {\n if (!op['operator'] || op['operator'] !== STRING_OPERATOR || !op['children'] || op['children'].length !== 1) {\n throw 'Invalid cast operator: string ' + op;\n }\n var v = evaluateSelector(op['children'][0], properties);\n switch (_typeof(v)) {\n case 'object':\n if (_.isDate(v)) {\n return v.toJSON();\n }\n return JSON.stringify(v);\n }\n return String(v);\n}\n\n// Operators\nfunction evaluateAnd(op, properties) {\n if (!op['operator'] || op['operator'] !== AND_OPERATOR || !op['children'] || op['children'].length !== 2) {\n throw 'Invalid operator: AND ' + op;\n }\n return toBoolean(evaluateSelector(op['children'][0], properties)) && toBoolean(evaluateSelector(op['children'][1], properties));\n}\nfunction evaluateOr(op, properties) {\n if (!op['operator'] || op['operator'] !== OR_OPERATOR || !op['children'] || op['children'].length !== 2) {\n throw 'Invalid operator: OR ' + op;\n }\n return toBoolean(evaluateSelector(op['children'][0], properties)) || toBoolean(evaluateSelector(op['children'][1], properties));\n}\nfunction evaluateIn(op, properties) {\n if (!op['operator'] || [IN_OPERATOR, NOT_IN_OPERATOR].indexOf(op['operator']) === -1 || !op['children'] || op['children'].length !== 2) {\n throw 'Invalid operator: IN/NOT IN ' + op;\n }\n var leftValue = evaluateSelector(op['children'][0], properties);\n var rightValue = evaluateSelector(op['children'][1], properties);\n if (!_.isArray(rightValue) && !_.isString(rightValue)) {\n throw 'Invalid operand for operator IN: invalid type' + rightValue;\n }\n var v = rightValue.indexOf(leftValue) > -1;\n if (op['operator'] === NOT_IN_OPERATOR) {\n return !v;\n }\n return v;\n}\nfunction evaluatePlus(op, properties) {\n if (!op['operator'] || op['operator'] !== PLUS_OPERATOR || !op['children'] || op['children'].length < 2) {\n throw 'Invalid operator: PLUS ' + op;\n }\n var l = evaluateSelector(op['children'][0], properties);\n var r = evaluateSelector(op['children'][1], properties);\n if (typeof l === 'number' && typeof r === 'number') {\n return l + r;\n }\n if (typeof l === 'string' && typeof r === 'string') {\n return l + r;\n }\n return null;\n}\nfunction evaluateArithmetic(op, properties) {\n if (!op['operator'] || [MINUS_OPERATOR, MUL_OPERATOR, DIV_OPERATOR, MOD_OPERATOR].indexOf(op['operator']) === -1 || !op['children'] || op['children'].length < 2) {\n throw 'Invalid arithmetic operator ' + op;\n }\n var l = evaluateSelector(op['children'][0], properties);\n var r = evaluateSelector(op['children'][1], properties);\n if (typeof l === 'number' && typeof r === 'number') {\n switch (op['operator']) {\n case MINUS_OPERATOR:\n return l - r;\n case MUL_OPERATOR:\n return l * r;\n case DIV_OPERATOR:\n if (r !== 0) {\n return l / r;\n }\n return null;\n case MOD_OPERATOR:\n if (r === 0) {\n return null;\n }\n if (l === 0) {\n return 0;\n }\n if (l < 0 && r > 0 || l > 0 && r < 0) {\n /* Mimic python modulo - result takes sign of the divisor\n * if one operand is negative. */\n return -(Math.floor(l / r) * r - l);\n }\n return l % r;\n default:\n throw 'Unknown operator: ' + op['operator'];\n }\n }\n return null;\n}\nfunction _isArrayEqual(l, r) {\n if (l === r) return true;\n if (l === null || r === null) return false;\n if (l.length !== r.length) return false;\n for (var i = 0; i < l.length; i++) {\n if (l[i] !== r[i]) {\n return false;\n }\n }\n return true;\n}\nfunction _isEqual(l, r) {\n if (l === null && l === r) {\n return true;\n }\n if (_typeof(l) === _typeof(r)) {\n switch (_typeof(l)) {\n case 'number':\n case 'string':\n case 'boolean':\n return l === r;\n case 'object':\n if (_.isArray(l) && _.isArray(r)) {\n return _isArrayEqual(l, r);\n }\n if (_.isDate(l) && _.isDate(r)) {\n return l.getTime() === r.getTime();\n }\n if (_.isObject(l) && _.isObject(r)) {\n return JSON.stringify(l) === JSON.stringify(r);\n }\n }\n }\n return false;\n}\nfunction evaluateEquality(op, properties) {\n if (!op['operator'] || [EQUALS_OPERATOR, NOT_EQUALS_OPERATOR].indexOf(op['operator']) === -1 || !op['children'] || op['children'].length !== 2) {\n throw 'Invalid equality operator ' + op;\n }\n var v = _isEqual(evaluateSelector(op['children'][0], properties), evaluateSelector(op['children'][1], properties));\n switch (op['operator']) {\n case EQUALS_OPERATOR:\n return v;\n case NOT_EQUALS_OPERATOR:\n return !v;\n }\n}\nfunction evaluateComparison(op, properties) {\n if (!op['operator'] || [GREATER_OPERATOR, GREATER_EQUAL_OPERATOR, LESS_OPERATOR, LESS_EQUAL_OPERATOR].indexOf(op['operator']) === -1 || !op['children'] || op['children'].length !== 2) {\n throw 'Invalid comparison operator ' + op;\n }\n var l = evaluateSelector(op['children'][0], properties);\n var r = evaluateSelector(op['children'][1], properties);\n if (_typeof(l) === _typeof(r)) {\n if (typeof r === 'number' || _.isDate(r)) {\n l = toNumber(l);\n r = toNumber(r);\n switch (op['operator']) {\n case GREATER_OPERATOR:\n return l > r;\n case GREATER_EQUAL_OPERATOR:\n return l >= r;\n case LESS_OPERATOR:\n return l < r;\n case LESS_EQUAL_OPERATOR:\n return l <= r;\n }\n } else if (typeof r === 'string') {\n var compare = l.localeCompare(r);\n switch (op['operator']) {\n case GREATER_OPERATOR:\n return compare > 0;\n case GREATER_EQUAL_OPERATOR:\n return compare >= 0;\n case LESS_OPERATOR:\n return compare < 0;\n case LESS_EQUAL_OPERATOR:\n return compare <= 0;\n }\n }\n }\n return null;\n}\nfunction evaluateDefined(op, properties) {\n if (!op['operator'] || [DEFINED_OPERATOR, NOT_DEFINED_OPERATOR].indexOf(op['operator']) === -1 || !op['children'] || op['children'].length !== 1) {\n throw 'Invalid defined/not defined operator: ' + op;\n }\n var b = evaluateSelector(op['children'][0], properties) !== null;\n if (op['operator'] === NOT_DEFINED_OPERATOR) {\n return !b;\n }\n return b;\n}\nfunction evaluateNot(op, properties) {\n if (!op['operator'] || op['operator'] !== NOT_OPERATOR || !op['children'] || op['children'].length !== 1) {\n throw 'Invalid not operator: ' + op;\n }\n var v = evaluateSelector(op['children'][0], properties);\n if (v === null) {\n return true;\n }\n if (typeof v === 'boolean') {\n return !v;\n }\n return null;\n}\nfunction evaluateOperator(op, properties) {\n if (!op['operator']) {\n throw 'Invalid operator: operator key missing ' + op;\n }\n switch (op['operator']) {\n case AND_OPERATOR:\n return evaluateAnd(op, properties);\n case OR_OPERATOR:\n return evaluateOr(op, properties);\n case IN_OPERATOR:\n case NOT_IN_OPERATOR:\n return evaluateIn(op, properties);\n case PLUS_OPERATOR:\n return evaluatePlus(op, properties);\n case MINUS_OPERATOR:\n case MUL_OPERATOR:\n case DIV_OPERATOR:\n case MOD_OPERATOR:\n return evaluateArithmetic(op, properties);\n case EQUALS_OPERATOR:\n case NOT_EQUALS_OPERATOR:\n return evaluateEquality(op, properties);\n case GREATER_OPERATOR:\n case LESS_OPERATOR:\n case GREATER_EQUAL_OPERATOR:\n case LESS_EQUAL_OPERATOR:\n return evaluateComparison(op, properties);\n case BOOLEAN_OPERATOR:\n return evaluateBoolean(op, properties);\n case DATETIME_OPERATOR:\n return evaluateDateTime(op, properties);\n case LIST_OPERATOR:\n return evaluateList(op, properties);\n case NUMBER_OPERATOR:\n return evaluateNumber(op, properties);\n case STRING_OPERATOR:\n return evaluateString(op, properties);\n case DEFINED_OPERATOR:\n case NOT_DEFINED_OPERATOR:\n return evaluateDefined(op, properties);\n case NOT_OPERATOR:\n return evaluateNot(op, properties);\n }\n}\nfunction evaluateWindow(value) {\n var win = value[WINDOW_KEY];\n if (!win || !win[UNIT_KEY] || !win[VALUE_KEY]) {\n throw 'Invalid window: missing required keys ' + JSON.stringify(value);\n }\n var out = new Date();\n switch (win[UNIT_KEY]) {\n case HOUR_KEY:\n out.setTime(out.getTime() + win[VALUE_KEY] * -1 * 60 * 60 * 1000);\n break;\n case DAY_KEY:\n out.setTime(out.getTime() + win[VALUE_KEY] * -1 * 24 * 60 * 60 * 1000);\n break;\n case WEEK_KEY:\n out.setTime(out.getTime() + win[VALUE_KEY] * -1 * 7 * 24 * 60 * 60 * 1000);\n break;\n case MONTH_KEY:\n out.setTime(out.getTime() + win[VALUE_KEY] * -1 * 30 * 24 * 60 * 60 * 1000);\n break;\n default:\n throw 'Invalid unit: ' + win[UNIT_KEY];\n }\n return out;\n}\nfunction evaluateOperand(op, properties) {\n if (!op['property'] || !op['value']) {\n throw 'Invalid operand: missing required keys ' + op;\n }\n switch (op['property']) {\n case EVENT_PROPERTY:\n if (properties[op['value']] !== undefined) {\n return properties[op['value']];\n }\n return null;\n case LITERAL_PROPERTY:\n if (op['value'] === NOW_LITERAL) {\n return new Date();\n }\n if (_typeof(op['value']) === 'object') {\n return evaluateWindow(op['value']);\n }\n return op['value'];\n default:\n throw 'Invalid operand: Invalid property type ' + op['property'];\n }\n}\nfunction evaluateSelector(filters, properties) {\n if (filters[PROPERTY_KEY]) {\n return evaluateOperand(filters, properties);\n }\n if (filters[OPERATOR_KEY]) {\n return evaluateOperator(filters, properties);\n }\n}\n\n// Internal class for notification display\n\nvar MixpanelNotification = function MixpanelNotification(notif_data, mixpanel_instance) {\n _.bind_instance_methods(this);\n this.mixpanel = mixpanel_instance;\n this.persistence = this.mixpanel['persistence'];\n this.resource_protocol = this.mixpanel.get_config('inapp_protocol');\n this.cdn_host = this.mixpanel.get_config('cdn');\n this.campaign_id = _.escapeHTML(notif_data['id']);\n this.message_id = _.escapeHTML(notif_data['message_id']);\n this.body = (_.escapeHTML(notif_data['body']) || '').replace(/\\n/g, '
');\n this.cta = _.escapeHTML(notif_data['cta']) || 'Close';\n this.notif_type = _.escapeHTML(notif_data['type']) || 'takeover';\n this.style = _.escapeHTML(notif_data['style']) || 'light';\n this.title = _.escapeHTML(notif_data['title']) || '';\n this.video_width = MixpanelNotification.VIDEO_WIDTH;\n this.video_height = MixpanelNotification.VIDEO_HEIGHT;\n this.display_triggers = notif_data['display_triggers'] || [];\n\n // These fields are url-sanitized in the backend already.\n this.dest_url = notif_data['cta_url'] || null;\n this.image_url = notif_data['image_url'] || null;\n this.thumb_image_url = notif_data['thumb_image_url'] || null;\n this.video_url = notif_data['video_url'] || null;\n if (this.thumb_image_url && this.thumb_image_url.indexOf('//') === 0) {\n this.thumb_image_url = this.thumb_image_url.replace('//', this.resource_protocol);\n }\n this.clickthrough = true;\n if (!this.dest_url) {\n this.dest_url = '#dismiss';\n this.clickthrough = false;\n }\n this.mini = this.notif_type === 'mini';\n if (!this.mini) {\n this.notif_type = 'takeover';\n }\n this.notif_width = !this.mini ? MixpanelNotification.NOTIF_WIDTH : MixpanelNotification.NOTIF_WIDTH_MINI;\n this._set_client_config();\n this.imgs_to_preload = this._init_image_html();\n this._init_video();\n};\nMixpanelNotification.ANIM_TIME = 200;\nMixpanelNotification.MARKUP_PREFIX = 'mixpanel-notification';\nMixpanelNotification.BG_OPACITY = 0.6;\nMixpanelNotification.NOTIF_TOP = 25;\nMixpanelNotification.NOTIF_START_TOP = 200;\nMixpanelNotification.NOTIF_WIDTH = 388;\nMixpanelNotification.NOTIF_WIDTH_MINI = 420;\nMixpanelNotification.NOTIF_HEIGHT_MINI = 85;\nMixpanelNotification.THUMB_BORDER_SIZE = 5;\nMixpanelNotification.THUMB_IMG_SIZE = 60;\nMixpanelNotification.THUMB_OFFSET = Math.round(MixpanelNotification.THUMB_IMG_SIZE / 2);\nMixpanelNotification.VIDEO_WIDTH = 595;\nMixpanelNotification.VIDEO_HEIGHT = 334;\nMixpanelNotification.prototype.show = function () {\n var self = this;\n this._set_client_config();\n\n // don't display until HTML body exists\n if (!this.body_el) {\n setTimeout(function () {\n self.show();\n }, 300);\n return;\n }\n this._init_styles();\n this._init_notification_el();\n\n // wait for any images to load before showing notification\n this._preload_images(this._attach_and_animate);\n};\nMixpanelNotification.prototype.dismiss = _.safewrap(function () {\n if (!this.marked_as_shown) {\n // unexpected condition: user interacted with notif even though we didn't consider it\n // visible (see _mark_as_shown()); send tracking signals to mark delivery\n this._mark_delivery({\n 'invisible': true\n });\n }\n var exiting_el = this.showing_video ? this._get_el('video') : this._get_notification_display_el();\n if (this.use_transitions) {\n this._remove_class('bg', 'visible');\n this._add_class(exiting_el, 'exiting');\n setTimeout(this._remove_notification_el, MixpanelNotification.ANIM_TIME);\n } else {\n var notif_attr, notif_start, notif_goal;\n if (this.mini) {\n notif_attr = 'right';\n notif_start = 20;\n notif_goal = -100;\n } else {\n notif_attr = 'top';\n notif_start = MixpanelNotification.NOTIF_TOP;\n notif_goal = MixpanelNotification.NOTIF_START_TOP + MixpanelNotification.NOTIF_TOP;\n }\n this._animate_els([{\n el: this._get_el('bg'),\n attr: 'opacity',\n start: MixpanelNotification.BG_OPACITY,\n goal: 0.0\n }, {\n el: exiting_el,\n attr: 'opacity',\n start: 1.0,\n goal: 0.0\n }, {\n el: exiting_el,\n attr: notif_attr,\n start: notif_start,\n goal: notif_goal\n }], MixpanelNotification.ANIM_TIME, this._remove_notification_el);\n }\n});\nMixpanelNotification.prototype._add_class = _.safewrap(function (el, class_name) {\n class_name = MixpanelNotification.MARKUP_PREFIX + '-' + class_name;\n if (typeof el === 'string') {\n el = this._get_el(el);\n }\n if (!el.className) {\n el.className = class_name;\n } else if (!~(' ' + el.className + ' ').indexOf(' ' + class_name + ' ')) {\n el.className += ' ' + class_name;\n }\n});\nMixpanelNotification.prototype._remove_class = _.safewrap(function (el, class_name) {\n class_name = MixpanelNotification.MARKUP_PREFIX + '-' + class_name;\n if (typeof el === 'string') {\n el = this._get_el(el);\n }\n if (el.className) {\n el.className = (' ' + el.className + ' ').replace(' ' + class_name + ' ', '').replace(/^[\\s\\xA0]+/, '').replace(/[\\s\\xA0]+$/, '');\n }\n});\nMixpanelNotification.prototype._animate_els = _.safewrap(function (anims, mss, done_cb, start_time) {\n var self = this,\n in_progress = false,\n ai,\n anim,\n cur_time = 1 * new Date(),\n time_diff;\n start_time = start_time || cur_time;\n time_diff = cur_time - start_time;\n for (ai = 0; ai < anims.length; ai++) {\n anim = anims[ai];\n if (typeof anim.val === 'undefined') {\n anim.val = anim.start;\n }\n if (anim.val !== anim.goal) {\n in_progress = true;\n var anim_diff = anim.goal - anim.start,\n anim_dir = anim.goal >= anim.start ? 1 : -1;\n anim.val = anim.start + anim_diff * time_diff / mss;\n if (anim.attr !== 'opacity') {\n anim.val = Math.round(anim.val);\n }\n if (anim_dir > 0 && anim.val >= anim.goal || anim_dir < 0 && anim.val <= anim.goal) {\n anim.val = anim.goal;\n }\n }\n }\n if (!in_progress) {\n if (done_cb) {\n done_cb();\n }\n return;\n }\n for (ai = 0; ai < anims.length; ai++) {\n anim = anims[ai];\n if (anim.el) {\n var suffix = anim.attr === 'opacity' ? '' : 'px';\n anim.el.style[anim.attr] = String(anim.val) + suffix;\n }\n }\n setTimeout(function () {\n self._animate_els(anims, mss, done_cb, start_time);\n }, 10);\n});\nMixpanelNotification.prototype._attach_and_animate = _.safewrap(function () {\n var self = this;\n\n // no possibility to double-display\n if (this.shown || this._get_shown_campaigns()[this.campaign_id]) {\n return;\n }\n this.shown = true;\n this.body_el.appendChild(this.notification_el);\n setTimeout(function () {\n var notif_el = self._get_notification_display_el();\n if (self.use_transitions) {\n if (!self.mini) {\n self._add_class('bg', 'visible');\n }\n self._add_class(notif_el, 'visible');\n self._mark_as_shown();\n } else {\n var notif_attr, notif_start, notif_goal;\n if (self.mini) {\n notif_attr = 'right';\n notif_start = -100;\n notif_goal = 20;\n } else {\n notif_attr = 'top';\n notif_start = MixpanelNotification.NOTIF_START_TOP + MixpanelNotification.NOTIF_TOP;\n notif_goal = MixpanelNotification.NOTIF_TOP;\n }\n self._animate_els([{\n el: self._get_el('bg'),\n attr: 'opacity',\n start: 0.0,\n goal: MixpanelNotification.BG_OPACITY\n }, {\n el: notif_el,\n attr: 'opacity',\n start: 0.0,\n goal: 1.0\n }, {\n el: notif_el,\n attr: notif_attr,\n start: notif_start,\n goal: notif_goal\n }], MixpanelNotification.ANIM_TIME, self._mark_as_shown);\n }\n }, 100);\n _.register_event(self._get_el('cancel'), 'click', function (e) {\n e.preventDefault();\n self.dismiss();\n });\n var click_el = self._get_el('button') || self._get_el('mini-content');\n _.register_event(click_el, 'click', function (e) {\n e.preventDefault();\n if (self.show_video) {\n self._track_event('$campaign_open', {\n '$resource_type': 'video'\n });\n self._switch_to_video();\n } else {\n self.dismiss();\n if (self.clickthrough) {\n var tracking_cb = null;\n if (self.mixpanel.get_config('inapp_link_new_window')) {\n window.open(self.dest_url);\n } else {\n tracking_cb = function tracking_cb() {\n window.location.href = self.dest_url;\n };\n }\n self._track_event('$campaign_open', {\n '$resource_type': 'link'\n }, tracking_cb);\n }\n }\n });\n});\nMixpanelNotification.prototype._get_el = function (id) {\n return document.getElementById(MixpanelNotification.MARKUP_PREFIX + '-' + id);\n};\nMixpanelNotification.prototype._get_notification_display_el = function () {\n return this._get_el(this.notif_type);\n};\nMixpanelNotification.prototype._get_shown_campaigns = function () {\n return this.persistence['props'][CAMPAIGN_IDS_KEY] || (this.persistence['props'][CAMPAIGN_IDS_KEY] = {});\n};\nMixpanelNotification.prototype._matches_event_data = _.safewrap(function (event_data) {\n var event_name = event_data['event'] || '';\n for (var i = 0; i < this.display_triggers.length; i++) {\n var display_trigger = this.display_triggers[i];\n var match_event = display_trigger['event'] || '';\n if (match_event === '$any_event' || event_name === display_trigger['event']) {\n if (display_trigger['selector'] && !_.isEmptyObject(display_trigger['selector'])) {\n if (evaluateSelector(display_trigger['selector'], event_data['properties'])) {\n return true;\n }\n } else {\n return true;\n }\n }\n }\n return false;\n});\nMixpanelNotification.prototype._browser_lte = function (browser, version) {\n return this.browser_versions[browser] && this.browser_versions[browser] <= version;\n};\nMixpanelNotification.prototype._init_image_html = function () {\n var imgs_to_preload = [];\n if (!this.mini) {\n if (this.image_url) {\n imgs_to_preload.push(this.image_url);\n this.img_html = '';\n } else {\n this.img_html = '';\n }\n if (this.thumb_image_url) {\n imgs_to_preload.push(this.thumb_image_url);\n this.thumb_img_html = '