{"version":3,"file":"application-add79529.js","sources":["../../../node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","../../../node_modules/@alpinejs/focus/dist/module.esm.js","../../../app/webpacker/javascript/directUploads.js","../../../app/webpacker/javascript/discounts.js","../../../app/webpacker/javascript/dismissable.js","../../../app/webpacker/javascript/readMore.js","../../../app/webpacker/javascript/remoteForms.js","../../../app/webpacker/javascript/docPreview.js","../../../app/webpacker/javascript/selectBestNotesFile.js","../../../app/webpacker/javascript/trackFileDownload.js","../../../app/webpacker/javascript/tutors.js","../../../app/webpacker/javascript/installOnDom.js","../../../app/webpacker/javascript/infinite_scroll.js","../../../app/frontend/entrypoints/application.js"],"sourcesContent":["/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/assets/javascripts\nReleased under the MIT license\n */;\n\n(function() {\n var context = this;\n\n (function() {\n (function() {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n\n }).call(this);\n }).call(context);\n\n var Rails = context.Rails;\n\n (function() {\n (function() {\n var nonce;\n\n nonce = null;\n\n Rails.loadCSPNonce = function() {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function() {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n\n }).call(this);\n (function() {\n var expando, m;\n\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function(element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function(element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function(element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n return element[expando][key] = value;\n };\n\n Rails.$ = function(selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n\n }).call(this);\n (function() {\n var $, csrfParam, csrfToken;\n\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function() {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function() {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function(xhr) {\n var token;\n token = csrfToken();\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function() {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n if ((token != null) && (param != null)) {\n return $('form input[name=\"' + param + '\"]').forEach(function(input) {\n return input.value = token;\n });\n }\n };\n\n }).call(this);\n (function() {\n var CustomEvent, fire, matches, preventDefault;\n\n matches = Rails.matches;\n\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n CustomEvent.prototype.preventDefault = function() {\n var result;\n result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function() {\n return true;\n }\n });\n }\n return result;\n };\n }\n\n fire = Rails.fire = function(obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function(e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function(element, selector, eventType, handler) {\n return element.addEventListener(eventType, function(e) {\n var target;\n target = e.target;\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n\n }).call(this);\n (function() {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function(options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function() {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n if ((options.beforeSend != null) && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n return options;\n };\n\n createXHR = function(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function() {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n };\n\n processResponse = function(response, type) {\n var parser, script;\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n return response;\n };\n\n Rails.href = function(element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function(url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n try {\n urlAnchor.href = url;\n return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) || (originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host));\n } catch (error) {\n e = error;\n return true;\n }\n };\n\n }).call(this);\n (function() {\n var matches, toArray;\n\n matches = Rails.matches;\n\n toArray = function(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function(element, additionalParam) {\n var inputs, params;\n inputs = [element];\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n params = [];\n inputs.forEach(function(input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function(option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map(function(param) {\n if (param.name != null) {\n return (encodeURIComponent(param.name)) + \"=\" + (encodeURIComponent(param.value));\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function(form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function(el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n\n }).call(this);\n (function() {\n var allowAction, fire, stopEverything;\n\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function(e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function(message, element) {\n return confirm(message);\n };\n\n allowAction = function(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n if (!message) {\n return true;\n }\n answer = false;\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, 'confirm:complete', [answer]);\n }\n return answer && callback;\n };\n\n }).call(this);\n (function() {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function(e) {\n var element;\n element = this;\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function(e) {\n var element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\n }\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function(e) {\n var element;\n element = e instanceof Event ? e.target : e;\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function(element) {\n var replacement;\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function(element) {\n var replacement;\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, 'ujs:enable-with', null);\n }\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n\n }).call(this);\n (function() {\n var stopEverything;\n\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function(e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n if (!method) {\n return;\n }\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n if ((csrfParam != null) && (csrfToken != null) && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n\n }).call(this);\n (function() {\n var ajax, fire, getData, isCrossDomain, isRemote, matches, serializeElement, setData, stopEverything,\n slice = [].slice;\n\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function(element) {\n var value;\n value = element.getAttribute('data-remote');\n return (value != null) && value !== 'false';\n };\n\n Rails.handleRemote = function(e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: (withCredentials != null) && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function(e) {\n var button, form;\n button = this;\n form = button.form;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function(e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = (e.button != null) && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n\n }).call(this);\n (function() {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if ((typeof jQuery !== \"undefined\" && jQuery !== null) && (jQuery.ajax != null)) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function() {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n window.addEventListener('pageshow', function() {\n $(Rails.formEnableSelector).forEach(function(el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function(el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function(e) {\n return setTimeout((function() {\n return disableElement(e);\n }), 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n\n }).call(this);\n }).call(this);\n\n if (typeof module === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);\n","// node_modules/tabbable/dist/index.esm.js\nvar candidateSelectors = [\"input\", \"select\", \"textarea\", \"a[href]\", \"button\", \"[tabindex]:not(slot)\", \"audio[controls]\", \"video[controls]\", '[contenteditable]:not([contenteditable=\"false\"])', \"details>summary:first-of-type\", \"details\"];\nvar candidateSelector = /* @__PURE__ */ candidateSelectors.join(\",\");\nvar NoElement = typeof Element === \"undefined\";\nvar matches = NoElement ? function() {\n} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function(element) {\n return element.getRootNode();\n} : function(element) {\n return element.ownerDocument;\n};\nvar getCandidates = function getCandidates2(el, includeContainer, filter) {\n var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\nvar getCandidatesIteratively = function getCandidatesIteratively2(elements, includeContainer, options) {\n var candidates = [];\n var elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n var element = elementsToCheck.shift();\n if (element.tagName === \"SLOT\") {\n var assigned = element.assignedElements();\n var content = assigned.length ? assigned : element.children;\n var nestedCandidates = getCandidatesIteratively2(content, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates\n });\n }\n } else {\n var validCandidate = matches.call(element, candidateSelector);\n if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n candidates.push(element);\n }\n var shadowRoot = element.shadowRoot || // check for an undisclosed shadow\n typeof options.getShadowRoot === \"function\" && options.getShadowRoot(element);\n var validShadowRoot = !options.shadowRootFilter || options.shadowRootFilter(element);\n if (shadowRoot && validShadowRoot) {\n var _nestedCandidates = getCandidatesIteratively2(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n if (options.flatten) {\n candidates.push.apply(candidates, _nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: _nestedCandidates\n });\n }\n } else {\n elementsToCheck.unshift.apply(elementsToCheck, element.children);\n }\n }\n }\n return candidates;\n};\nvar getTabindex = function getTabindex2(node, isScope) {\n if (node.tabIndex < 0) {\n if ((isScope || /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || node.isContentEditable) && isNaN(parseInt(node.getAttribute(\"tabindex\"), 10))) {\n return 0;\n }\n }\n return node.tabIndex;\n};\nvar sortOrderedTabbables = function sortOrderedTabbables2(a, b) {\n return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n};\nvar isInput = function isInput2(node) {\n return node.tagName === \"INPUT\";\n};\nvar isHiddenInput = function isHiddenInput2(node) {\n return isInput(node) && node.type === \"hidden\";\n};\nvar isDetailsWithSummary = function isDetailsWithSummary2(node) {\n var r = node.tagName === \"DETAILS\" && Array.prototype.slice.apply(node.children).some(function(child) {\n return child.tagName === \"SUMMARY\";\n });\n return r;\n};\nvar getCheckedRadio = function getCheckedRadio2(nodes, form) {\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].checked && nodes[i].form === form) {\n return nodes[i];\n }\n }\n};\nvar isTabbableRadio = function isTabbableRadio2(node) {\n if (!node.name) {\n return true;\n }\n var radioScope = node.form || getRootNode(node);\n var queryRadios = function queryRadios2(name) {\n return radioScope.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]');\n };\n var radioSet;\n if (typeof window !== \"undefined\" && typeof window.CSS !== \"undefined\" && typeof window.CSS.escape === \"function\") {\n radioSet = queryRadios(window.CSS.escape(node.name));\n } else {\n try {\n radioSet = queryRadios(node.name);\n } catch (err) {\n console.error(\"Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s\", err.message);\n return false;\n }\n }\n var checked = getCheckedRadio(radioSet, node.form);\n return !checked || checked === node;\n};\nvar isRadio = function isRadio2(node) {\n return isInput(node) && node.type === \"radio\";\n};\nvar isNonTabbableRadio = function isNonTabbableRadio2(node) {\n return isRadio(node) && !isTabbableRadio(node);\n};\nvar isZeroArea = function isZeroArea2(node) {\n var _node$getBoundingClie = node.getBoundingClientRect(), width = _node$getBoundingClie.width, height = _node$getBoundingClie.height;\n return width === 0 && height === 0;\n};\nvar isHidden = function isHidden2(node, _ref) {\n var displayCheck = _ref.displayCheck, getShadowRoot = _ref.getShadowRoot;\n if (getComputedStyle(node).visibility === \"hidden\") {\n return true;\n }\n var isDirectSummary = matches.call(node, \"details>summary:first-of-type\");\n var nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n if (matches.call(nodeUnderDetails, \"details:not([open]) *\")) {\n return true;\n }\n var nodeRootHost = getRootNode(node).host;\n var nodeIsAttached = (nodeRootHost === null || nodeRootHost === void 0 ? void 0 : nodeRootHost.ownerDocument.contains(nodeRootHost)) || node.ownerDocument.contains(node);\n if (!displayCheck || displayCheck === \"full\") {\n if (typeof getShadowRoot === \"function\") {\n var originalNode = node;\n while (node) {\n var parentElement = node.parentElement;\n var rootNode = getRootNode(node);\n if (parentElement && !parentElement.shadowRoot && getShadowRoot(parentElement) === true) {\n return isZeroArea(node);\n } else if (node.assignedSlot) {\n node = node.assignedSlot;\n } else if (!parentElement && rootNode !== node.ownerDocument) {\n node = rootNode.host;\n } else {\n node = parentElement;\n }\n }\n node = originalNode;\n }\n if (nodeIsAttached) {\n return !node.getClientRects().length;\n }\n } else if (displayCheck === \"non-zero-area\") {\n return isZeroArea(node);\n }\n return false;\n};\nvar isDisabledFromFieldset = function isDisabledFromFieldset2(node) {\n if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n var parentNode = node.parentElement;\n while (parentNode) {\n if (parentNode.tagName === \"FIELDSET\" && parentNode.disabled) {\n for (var i = 0; i < parentNode.children.length; i++) {\n var child = parentNode.children.item(i);\n if (child.tagName === \"LEGEND\") {\n return matches.call(parentNode, \"fieldset[disabled] *\") ? true : !child.contains(node);\n }\n }\n return true;\n }\n parentNode = parentNode.parentElement;\n }\n }\n return false;\n};\nvar isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable2(options, node) {\n if (node.disabled || isHiddenInput(node) || isHidden(node, options) || // For a details element with a summary, the summary element gets the focus\n isDetailsWithSummary(node) || isDisabledFromFieldset(node)) {\n return false;\n }\n return true;\n};\nvar isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable2(options, node) {\n if (isNonTabbableRadio(node) || getTabindex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) {\n return false;\n }\n return true;\n};\nvar isValidShadowRootTabbable = function isValidShadowRootTabbable2(shadowHostNode) {\n var tabIndex = parseInt(shadowHostNode.getAttribute(\"tabindex\"), 10);\n if (isNaN(tabIndex) || tabIndex >= 0) {\n return true;\n }\n return false;\n};\nvar sortByOrder = function sortByOrder2(candidates) {\n var regularTabbables = [];\n var orderedTabbables = [];\n candidates.forEach(function(item, i) {\n var isScope = !!item.scope;\n var element = isScope ? item.scope : item;\n var candidateTabindex = getTabindex(element, isScope);\n var elements = isScope ? sortByOrder2(item.candidates) : element;\n if (candidateTabindex === 0) {\n isScope ? regularTabbables.push.apply(regularTabbables, elements) : regularTabbables.push(element);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n item,\n isScope,\n content: elements\n });\n }\n });\n return orderedTabbables.sort(sortOrderedTabbables).reduce(function(acc, sortable) {\n sortable.isScope ? acc.push.apply(acc, sortable.content) : acc.push(sortable.content);\n return acc;\n }, []).concat(regularTabbables);\n};\nvar tabbable = function tabbable2(el, options) {\n options = options || {};\n var candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorTabbable.bind(null, options),\n flatten: false,\n getShadowRoot: options.getShadowRoot,\n shadowRootFilter: isValidShadowRootTabbable\n });\n } else {\n candidates = getCandidates(el, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));\n }\n return sortByOrder(candidates);\n};\nvar focusable = function focusable2(el, options) {\n options = options || {};\n var candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorFocusable.bind(null, options),\n flatten: true,\n getShadowRoot: options.getShadowRoot\n });\n } else {\n candidates = getCandidates(el, options.includeContainer, isNodeMatchingSelectorFocusable.bind(null, options));\n }\n return candidates;\n};\nvar isTabbable = function isTabbable2(node, options) {\n options = options || {};\n if (!node) {\n throw new Error(\"No node provided\");\n }\n if (matches.call(node, candidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorTabbable(options, node);\n};\nvar focusableCandidateSelector = /* @__PURE__ */ candidateSelectors.concat(\"iframe\").join(\",\");\nvar isFocusable = function isFocusable2(node, options) {\n options = options || {};\n if (!node) {\n throw new Error(\"No node provided\");\n }\n if (matches.call(node, focusableCandidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorFocusable(options, node);\n};\n\n// node_modules/focus-trap/dist/focus-trap.esm.js\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), true).forEach(function(key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nvar activeFocusTraps = function() {\n var trapQueue = [];\n return {\n activateTrap: function activateTrap(trap) {\n if (trapQueue.length > 0) {\n var activeTrap = trapQueue[trapQueue.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex === -1) {\n trapQueue.push(trap);\n } else {\n trapQueue.splice(trapIndex, 1);\n trapQueue.push(trap);\n }\n },\n deactivateTrap: function deactivateTrap(trap) {\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex !== -1) {\n trapQueue.splice(trapIndex, 1);\n }\n if (trapQueue.length > 0) {\n trapQueue[trapQueue.length - 1].unpause();\n }\n }\n };\n}();\nvar isSelectableInput = function isSelectableInput2(node) {\n return node.tagName && node.tagName.toLowerCase() === \"input\" && typeof node.select === \"function\";\n};\nvar isEscapeEvent = function isEscapeEvent2(e) {\n return e.key === \"Escape\" || e.key === \"Esc\" || e.keyCode === 27;\n};\nvar isTabEvent = function isTabEvent2(e) {\n return e.key === \"Tab\" || e.keyCode === 9;\n};\nvar delay = function delay2(fn) {\n return setTimeout(fn, 0);\n};\nvar findIndex = function findIndex2(arr, fn) {\n var idx = -1;\n arr.every(function(value, i) {\n if (fn(value)) {\n idx = i;\n return false;\n }\n return true;\n });\n return idx;\n};\nvar valueOrHandler = function valueOrHandler2(value) {\n for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n params[_key - 1] = arguments[_key];\n }\n return typeof value === \"function\" ? value.apply(void 0, params) : value;\n};\nvar getActualTarget = function getActualTarget2(event) {\n return event.target.shadowRoot && typeof event.composedPath === \"function\" ? event.composedPath()[0] : event.target;\n};\nvar createFocusTrap = function createFocusTrap2(elements, userOptions) {\n var doc = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.document) || document;\n var config = _objectSpread2({\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true\n }, userOptions);\n var state = {\n // containers given to createFocusTrap()\n // @type {Array}\n containers: [],\n // list of objects identifying tabbable nodes in `containers` in the trap\n // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n // is active, but the trap should never get to a state where there isn't at least one group\n // with at least one tabbable node in it (that would lead to an error condition that would\n // result in an error being thrown)\n // @type {Array<{\n // container: HTMLElement,\n // tabbableNodes: Array, // empty if none\n // focusableNodes: Array, // empty if none\n // firstTabbableNode: HTMLElement|null,\n // lastTabbableNode: HTMLElement|null,\n // nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n // }>}\n containerGroups: [],\n // same order/length as `containers` list\n // references to objects in `containerGroups`, but only those that actually have\n // tabbable nodes in them\n // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n // the same length\n tabbableGroups: [],\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n // timer ID for when delayInitialFocus is true and initial focus in this trap\n // has been delayed during activation\n delayInitialFocusTimer: void 0\n };\n var trap;\n var getOption = function getOption2(configOverrideOptions, optionName, configOptionName) {\n return configOverrideOptions && configOverrideOptions[optionName] !== void 0 ? configOverrideOptions[optionName] : config[configOptionName || optionName];\n };\n var findContainerIndex = function findContainerIndex2(element) {\n return state.containerGroups.findIndex(function(_ref) {\n var container = _ref.container, tabbableNodes = _ref.tabbableNodes;\n return container.contains(element) || // fall back to explicit tabbable search which will take into consideration any\n // web components if the `tabbableOptions.getShadowRoot` option was used for\n // the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n // look inside web components even if open)\n tabbableNodes.find(function(node) {\n return node === element;\n });\n });\n };\n var getNodeForOption = function getNodeForOption2(optionName) {\n var optionValue = config[optionName];\n if (typeof optionValue === \"function\") {\n for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n params[_key2 - 1] = arguments[_key2];\n }\n optionValue = optionValue.apply(void 0, params);\n }\n if (optionValue === true) {\n optionValue = void 0;\n }\n if (!optionValue) {\n if (optionValue === void 0 || optionValue === false) {\n return optionValue;\n }\n throw new Error(\"`\".concat(optionName, \"` was specified but was not a node, or did not return a node\"));\n }\n var node = optionValue;\n if (typeof optionValue === \"string\") {\n node = doc.querySelector(optionValue);\n if (!node) {\n throw new Error(\"`\".concat(optionName, \"` as selector refers to no known node\"));\n }\n }\n return node;\n };\n var getInitialFocusNode = function getInitialFocusNode2() {\n var node = getNodeForOption(\"initialFocus\");\n if (node === false) {\n return false;\n }\n if (node === void 0) {\n if (findContainerIndex(doc.activeElement) >= 0) {\n node = doc.activeElement;\n } else {\n var firstTabbableGroup = state.tabbableGroups[0];\n var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n node = firstTabbableNode || getNodeForOption(\"fallbackFocus\");\n }\n }\n if (!node) {\n throw new Error(\"Your focus-trap needs to have at least one focusable element\");\n }\n return node;\n };\n var updateTabbableNodes = function updateTabbableNodes2() {\n state.containerGroups = state.containers.map(function(container) {\n var tabbableNodes = tabbable(container, config.tabbableOptions);\n var focusableNodes = focusable(container, config.tabbableOptions);\n return {\n container,\n tabbableNodes,\n focusableNodes,\n firstTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[0] : null,\n lastTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[tabbableNodes.length - 1] : null,\n /**\n * Finds the __tabbable__ node that follows the given node in the specified direction,\n * in this container, if any.\n * @param {HTMLElement} node\n * @param {boolean} [forward] True if going in forward tab order; false if going\n * in reverse.\n * @returns {HTMLElement|undefined} The next tabbable node, if any.\n */\n nextTabbableNode: function nextTabbableNode(node) {\n var forward = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;\n var nodeIdx = focusableNodes.findIndex(function(n) {\n return n === node;\n });\n if (nodeIdx < 0) {\n return void 0;\n }\n if (forward) {\n return focusableNodes.slice(nodeIdx + 1).find(function(n) {\n return isTabbable(n, config.tabbableOptions);\n });\n }\n return focusableNodes.slice(0, nodeIdx).reverse().find(function(n) {\n return isTabbable(n, config.tabbableOptions);\n });\n }\n };\n });\n state.tabbableGroups = state.containerGroups.filter(function(group) {\n return group.tabbableNodes.length > 0;\n });\n if (state.tabbableGroups.length <= 0 && !getNodeForOption(\"fallbackFocus\")) {\n throw new Error(\"Your focus-trap must have at least one container with at least one tabbable node in it at all times\");\n }\n };\n var tryFocus = function tryFocus2(node) {\n if (node === false) {\n return;\n }\n if (node === doc.activeElement) {\n return;\n }\n if (!node || !node.focus) {\n tryFocus2(getInitialFocusNode());\n return;\n }\n node.focus({\n preventScroll: !!config.preventScroll\n });\n state.mostRecentlyFocusedNode = node;\n if (isSelectableInput(node)) {\n node.select();\n }\n };\n var getReturnFocusNode = function getReturnFocusNode2(previousActiveElement) {\n var node = getNodeForOption(\"setReturnFocus\", previousActiveElement);\n return node ? node : node === false ? false : previousActiveElement;\n };\n var checkPointerDown = function checkPointerDown2(e) {\n var target = getActualTarget(e);\n if (findContainerIndex(target) >= 0) {\n return;\n }\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n trap.deactivate({\n // if, on deactivation, we should return focus to the node originally-focused\n // when the trap was activated (or the configured `setReturnFocus` node),\n // then assume it's also OK to return focus to the outside node that was\n // just clicked, causing deactivation, as long as that node is focusable;\n // if it isn't focusable, then return focus to the original node focused\n // on activation (or the configured `setReturnFocus` node)\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked, whether it's focusable or not; by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node)\n returnFocus: config.returnFocusOnDeactivate && !isFocusable(target, config.tabbableOptions)\n });\n return;\n }\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n e.preventDefault();\n };\n var checkFocusIn = function checkFocusIn2(e) {\n var target = getActualTarget(e);\n var targetContained = findContainerIndex(target) >= 0;\n if (targetContained || target instanceof Document) {\n if (targetContained) {\n state.mostRecentlyFocusedNode = target;\n }\n } else {\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n };\n var checkTab = function checkTab2(e) {\n var target = getActualTarget(e);\n updateTabbableNodes();\n var destinationNode = null;\n if (state.tabbableGroups.length > 0) {\n var containerIndex = findContainerIndex(target);\n var containerGroup = containerIndex >= 0 ? state.containerGroups[containerIndex] : void 0;\n if (containerIndex < 0) {\n if (e.shiftKey) {\n destinationNode = state.tabbableGroups[state.tabbableGroups.length - 1].lastTabbableNode;\n } else {\n destinationNode = state.tabbableGroups[0].firstTabbableNode;\n }\n } else if (e.shiftKey) {\n var startOfGroupIndex = findIndex(state.tabbableGroups, function(_ref2) {\n var firstTabbableNode = _ref2.firstTabbableNode;\n return target === firstTabbableNode;\n });\n if (startOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target, false))) {\n startOfGroupIndex = containerIndex;\n }\n if (startOfGroupIndex >= 0) {\n var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1;\n var destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.lastTabbableNode;\n }\n } else {\n var lastOfGroupIndex = findIndex(state.tabbableGroups, function(_ref3) {\n var lastTabbableNode = _ref3.lastTabbableNode;\n return target === lastTabbableNode;\n });\n if (lastOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target))) {\n lastOfGroupIndex = containerIndex;\n }\n if (lastOfGroupIndex >= 0) {\n var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1;\n var _destinationGroup = state.tabbableGroups[_destinationGroupIndex];\n destinationNode = _destinationGroup.firstTabbableNode;\n }\n }\n } else {\n destinationNode = getNodeForOption(\"fallbackFocus\");\n }\n if (destinationNode) {\n e.preventDefault();\n tryFocus(destinationNode);\n }\n };\n var checkKey = function checkKey2(e) {\n if (isEscapeEvent(e) && valueOrHandler(config.escapeDeactivates, e) !== false) {\n e.preventDefault();\n trap.deactivate();\n return;\n }\n if (isTabEvent(e)) {\n checkTab(e);\n return;\n }\n };\n var checkClick = function checkClick2(e) {\n var target = getActualTarget(e);\n if (findContainerIndex(target) >= 0) {\n return;\n }\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n return;\n }\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n var addListeners = function addListeners2() {\n if (!state.active) {\n return;\n }\n activeFocusTraps.activateTrap(trap);\n state.delayInitialFocusTimer = config.delayInitialFocus ? delay(function() {\n tryFocus(getInitialFocusNode());\n }) : tryFocus(getInitialFocusNode());\n doc.addEventListener(\"focusin\", checkFocusIn, true);\n doc.addEventListener(\"mousedown\", checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener(\"touchstart\", checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener(\"click\", checkClick, {\n capture: true,\n passive: false\n });\n doc.addEventListener(\"keydown\", checkKey, {\n capture: true,\n passive: false\n });\n return trap;\n };\n var removeListeners = function removeListeners2() {\n if (!state.active) {\n return;\n }\n doc.removeEventListener(\"focusin\", checkFocusIn, true);\n doc.removeEventListener(\"mousedown\", checkPointerDown, true);\n doc.removeEventListener(\"touchstart\", checkPointerDown, true);\n doc.removeEventListener(\"click\", checkClick, true);\n doc.removeEventListener(\"keydown\", checkKey, true);\n return trap;\n };\n trap = {\n get active() {\n return state.active;\n },\n get paused() {\n return state.paused;\n },\n activate: function activate(activateOptions) {\n if (state.active) {\n return this;\n }\n var onActivate = getOption(activateOptions, \"onActivate\");\n var onPostActivate = getOption(activateOptions, \"onPostActivate\");\n var checkCanFocusTrap = getOption(activateOptions, \"checkCanFocusTrap\");\n if (!checkCanFocusTrap) {\n updateTabbableNodes();\n }\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n if (onActivate) {\n onActivate();\n }\n var finishActivation = function finishActivation2() {\n if (checkCanFocusTrap) {\n updateTabbableNodes();\n }\n addListeners();\n if (onPostActivate) {\n onPostActivate();\n }\n };\n if (checkCanFocusTrap) {\n checkCanFocusTrap(state.containers.concat()).then(finishActivation, finishActivation);\n return this;\n }\n finishActivation();\n return this;\n },\n deactivate: function deactivate(deactivateOptions) {\n if (!state.active) {\n return this;\n }\n var options = _objectSpread2({\n onDeactivate: config.onDeactivate,\n onPostDeactivate: config.onPostDeactivate,\n checkCanReturnFocus: config.checkCanReturnFocus\n }, deactivateOptions);\n clearTimeout(state.delayInitialFocusTimer);\n state.delayInitialFocusTimer = void 0;\n removeListeners();\n state.active = false;\n state.paused = false;\n activeFocusTraps.deactivateTrap(trap);\n var onDeactivate = getOption(options, \"onDeactivate\");\n var onPostDeactivate = getOption(options, \"onPostDeactivate\");\n var checkCanReturnFocus = getOption(options, \"checkCanReturnFocus\");\n var returnFocus = getOption(options, \"returnFocus\", \"returnFocusOnDeactivate\");\n if (onDeactivate) {\n onDeactivate();\n }\n var finishDeactivation = function finishDeactivation2() {\n delay(function() {\n if (returnFocus) {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n }\n if (onPostDeactivate) {\n onPostDeactivate();\n }\n });\n };\n if (returnFocus && checkCanReturnFocus) {\n checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation);\n return this;\n }\n finishDeactivation();\n return this;\n },\n pause: function pause() {\n if (state.paused || !state.active) {\n return this;\n }\n state.paused = true;\n removeListeners();\n return this;\n },\n unpause: function unpause() {\n if (!state.paused || !state.active) {\n return this;\n }\n state.paused = false;\n updateTabbableNodes();\n addListeners();\n return this;\n },\n updateContainerElements: function updateContainerElements(containerElements) {\n var elementsAsArray = [].concat(containerElements).filter(Boolean);\n state.containers = elementsAsArray.map(function(element) {\n return typeof element === \"string\" ? doc.querySelector(element) : element;\n });\n if (state.active) {\n updateTabbableNodes();\n }\n return this;\n }\n };\n trap.updateContainerElements(elements);\n return trap;\n};\n\n// packages/focus/src/index.js\nfunction src_default(Alpine) {\n let lastFocused;\n let currentFocused;\n window.addEventListener(\"focusin\", () => {\n lastFocused = currentFocused;\n currentFocused = document.activeElement;\n });\n Alpine.magic(\"focus\", (el) => {\n let within = el;\n return {\n __noscroll: false,\n __wrapAround: false,\n within(el2) {\n within = el2;\n return this;\n },\n withoutScrolling() {\n this.__noscroll = true;\n return this;\n },\n noscroll() {\n this.__noscroll = true;\n return this;\n },\n withWrapAround() {\n this.__wrapAround = true;\n return this;\n },\n wrap() {\n return this.withWrapAround();\n },\n focusable(el2) {\n return isFocusable(el2);\n },\n previouslyFocused() {\n return lastFocused;\n },\n lastFocused() {\n return lastFocused;\n },\n focused() {\n return currentFocused;\n },\n focusables() {\n if (Array.isArray(within))\n return within;\n return focusable(within, { displayCheck: \"none\" });\n },\n all() {\n return this.focusables();\n },\n isFirst(el2) {\n let els = this.all();\n return els[0] && els[0].isSameNode(el2);\n },\n isLast(el2) {\n let els = this.all();\n return els.length && els.slice(-1)[0].isSameNode(el2);\n },\n getFirst() {\n return this.all()[0];\n },\n getLast() {\n return this.all().slice(-1)[0];\n },\n getNext() {\n let list = this.all();\n let current = document.activeElement;\n if (list.indexOf(current) === -1)\n return;\n if (this.__wrapAround && list.indexOf(current) === list.length - 1) {\n return list[0];\n }\n return list[list.indexOf(current) + 1];\n },\n getPrevious() {\n let list = this.all();\n let current = document.activeElement;\n if (list.indexOf(current) === -1)\n return;\n if (this.__wrapAround && list.indexOf(current) === 0) {\n return list.slice(-1)[0];\n }\n return list[list.indexOf(current) - 1];\n },\n first() {\n this.focus(this.getFirst());\n },\n last() {\n this.focus(this.getLast());\n },\n next() {\n this.focus(this.getNext());\n },\n previous() {\n this.focus(this.getPrevious());\n },\n prev() {\n return this.previous();\n },\n focus(el2) {\n if (!el2)\n return;\n setTimeout(() => {\n if (!el2.hasAttribute(\"tabindex\"))\n el2.setAttribute(\"tabindex\", \"0\");\n el2.focus({ preventScroll: this._noscroll });\n });\n }\n };\n });\n Alpine.directive(\"trap\", Alpine.skipDuringClone(\n (el, { expression, modifiers }, { effect, evaluateLater, cleanup }) => {\n let evaluator = evaluateLater(expression);\n let oldValue = false;\n let options = {\n escapeDeactivates: false,\n allowOutsideClick: true,\n fallbackFocus: () => el\n };\n let autofocusEl = el.querySelector(\"[autofocus]\");\n if (autofocusEl)\n options.initialFocus = autofocusEl;\n let trap = createFocusTrap(el, options);\n let undoInert = () => {\n };\n let undoDisableScrolling = () => {\n };\n const releaseFocus = () => {\n undoInert();\n undoInert = () => {\n };\n undoDisableScrolling();\n undoDisableScrolling = () => {\n };\n trap.deactivate({\n returnFocus: !modifiers.includes(\"noreturn\")\n });\n };\n effect(() => evaluator((value) => {\n if (oldValue === value)\n return;\n if (value && !oldValue) {\n setTimeout(() => {\n if (modifiers.includes(\"inert\"))\n undoInert = setInert(el);\n if (modifiers.includes(\"noscroll\"))\n undoDisableScrolling = disableScrolling();\n trap.activate();\n });\n }\n if (!value && oldValue) {\n releaseFocus();\n }\n oldValue = !!value;\n }));\n cleanup(releaseFocus);\n },\n // When cloning, we only want to add aria-hidden attributes to the\n // DOM and not try to actually trap, as trapping can mess with the\n // live DOM and isn't just isolated to the cloned DOM.\n (el, { expression, modifiers }, { evaluate }) => {\n if (modifiers.includes(\"inert\") && evaluate(expression))\n setInert(el);\n }\n ));\n}\nfunction setInert(el) {\n let undos = [];\n crawlSiblingsUp(el, (sibling) => {\n let cache = sibling.hasAttribute(\"aria-hidden\");\n sibling.setAttribute(\"aria-hidden\", \"true\");\n undos.push(() => cache || sibling.removeAttribute(\"aria-hidden\"));\n });\n return () => {\n while (undos.length)\n undos.pop()();\n };\n}\nfunction crawlSiblingsUp(el, callback) {\n if (el.isSameNode(document.body) || !el.parentNode)\n return;\n Array.from(el.parentNode.children).forEach((sibling) => {\n if (sibling.isSameNode(el)) {\n crawlSiblingsUp(el.parentNode, callback);\n } else {\n callback(sibling);\n }\n });\n}\nfunction disableScrolling() {\n let overflow = document.documentElement.style.overflow;\n let paddingRight = document.documentElement.style.paddingRight;\n let scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.documentElement.style.overflow = \"hidden\";\n document.documentElement.style.paddingRight = `${scrollbarWidth}px`;\n return () => {\n document.documentElement.style.overflow = overflow;\n document.documentElement.style.paddingRight = paddingRight;\n };\n}\n\n// packages/focus/builds/module.js\nvar module_default = src_default;\nexport {\n module_default as default\n};\n/*! Bundled license information:\n\ntabbable/dist/index.esm.js:\n (*!\n * tabbable 5.3.3\n * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n *)\n\nfocus-trap/dist/focus-trap.esm.js:\n (*!\n * focus-trap 6.9.4\n * @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE\n *)\n*/\n","import { configFor } from \"./library\"\n\nexport default function() {\n const directUploader = document.getElementById(\"direct_uploader\")\n if (directUploader === null) {\n return\n }\n\n const fileInput = document.querySelector('input[type=\"file\"]')\n\n fileInput.addEventListener(\"change\", event => {\n const { files } = event.target\n if (!validateBeforeSend(files)) {\n // Remove the files\n fileInput.value = \"\"\n } else {\n const submitInput = document.getElementById(\"direct_uploader_finalize\")\n\n files.forEach(file => {\n submitInput.insertAdjacentHTML(\n \"beforebegin\",\n `\n \n `\n )\n })\n submitInput.classList.remove(\"layout__hide\")\n }\n })\n\n addEventListener(\"direct-upload:progress\", event => {\n const { file, progress } = event.detail\n const progressElement = document.getElementById(\n `direct-upload-progress-${file.name}`\n )\n progressElement.style.width = `${progress}%`\n })\n\n // As each file gets completed\n addEventListener(\"direct-upload:end\", event => {\n const { file } = event.detail\n const element = document.getElementById(`direct-upload-${file.name}`)\n element.classList.add(\"direct-upload--complete\")\n })\n\n addEventListener(\"direct-upload:error\", event => {\n const { file, error } = event.detail\n const element = document.getElementById(`direct-upload-${file.name}`)\n element.classList.add(\"direct-upload--error\")\n element.setAttribute(\"title\", error)\n alert(file.name + \" failed to upload : \" + error)\n })\n}\n\nfunction validFiletypeRegex() {\n const acceptableFileExtensions = configFor(\n \"settings.acceptableFileExtensions\"\n )\n // eslint-disable-next-line\n return new RegExp(`\\.(${acceptableFileExtensions})$`)\n}\n\nfunction checkFiletypeValid(filename) {\n // why inspect and no quotes? Because otherwise the ruby to javascript converter frigs up the regex\n if (filename.match(validFiletypeRegex())) {\n return true\n } else {\n return false\n }\n}\n\nfunction validateBeforeSend(files) {\n const { every } = Array.prototype\n\n const isValid = every.call(files, file => checkFiletypeValid(file.name))\n\n if (!isValid) {\n // FIXME: Message should differ depending on terms\n const message =\n \"Sorry, we only accept popular file formats, such as Word, PDF, OpenOffice, Excel, etc.\"\n alert(message)\n }\n return isValid\n}\n","import { callOnDataAttribute, isLoggedIn, getJSON } from \"./library\"\n\nexport default function showDiscountedPrice() {\n if (isLoggedIn()) {\n callOnDataAttribute(\"discounted-price\", (priceEl) => {\n const productId = priceEl.dataset.productId\n const normalPrice = priceEl.innerText\n const currencySymbol = normalPrice[0]\n\n getJSON(\n `/discounts/${productId}`,\n ({ discountAvailable, discountedPrice }) => {\n if (!discountAvailable) {\n return\n }\n priceEl.innerText = currencySymbol + discountedPrice + \"(normally \" + normalPrice + \" but / discounted based on your purchase history)\"\n }\n )\n })\n }\n}\n","// Purpose: Some components can be clicked and thereby closed with JS\nfunction remove(el) {\n el.parentNode.removeChild(el);\n}\n\nexport default function attachDismissable() {\n const dismissables = document.querySelectorAll(\"[data-dismiss]\");\n\n dismissables.forEach((triggerEl) => {\n const elToRemove = document.getElementById(triggerEl.dataset.dismiss);\n triggerEl.addEventListener(\"click\", () => remove(elToRemove));\n });\n}\n","export default function attachReadMore() {\n const hiddenContentWrappers = document.querySelectorAll(\n \"[data-read-more-hidden-content]\"\n )\n const toggleLinks = document.querySelectorAll(\"[data-toggle-read-more]\")\n\n ;[].forEach.call(hiddenContentWrappers, function(hiddenContentWrapper) {\n hiddenContentWrapper.setAttribute(\"hidden\", true)\n })\n ;[].forEach.call(toggleLinks, function(toggleLink) {\n toggleLink.addEventListener(\"click\", function(event) {\n event.preventDefault()\n\n const hiddenContentWrapper = this.parentElement.parentElement.querySelector(\n \"[data-read-more-hidden-content]\"\n )\n\n // change attributes and text if full text is shown/hidden\n if (!hiddenContentWrapper.hasAttribute(\"hidden\")) {\n toggleLink.innerText = \"Show More >\"\n hiddenContentWrapper.setAttribute(\"hidden\", true)\n toggleLink.setAttribute(\"aria-expanded\", false)\n } else {\n toggleLink.innerText = \"Show Less\"\n hiddenContentWrapper.removeAttribute(\"hidden\")\n toggleLink.setAttribute(\"aria-expanded\", true)\n }\n })\n })\n}\n","export default function () {\n document.querySelectorAll(\"[data-deletion-link]\").forEach((link) => {\n // This relies on the events Rails AJAX sends, such as ajax::success and\n // ajax:error\n link.addEventListener(\"ajax:success\", () => {\n link.parentNode.removeChild(link)\n })\n\n link.addEventListener(\"ajax:error\", () => {\n link.classList.add(\"flash\")\n link.classList.add(\"error\")\n link.innerText = `Error: Could not delete \"${link.innerText}\"`\n })\n })\n}\n","// TODO: delete\n\nimport PDFObject from \"pdfobject\";\n\nexport function displayDoc(url, fileType = \"pdf\") {\n if (fileType != \"pdf\") {\n renderWithMSOffice(url);\n } else if (PDFObject.supportsPDFs) {\n PDFObject.embed(url, docPreviewer(), {\n pdfOpenParams: {\n view: \"Fit\",\n scrollbars: \"0\",\n toolbar: \"0\",\n statusbar: \"0\",\n navpanes: \"0\"\n }\n });\n // hack until fixed https://github.com/pipwerks/PDFObject/issues/173\n document.getElementsByClassName(\"pdfobject\")[0].src = url;\n } else {\n renderWithGoogleViewer(url);\n }\n}\n\n// only works with MS file formats\nfunction renderWithMSOffice(url) {\n renderEmbed(\n `https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(\n url\n )}`\n );\n}\n\n// only works with PDFs\nfunction renderWithGoogleViewer(url) {\n renderEmbed(\n `https://docs.google.com/viewer?url=${encodeURIComponent(\n url\n )}&embedded=true`\n );\n}\n\n/**\n *\n *\n */\nfunction renderEmbed(viewerUrl) {\n const isMobile = window.matchMedia(\n \"only screen and (max-width: 480px)\"\n ).matches;\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = viewerUrl;\n iframe.title = docPreviewer().dataset.title;\n iframe.loading = \"lazy\";\n\n // lmao ok what\n while (docPreviewer().firstChild) {\n docPreviewer().removeChild(docPreviewer().firstChild);\n }\n\n docPreviewer().appendChild(iframe);\n}\n\nfunction docPreviewer() {\n const embedId = \"pdf-preview__wrapper\";\n return document.getElementById(embedId);\n}\n\nexport default function docPreview() {\n if (!docPreviewer()) {\n return;\n }\n\n displayDoc(docPreviewer().dataset.docUrl, docPreviewer().dataset.filetype);\n}\n","import { displayDoc } from \"./docPreview\"\n\nfunction BestNotesFileSelector(candidatesElement) {\n //console.log(candidatesElement.dataset)\n const candidates = JSON.parse(\n candidatesElement.dataset.bestNotesFileCandidates\n )\n let currentCandidateIndex = 0\n\n document.addEventListener(\"keydown\", respondToKeyDown)\n\n function respondToKeyDown(event) {\n event.preventDefault()\n\n const leftArrowKey = 37\n const rightArrowKey = 39\n const downArrowKey = 40\n\n if (event.key == leftArrowKey) {\n chooseCandidateByIndex(currentCandidateIndex - 1)\n } else if (event.key == rightArrowKey) {\n chooseCandidateByIndex(currentCandidateIndex + 1)\n } else if (event.key == downArrowKey) {\n chooseCandidateByIndex(cycleExamYearIndex())\n }\n }\n\n function cycleExamYearIndex() {\n const currentExamYear = candidates[currentCandidateIndex].exam_year\n const atMaxExamYear =\n currentExamYear == Math.max(...candidates.map(el => el.exam_year))\n\n return candidates.findIndex(el => {\n if (atMaxExamYear) {\n return true\n } else {\n return el.exam_year > currentExamYear\n }\n })\n }\n\n function chooseCandidateByIndex(i) {\n // handle negative numbers\n currentCandidateIndex =\n ((i % candidates.length) + candidates.length) % candidates.length\n const currentCandidate = candidates[currentCandidateIndex]\n\n document.querySelector(\"[data-best-notes-file-name]\").textContent =\n currentCandidate[\"name\"]\n document.querySelector(\"[data-best-notes-file-exam-year]\").textContent =\n currentCandidate[\"exam_year\"]\n document.querySelector(\"[data-best-notes-file-page-count]\").textContent =\n currentCandidate[\"page_count\"]\n document.querySelector(\"[data-best-notes-file-id]\").value =\n currentCandidate[\"id\"]\n\n displayDoc(currentCandidate[\"url\"], currentCandidate[\"filetype\"])\n }\n}\n\nexport default function() {\n const candidatesElement = document.querySelector(\n \"[data-best-notes-file-candidates]\"\n )\n if (!candidatesElement) {\n return\n }\n BestNotesFileSelector(candidatesElement)\n}\n","const trackDownload = function() {\n const item = this\n // This is needed to get Rails to understand the params\n const payload = new URLSearchParams({\n name: item.dataset.name,\n original_item_id: item.dataset.originalItemId,\n original_item_type: item.dataset.originalItemType\n })\n\n fetch(\"/track_file_download\", {\n method: \"POST\",\n headers: {\n \"X-CSRF-Token\": document.querySelector(\"meta[name=csrf-token]\").content\n },\n body: payload\n }).then(() => {\n item.innerText = item.innerText + \" - Accessed\"\n item.classList.add(\"tracked-download-box\")\n })\n}\n\nexport default function() {\n const downloadLinks = document.querySelectorAll(\n \"a.download_link_for_tracking\"\n )\n\n downloadLinks.forEach(downloadLink => {\n downloadLink.addEventListener(\"click\", trackDownload, { once: true })\n downloadLink.addEventListener(\"contextmenu\", trackDownload, { once: true })\n })\n}\n","function undeemphasizeDisciplineInput(el) {\n if (el.value == \"1\") {\n el.classList.remove(\"text--deemphasize\")\n } else {\n el.classList.add(\"text--deemphasize\")\n }\n}\n\nexport default function() {\n const lawDisciplineSelectInputs = document.querySelectorAll(\n \"[data-law-discipline]\"\n )\n\n lawDisciplineSelectInputs.forEach(lawDisciplineSelectInput => {\n lawDisciplineSelectInput.addEventListener(\"change\", event => {\n undeemphasizeDisciplineInput(event.target)\n })\n\n // Handle re-display of form with existing data (e.g. after errors)\n if (lawDisciplineSelectInput.value == \"1\") {\n undeemphasizeDisciplineInput(lawDisciplineSelectInput)\n }\n })\n}\n","import analytics from \"./analytics\"\nimport directUploads from \"./directUploads\"\nimport discounts from \"./discounts\"\nimport dismissable from \"./dismissable\"\nimport readMore from \"./readMore\"\nimport remoteForms from \"./remoteForms\"\nimport selectBestNotesFile from \"./selectBestNotesFile\"\nimport trackFileDownload from \"./trackFileDownload\"\nimport tutors from \"./tutors\"\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n analytics()\n directUploads()\n discounts()\n dismissable()\n readMore()\n remoteForms()\n selectBestNotesFile()\n tutors()\n trackFileDownload()\n})\n","document.addEventListener('DOMContentLoaded', () => {\n let isLoading = false;\n\n const infiniteScroll = () => {\n if (isLoading) return;\n\n const scrollPosition = window.innerHeight + window.scrollY;\n const threshold = document.documentElement.scrollHeight - 100 - document.getElementById(\"footer\").offsetHeight;\n\n if (scrollPosition >= threshold) {\n loadMorePosts();\n }\n };\n\n const loadMorePosts = async () => {\n const itemsContainer = document.querySelector('#items');\n if (!itemsContainer) return;\n\n isLoading = true;\n const spinner = document.getElementById('infinite-scroll-spinner');\n spinner.style.display = 'block';\n\n const nextPage = document.querySelector('#items').dataset.nextPage;\n\n // If there's no next page, stop the infinite scroll\n if (!nextPage) {\n spinner.style.display = 'none';\n window.removeEventListener('scroll', infiniteScroll);\n return;\n }\n\n const csrfToken = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n try {\n const response = await fetch(nextPage, {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'X-CSRF-Token': csrfToken\n }\n });\n\n if (!response.ok) throw new Error('Failed to load more posts');\n const data = await response.json();\n const itemsContainer = document.querySelector('#items');\n\n itemsContainer.insertAdjacentHTML('beforeend', data.items.join(''));\n itemsContainer.dataset.nextPage = data.next_page;\n\n if (!data.next_page) {\n window.removeEventListener('scroll', infiniteScroll);\n }\n } catch (error) {\n console.error(error);\n } finally {\n isLoading = false;\n spinner.style.display = 'none';\n }\n };\n\n window.addEventListener('scroll', infiniteScroll);\n});\n","// To see this message, add the following to the `` section in your\n// views/layouts/application.html.erb\n//\n// <%= vite_client_tag %>\n// <%= vite_javascript_tag 'application' %>\n\n// If using a TypeScript entrypoint file:\n// <%= vite_typescript_tag 'application' %>\n//\n// If you want to use .jsx or .tsx, add the extension:\n// <%= vite_javascript_tag 'application.jsx' %>\n\n// Example: Load Rails libraries in Vite.\n//\n// import * as Turbo from '@hotwired/turbo'\n// Turbo.start()\n//\n// import ActiveStorage from '@rails/activestorage'\n// ActiveStorage.start()\n//\n// // Import all channels.\n// const _ = import.meta.globEager(\"./**/*_channel.js\");\n\nimport \"../css/index.css\";\nimport \"@fontsource-variable/inter\";\nimport \"@fontsource-variable/public-sans\";\n\nimport Rails from \"@rails/ujs\";\n// Alpine import\nimport Alpine from \"alpinejs\";\nimport focus from \"@alpinejs/focus\";\n\nwindow.Alpine = Alpine;\nAlpine.plugin(focus);\nAlpine.start();\n// // DOM Polyfills (Babel only covers ES6 features, not browser stuff)\n// require(\"../javascript/polyfills.js\")\nimport \"../../webpacker/javascript/installOnDom.js\";\nimport \"../../webpacker/javascript/infinite_scroll.js\";\n\n// Webpack processes the SCSS, thus its presence here.\n// import \"../../webpacker/stylesheets/application.scss\";\n\n// Error monitoring\n// import * as Sentry from \"@sentry/browser\"\n\n// Sentry.init({\n// dsn:\n// \"https://d03b49b54f70482384e57388708ed20a@o4504624549199872.ingest.sentry.io/4504624568795136\"\n// })\n"],"names":["context","Rails","nonce","ref","expando","m","element","selector","key","value","$","csrfParam","csrfToken","meta","xhr","token","param","input","CustomEvent","fire","matches","preventDefault","event","params","evt","result","obj","name","data","e","eventType","handler","target","AcceptHeaders","CSRFProtection","createXHR","cspNonce","prepareOptions","processResponse","options","response","done","type","parser","script","url","originAnchor","urlAnchor","toArray","additionalParam","inputs","option","form","el","allowAction","stopEverything","message","answer","callback","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","formElements","getData","isXhrRedirect","setData","replacement","originalText","formContent","href","link","method","ajax","isCrossDomain","isRemote","serializeElement","slice","button","dataType","withCredentials","args","insignificantMetaClick","metaClick","nonPrimaryMouseClick","delegate","disableElement","enableElement","formSubmitButtonClick","handleConfirm","handleDisabledElement","handleMethod","handleRemote","loadCSPNonce","preventInsignificantClick","refreshCSRFTokens","originalOptions","module","this","candidateSelectors","candidateSelector","NoElement","getRootNode","getCandidates","includeContainer","filter","candidates","getCandidatesIteratively","getCandidatesIteratively2","elements","elementsToCheck","assigned","content","nestedCandidates","validCandidate","shadowRoot","validShadowRoot","_nestedCandidates","getTabindex","node","isScope","sortOrderedTabbables","a","b","isInput","isHiddenInput","isDetailsWithSummary","r","child","getCheckedRadio","nodes","i","isTabbableRadio","radioScope","queryRadios","radioSet","err","checked","isRadio","isNonTabbableRadio","isZeroArea","_node$getBoundingClie","width","height","isHidden","_ref","displayCheck","getShadowRoot","isDirectSummary","nodeUnderDetails","nodeRootHost","nodeIsAttached","originalNode","parentElement","rootNode","isDisabledFromFieldset","parentNode","isNodeMatchingSelectorFocusable","isNodeMatchingSelectorTabbable","isValidShadowRootTabbable","shadowHostNode","tabIndex","sortByOrder","sortByOrder2","regularTabbables","orderedTabbables","item","candidateTabindex","acc","sortable","tabbable","focusable","isTabbable","focusableCandidateSelector","isFocusable","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","source","_defineProperty","activeFocusTraps","trapQueue","trap","activeTrap","trapIndex","isSelectableInput","isEscapeEvent","isTabEvent","delay","fn","findIndex","arr","idx","valueOrHandler","_len","_key","getActualTarget","createFocusTrap","userOptions","doc","config","state","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","container","tabbableNodes","getNodeForOption","optionValue","_len2","_key2","getInitialFocusNode","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","focusableNodes","forward","nodeIdx","n","group","tryFocus","tryFocus2","getReturnFocusNode","previousActiveElement","checkPointerDown","checkFocusIn","targetContained","checkTab","destinationNode","containerIndex","containerGroup","startOfGroupIndex","_ref2","destinationGroupIndex","destinationGroup","lastOfGroupIndex","_ref3","lastTabbableNode","_destinationGroupIndex","_destinationGroup","checkKey","checkClick","addListeners","removeListeners","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","returnFocus","finishDeactivation","containerElements","elementsAsArray","src_default","Alpine","lastFocused","currentFocused","within","el2","els","list","current","expression","modifiers","effect","evaluateLater","cleanup","evaluator","oldValue","autofocusEl","undoInert","undoDisableScrolling","releaseFocus","setInert","disableScrolling","evaluate","undos","crawlSiblingsUp","sibling","cache","overflow","paddingRight","scrollbarWidth","module_default","directUploads","fileInput","files","validateBeforeSend","submitInput","file","progress","progressElement","error","validFiletypeRegex","acceptableFileExtensions","configFor","checkFiletypeValid","filename","every","isValid","showDiscountedPrice","isLoggedIn","callOnDataAttribute","priceEl","productId","normalPrice","currencySymbol","getJSON","discountAvailable","discountedPrice","remove","attachDismissable","triggerEl","elToRemove","attachReadMore","hiddenContentWrappers","toggleLinks","hiddenContentWrapper","toggleLink","remoteForms","displayDoc","fileType","renderWithMSOffice","PDFObject","docPreviewer","renderWithGoogleViewer","renderEmbed","viewerUrl","iframe","embedId","BestNotesFileSelector","candidatesElement","currentCandidateIndex","respondToKeyDown","leftArrowKey","rightArrowKey","downArrowKey","chooseCandidateByIndex","cycleExamYearIndex","currentExamYear","atMaxExamYear","currentCandidate","selectBestNotesFile","trackDownload","payload","trackFileDownload","downloadLink","undeemphasizeDisciplineInput","tutors","lawDisciplineSelectInput","analytics","discounts","dismissable","readMore","isLoading","infiniteScroll","scrollPosition","threshold","loadMorePosts","spinner","nextPage","itemsContainer","focus"],"mappings":"oTAMC,UAAW,CACV,IAAIA,EAAU,MAEb,UAAW,EACT,UAAW,CACV,KAAK,MAAQ,CACX,kBAAmB,yGACnB,oBAAqB,CACnB,SAAU,oEACV,QAAS,aACV,EACD,oBAAqB,iEACrB,mBAAoB,OACpB,uBAAwB,6MACxB,oBAAqB,sMACrB,mBAAoB,4MACpB,kBAAmB,yCACnB,oBAAqB,wCACrB,sBAAuB,2EAC/B,CAEA,GAAO,KAAK,IAAI,CAChB,GAAK,KAAKA,CAAO,EAEf,IAAIC,EAAQD,EAAQ,OAEnB,UAAW,EACT,UAAW,CACV,IAAIE,EAEJA,EAAQ,KAERD,EAAM,aAAe,UAAW,CAC9B,IAAIE,EACJ,OAAOD,GAASC,EAAM,SAAS,cAAc,sBAAsB,IAAM,KAAOA,EAAI,QAAU,MACtG,EAEMF,EAAM,SAAW,UAAW,CAC1B,OAAOC,GAAwBD,EAAM,aAAY,CACzD,CAEA,GAAO,KAAK,IAAI,GACX,UAAW,CACV,IAAIG,EAASC,EAEbA,EAAI,QAAQ,UAAU,SAAW,QAAQ,UAAU,iBAAmB,QAAQ,UAAU,oBAAsB,QAAQ,UAAU,mBAAqB,QAAQ,UAAU,kBAAoB,QAAQ,UAAU,sBAE7MJ,EAAM,QAAU,SAASK,EAASC,EAAU,CAC1C,OAAIA,EAAS,SAAW,KACfF,EAAE,KAAKC,EAASC,EAAS,QAAQ,GAAK,CAACF,EAAE,KAAKC,EAASC,EAAS,OAAO,EAEvEF,EAAE,KAAKC,EAASC,CAAQ,CAEzC,EAEMH,EAAU,WAEVH,EAAM,QAAU,SAASK,EAASE,EAAK,CACrC,IAAIL,EACJ,OAAQA,EAAMG,EAAQF,CAAO,IAAM,KAAOD,EAAIK,CAAG,EAAI,MAC7D,EAEMP,EAAM,QAAU,SAASK,EAASE,EAAKC,EAAO,CAC5C,OAAIH,EAAQF,CAAO,GAAK,OACtBE,EAAQF,CAAO,EAAI,IAEdE,EAAQF,CAAO,EAAEI,CAAG,EAAIC,CACvC,EAEMR,EAAM,EAAI,SAASM,EAAU,CAC3B,OAAO,MAAM,UAAU,MAAM,KAAK,SAAS,iBAAiBA,CAAQ,CAAC,CAC7E,CAEA,GAAO,KAAK,IAAI,GACX,UAAW,CACV,IAAIG,EAAGC,EAAWC,EAElBF,EAAIT,EAAM,EAEVW,EAAYX,EAAM,UAAY,UAAW,CACvC,IAAIY,EACJ,OAAAA,EAAO,SAAS,cAAc,uBAAuB,EAC9CA,GAAQA,EAAK,OAC5B,EAEMF,EAAYV,EAAM,UAAY,UAAW,CACvC,IAAIY,EACJ,OAAAA,EAAO,SAAS,cAAc,uBAAuB,EAC9CA,GAAQA,EAAK,OAC5B,EAEMZ,EAAM,eAAiB,SAASa,EAAK,CACnC,IAAIC,EAEJ,GADAA,EAAQH,EAAS,EACbG,GAAS,KACX,OAAOD,EAAI,iBAAiB,eAAgBC,CAAK,CAE3D,EAEMd,EAAM,kBAAoB,UAAW,CACnC,IAAIe,EAAOD,EAGX,GAFAA,EAAQH,EAAS,EACjBI,EAAQL,EAAS,EACZI,GAAS,MAAUC,GAAS,KAC/B,OAAON,EAAE,oBAAsBM,EAAQ,IAAI,EAAE,QAAQ,SAASC,EAAO,CACnE,OAAOA,EAAM,MAAQF,CACjC,CAAW,CAEX,CAEA,GAAO,KAAK,IAAI,GACX,UAAW,CACV,IAAIG,EAAaC,EAAMC,EAASC,EAEhCD,EAAUnB,EAAM,QAEhBiB,EAAc,OAAO,YAEjB,OAAOA,GAAgB,aACzBA,EAAc,SAASI,EAAOC,EAAQ,CACpC,IAAIC,EACJ,OAAAA,EAAM,SAAS,YAAY,aAAa,EACxCA,EAAI,gBAAgBF,EAAOC,EAAO,QAASA,EAAO,WAAYA,EAAO,MAAM,EACpEC,CACjB,EACQN,EAAY,UAAY,OAAO,MAAM,UACrCG,EAAiBH,EAAY,UAAU,eACvCA,EAAY,UAAU,eAAiB,UAAW,CAChD,IAAIO,EACJ,OAAAA,EAASJ,EAAe,KAAK,IAAI,EAC7B,KAAK,YAAc,CAAC,KAAK,kBAC3B,OAAO,eAAe,KAAM,mBAAoB,CAC9C,IAAK,UAAW,CACd,MAAO,EACR,CACf,CAAa,EAEII,CACjB,GAGMN,EAAOlB,EAAM,KAAO,SAASyB,EAAKC,EAAMC,EAAM,CAC5C,IAAIN,EACJ,OAAAA,EAAQ,IAAIJ,EAAYS,EAAM,CAC5B,QAAS,GACT,WAAY,GACZ,OAAQC,CAClB,CAAS,EACDF,EAAI,cAAcJ,CAAK,EAChB,CAACA,EAAM,gBACtB,EAEMrB,EAAM,eAAiB,SAAS4B,EAAG,CACjC,OAAAV,EAAKU,EAAE,OAAQ,uBAAuB,EACtCA,EAAE,eAAc,EAChBA,EAAE,gBAAe,EACVA,EAAE,0BACjB,EAEM5B,EAAM,SAAW,SAASK,EAASC,EAAUuB,EAAWC,EAAS,CAC/D,OAAOzB,EAAQ,iBAAiBwB,EAAW,SAASD,EAAG,CACrD,IAAIG,EAEJ,IADAA,EAASH,EAAE,OACJ,EAAE,EAAEG,aAAkB,UAAYZ,EAAQY,EAAQzB,CAAQ,IAC/DyB,EAASA,EAAO,WAElB,GAAIA,aAAkB,SAAWD,EAAQ,KAAKC,EAAQH,CAAC,IAAM,GAC3D,OAAAA,EAAE,eAAc,EACTA,EAAE,iBAErB,CAAS,CACT,CAEA,GAAO,KAAK,IAAI,GACX,UAAW,CACN,IAAAI,EAAeC,EAAgBC,EAAWC,EAAgBC,EAAgBC,EAE9EF,EAAWnC,EAAM,SAAUiC,EAAiBjC,EAAM,eAAuBA,EAAM,KAE/EgC,EAAgB,CACd,IAAK,MACL,KAAM,aACN,KAAM,YACN,IAAK,4BACL,KAAM,oCACN,OAAQ,2FAChB,EAEMhC,EAAM,KAAO,SAASsC,EAAS,CAC7B,IAAIzB,EAgBJ,GAfAyB,EAAUF,EAAeE,CAAO,EAChCzB,EAAMqB,EAAUI,EAAS,UAAW,CAClC,IAAIpC,EAAKqC,EACT,OAAAA,EAAWF,GAAiBnC,EAAMW,EAAI,WAAa,KAAOX,EAAMW,EAAI,aAAcA,EAAI,kBAAkB,cAAc,CAAC,EACnH,KAAK,MAAMA,EAAI,OAAS,GAAG,IAAM,EAC/B,OAAOyB,EAAQ,SAAY,YAC7BA,EAAQ,QAAQC,EAAU1B,EAAI,WAAYA,CAAG,EAG3C,OAAOyB,EAAQ,OAAU,YAC3BA,EAAQ,MAAMC,EAAU1B,EAAI,WAAYA,CAAG,EAGxC,OAAOyB,EAAQ,UAAa,WAAaA,EAAQ,SAASzB,EAAKA,EAAI,UAAU,EAAI,MAClG,CAAS,EACIyB,EAAQ,YAAc,MAAS,CAACA,EAAQ,WAAWzB,EAAKyB,CAAO,EAClE,MAAO,GAET,GAAIzB,EAAI,aAAe,eAAe,OACpC,OAAOA,EAAI,KAAKyB,EAAQ,IAAI,CAEtC,EAEMF,EAAiB,SAASE,EAAS,CACjC,OAAAA,EAAQ,IAAMA,EAAQ,KAAO,SAAS,KACtCA,EAAQ,KAAOA,EAAQ,KAAK,YAAW,EACnCA,EAAQ,OAAS,OAASA,EAAQ,OAChCA,EAAQ,IAAI,QAAQ,GAAG,EAAI,EAC7BA,EAAQ,KAAO,IAAMA,EAAQ,KAE7BA,EAAQ,KAAO,IAAMA,EAAQ,MAG7BN,EAAcM,EAAQ,QAAQ,GAAK,OACrCA,EAAQ,SAAW,KAErBA,EAAQ,OAASN,EAAcM,EAAQ,QAAQ,EAC3CA,EAAQ,WAAa,MACvBA,EAAQ,QAAU,iBAEbA,CACf,EAEMJ,EAAY,SAASI,EAASE,EAAM,CAClC,IAAI3B,EACJ,OAAAA,EAAM,IAAI,eACVA,EAAI,KAAKyB,EAAQ,KAAMA,EAAQ,IAAK,EAAI,EACxCzB,EAAI,iBAAiB,SAAUyB,EAAQ,MAAM,EACzC,OAAOA,EAAQ,MAAS,UAC1BzB,EAAI,iBAAiB,eAAgB,kDAAkD,EAEpFyB,EAAQ,cACXzB,EAAI,iBAAiB,mBAAoB,gBAAgB,EACzDoB,EAAepB,CAAG,GAEpBA,EAAI,gBAAkB,CAAC,CAACyB,EAAQ,gBAChCzB,EAAI,mBAAqB,UAAW,CAClC,GAAIA,EAAI,aAAe,eAAe,KACpC,OAAO2B,EAAK3B,CAAG,CAE3B,EACeA,CACf,EAEMwB,EAAkB,SAASE,EAAUE,EAAM,CACzC,IAAIC,EAAQC,EACZ,GAAI,OAAOJ,GAAa,UAAY,OAAOE,GAAS,UAClD,GAAIA,EAAK,MAAM,UAAU,EACvB,GAAI,CACFF,EAAW,KAAK,MAAMA,CAAQ,CAC5C,MAA4B,CAAE,SACTE,EAAK,MAAM,yBAAyB,EAC7CE,EAAS,SAAS,cAAc,QAAQ,EACxCA,EAAO,aAAa,QAASR,EAAU,CAAA,EACvCQ,EAAO,KAAOJ,EACd,SAAS,KAAK,YAAYI,CAAM,EAAE,WAAW,YAAYA,CAAM,UACtDF,EAAK,MAAM,oBAAoB,EAAG,CAC3CC,EAAS,IAAI,UACbD,EAAOA,EAAK,QAAQ,MAAO,EAAE,EAC7B,GAAI,CACFF,EAAWG,EAAO,gBAAgBH,EAAUE,CAAI,CAC9D,MAA4B,CAAE,CACnB,EAEH,OAAOF,CACf,EAEMvC,EAAM,KAAO,SAASK,EAAS,CAC7B,OAAOA,EAAQ,IACvB,EAEML,EAAM,cAAgB,SAAS4C,EAAK,KAC3BC,EAAcC,EACrBD,EAAe,SAAS,cAAc,GAAG,EACzCA,EAAa,KAAO,SAAS,KAC7BC,EAAY,SAAS,cAAc,GAAG,EACtC,GAAI,CACF,OAAAA,EAAU,KAAOF,EACV,GAAI,CAACE,EAAU,UAAYA,EAAU,WAAa,MAAQ,CAACA,EAAU,MAAUD,EAAa,SAAW,KAAOA,EAAa,MAASC,EAAU,SAAW,KAAOA,EAAU,KAClL,MAAe,CAEd,MAAO,EACR,CACT,CAEA,GAAO,KAAK,IAAI,GACX,UAAW,CACV,IAAI3B,EAAS4B,EAEb5B,EAAUnB,EAAM,QAEhB+C,EAAU,SAASnB,EAAG,CACpB,OAAO,MAAM,UAAU,MAAM,KAAKA,CAAC,CAC3C,EAEM5B,EAAM,iBAAmB,SAASK,EAAS2C,EAAiB,CAC1D,IAAIC,EAAQ3B,EACZ,OAAA2B,EAAS,CAAC5C,CAAO,EACbc,EAAQd,EAAS,MAAM,IACzB4C,EAASF,EAAQ1C,EAAQ,QAAQ,GAEnCiB,EAAS,CAAA,EACT2B,EAAO,QAAQ,SAASjC,EAAO,CAC7B,GAAI,GAACA,EAAM,MAAQA,EAAM,WAGrB,CAAAG,EAAQH,EAAO,sBAAsB,EAGzC,IAAIG,EAAQH,EAAO,QAAQ,EACzB,OAAO+B,EAAQ/B,EAAM,OAAO,EAAE,QAAQ,SAASkC,EAAQ,CACrD,GAAIA,EAAO,SACT,OAAO5B,EAAO,KAAK,CACjB,KAAMN,EAAM,KACZ,MAAOkC,EAAO,KAChC,CAAiB,CAEjB,CAAa,EACI,GAAIlC,EAAM,SAAW,CAAC,QAAS,WAAY,QAAQ,EAAE,QAAQA,EAAM,IAAI,IAAM,GAClF,OAAOM,EAAO,KAAK,CACjB,KAAMN,EAAM,KACZ,MAAOA,EAAM,KAC3B,CAAa,EAEb,CAAS,EACGgC,GACF1B,EAAO,KAAK0B,CAAe,EAEtB1B,EAAO,IAAI,SAASP,EAAO,CAChC,OAAIA,EAAM,MAAQ,KACR,mBAAmBA,EAAM,IAAI,EAAK,IAAO,mBAAmBA,EAAM,KAAK,EAExEA,CAEnB,CAAS,EAAE,KAAK,GAAG,CACnB,EAEMf,EAAM,aAAe,SAASmD,EAAM7C,EAAU,CAC5C,OAAIa,EAAQgC,EAAM,MAAM,EACfJ,EAAQI,EAAK,QAAQ,EAAE,OAAO,SAASC,EAAI,CAChD,OAAOjC,EAAQiC,EAAI9C,CAAQ,CACvC,CAAW,EAEMyC,EAAQI,EAAK,iBAAiB7C,CAAQ,CAAC,CAExD,CAEA,GAAO,KAAK,IAAI,GACX,UAAW,CACV,IAAI+C,EAAanC,EAAMoC,EAEvBpC,EAAOlB,EAAM,KAAMsD,EAAiBtD,EAAM,eAE1CA,EAAM,cAAgB,SAAS4B,EAAG,CAChC,GAAI,CAACyB,EAAY,IAAI,EACnB,OAAOC,EAAe1B,CAAC,CAEjC,EAEM5B,EAAM,QAAU,SAASuD,EAASlD,EAAS,CACzC,OAAO,QAAQkD,CAAO,CAC9B,EAEMF,EAAc,SAAShD,EAAS,CAC9B,IAAImD,EAAQC,EAAUF,EAEtB,GADAA,EAAUlD,EAAQ,aAAa,cAAc,EACzC,CAACkD,EACH,MAAO,GAGT,GADAC,EAAS,GACLtC,EAAKb,EAAS,SAAS,EAAG,CAC5B,GAAI,CACFmD,EAASxD,EAAM,QAAQuD,EAASlD,CAAO,CACnD,MAA0B,CAAE,CAClBoD,EAAWvC,EAAKb,EAAS,mBAAoB,CAACmD,CAAM,CAAC,CACtD,CACD,OAAOA,GAAUC,CACzB,CAEA,GAAO,KAAK,IAAI,GACX,UAAW,CACV,IAAIC,EAAoBC,EAAqBC,EAAoBC,EAAmBC,EAAoBC,EAAmBC,EAAcC,EAASC,EAAe/C,EAASgD,EAASb,EAEnLnC,EAAUnB,EAAM,QAASiE,EAAUjE,EAAM,QAASmE,EAAUnE,EAAM,QAASsD,EAAiBtD,EAAM,eAAgBgE,EAAehE,EAAM,aAEvIA,EAAM,sBAAwB,SAAS4B,EAAG,CACxC,IAAIvB,EAEJ,GADAA,EAAU,KACNA,EAAQ,SACV,OAAOiD,EAAe1B,CAAC,CAEjC,EAEM5B,EAAM,cAAgB,SAAS4B,EAAG,CAChC,IAAIvB,EACJ,GAAIuB,aAAa,MAAO,CACtB,GAAIsC,EAActC,CAAC,EACjB,OAEFvB,EAAUuB,EAAE,MACtB,MACUvB,EAAUuB,EAEZ,GAAIT,EAAQd,EAASL,EAAM,mBAAmB,EAC5C,OAAO+D,EAAkB1D,CAAO,EAC3B,GAAIc,EAAQd,EAASL,EAAM,qBAAqB,GAAKmB,EAAQd,EAASL,EAAM,kBAAkB,EACnG,OAAO6D,EAAkBxD,CAAO,EAC3B,GAAIc,EAAQd,EAASL,EAAM,kBAAkB,EAClD,OAAO8D,EAAmBzD,CAAO,CAE3C,EAEML,EAAM,eAAiB,SAAS4B,EAAG,CACjC,IAAIvB,EAEJ,GADAA,EAAUuB,aAAa,MAAQA,EAAE,OAASA,EACtCT,EAAQd,EAASL,EAAM,mBAAmB,EAC5C,OAAO4D,EAAmBvD,CAAO,EAC5B,GAAIc,EAAQd,EAASL,EAAM,qBAAqB,GAAKmB,EAAQd,EAASL,EAAM,mBAAmB,EACpG,OAAO0D,EAAmBrD,CAAO,EAC5B,GAAIc,EAAQd,EAASL,EAAM,kBAAkB,EAClD,OAAO2D,EAAoBtD,CAAO,CAE5C,EAEMuD,EAAqB,SAASvD,EAAS,CACrC,IAAI+D,EACJ,GAAI,CAAAH,EAAQ5D,EAAS,cAAc,EAGnC,OAAA+D,EAAc/D,EAAQ,aAAa,mBAAmB,EAClD+D,GAAe,OACjBD,EAAQ9D,EAAS,kBAAmBA,EAAQ,SAAS,EACrDA,EAAQ,UAAY+D,GAEtB/D,EAAQ,iBAAiB,QAASiD,CAAc,EACzCa,EAAQ9D,EAAS,eAAgB,EAAI,CACpD,EAEM0D,EAAoB,SAAS1D,EAAS,CACpC,IAAIgE,EACJ,OAAAA,EAAeJ,EAAQ5D,EAAS,iBAAiB,EAC7CgE,GAAgB,OAClBhE,EAAQ,UAAYgE,EACpBF,EAAQ9D,EAAS,kBAAmB,IAAI,GAE1CA,EAAQ,oBAAoB,QAASiD,CAAc,EAC5Ca,EAAQ9D,EAAS,eAAgB,IAAI,CACpD,EAEMsD,EAAsB,SAASR,EAAM,CACnC,OAAOa,EAAab,EAAMnD,EAAM,mBAAmB,EAAE,QAAQ0D,CAAkB,CACvF,EAEMA,EAAqB,SAASrD,EAAS,CACrC,IAAI+D,EACJ,GAAI,CAAAH,EAAQ5D,EAAS,cAAc,EAGnC,OAAA+D,EAAc/D,EAAQ,aAAa,mBAAmB,EAClD+D,GAAe,OACbjD,EAAQd,EAAS,QAAQ,GAC3B8D,EAAQ9D,EAAS,kBAAmBA,EAAQ,SAAS,EACrDA,EAAQ,UAAY+D,IAEpBD,EAAQ9D,EAAS,kBAAmBA,EAAQ,KAAK,EACjDA,EAAQ,MAAQ+D,IAGpB/D,EAAQ,SAAW,GACZ8D,EAAQ9D,EAAS,eAAgB,EAAI,CACpD,EAEMyD,EAAqB,SAASX,EAAM,CAClC,OAAOa,EAAab,EAAMnD,EAAM,kBAAkB,EAAE,QAAQ6D,CAAiB,CACrF,EAEMA,EAAoB,SAASxD,EAAS,CACpC,IAAIgE,EACJ,OAAAA,EAAeJ,EAAQ5D,EAAS,iBAAiB,EAC7CgE,GAAgB,OACdlD,EAAQd,EAAS,QAAQ,EAC3BA,EAAQ,UAAYgE,EAEpBhE,EAAQ,MAAQgE,EAElBF,EAAQ9D,EAAS,kBAAmB,IAAI,GAE1CA,EAAQ,SAAW,GACZ8D,EAAQ9D,EAAS,eAAgB,IAAI,CACpD,EAEM6D,EAAgB,SAAS7C,EAAO,CAC9B,IAAInB,EAAKW,EACT,OAAAA,GAAOX,EAAMmB,EAAM,SAAW,KAAOnB,EAAI,CAAC,EAAI,QACtCW,GAAO,KAAOA,EAAI,kBAAkB,gBAAgB,EAAI,SAAW,IACnF,CAEA,GAAO,KAAK,IAAI,GACX,UAAW,CACV,IAAIyC,EAEJA,EAAiBtD,EAAM,eAEvBA,EAAM,aAAe,SAAS4B,EAAG,CAC/B,IAAIlB,EAAWC,EAAWwC,EAAMmB,EAAaC,EAAMC,EAAMC,EAGzD,GAFAD,EAAO,KACPC,EAASD,EAAK,aAAa,aAAa,EACpC,EAACC,EAGL,OAAAF,EAAOvE,EAAM,KAAKwE,CAAI,EACtB7D,EAAYX,EAAM,YAClBU,EAAYV,EAAM,YAClBmD,EAAO,SAAS,cAAc,MAAM,EACpCmB,EAAc,gCAAkCG,EAAS,qBACpD/D,GAAa,MAAUC,GAAa,MAAS,CAACX,EAAM,cAAcuE,CAAI,IACzED,GAAe,gBAAkB5D,EAAY,YAAcC,EAAY,sBAEzE2D,GAAe,0BACfnB,EAAK,OAAS,OACdA,EAAK,OAASoB,EACdpB,EAAK,OAASqB,EAAK,OACnBrB,EAAK,UAAYmB,EACjBnB,EAAK,MAAM,QAAU,OACrB,SAAS,KAAK,YAAYA,CAAI,EAC9BA,EAAK,cAAc,iBAAiB,EAAE,MAAK,EACpCG,EAAe1B,CAAC,CAC/B,CAEA,GAAO,KAAK,IAAI,GACX,UAAW,CACV,IAAI8C,EAAMxD,EAAM+C,EAASU,EAAeC,EAAUzD,EAAS0D,EAAkBV,EAASb,EACpFwB,EAAQ,CAAE,EAAC,MAEb3D,EAAUnB,EAAM,QAASiE,EAAUjE,EAAM,QAASmE,EAAUnE,EAAM,QAASkB,EAAOlB,EAAM,KAAMsD,EAAiBtD,EAAM,eAAgB0E,EAAO1E,EAAM,KAAM2E,EAAgB3E,EAAM,cAAe6E,EAAmB7E,EAAM,iBAEtN4E,EAAW,SAASvE,EAAS,CAC3B,IAAIG,EACJ,OAAAA,EAAQH,EAAQ,aAAa,aAAa,EAClCG,GAAS,MAASA,IAAU,OAC5C,EAEMR,EAAM,aAAe,SAAS4B,EAAG,CAC/B,IAAImD,EAAQpD,EAAMqD,EAAU3E,EAASoE,EAAQ7B,EAAKqC,EAElD,OADA5E,EAAU,KACLuE,EAASvE,CAAO,EAGhBa,EAAKb,EAAS,aAAa,GAIhC4E,EAAkB5E,EAAQ,aAAa,uBAAuB,EAC9D2E,EAAW3E,EAAQ,aAAa,WAAW,GAAK,SAC5Cc,EAAQd,EAASL,EAAM,kBAAkB,GAC3C+E,EAASd,EAAQ5D,EAAS,mBAAmB,EAC7CoE,EAASR,EAAQ5D,EAAS,8BAA8B,GAAKA,EAAQ,OACrEuC,EAAMqB,EAAQ5D,EAAS,8BAA8B,GAAKA,EAAQ,aAAa,QAAQ,GAAK,SAAS,KACjGoE,EAAO,YAAa,IAAK,QAC3B7B,EAAMA,EAAI,QAAQ,QAAS,EAAE,GAE3BvC,EAAQ,UAAY,uBACtBsB,EAAO,IAAI,SAAStB,CAAO,EACvB0E,GAAU,MACZpD,EAAK,OAAOoD,EAAO,KAAMA,EAAO,KAAK,GAGvCpD,EAAOkD,EAAiBxE,EAAS0E,CAAM,EAEzCZ,EAAQ9D,EAAS,oBAAqB,IAAI,EAC1C8D,EAAQ9D,EAAS,+BAAgC,IAAI,EACrD8D,EAAQ9D,EAAS,+BAAgC,IAAI,GAC5Cc,EAAQd,EAASL,EAAM,mBAAmB,GAAKmB,EAAQd,EAASL,EAAM,mBAAmB,GAClGyE,EAASpE,EAAQ,aAAa,aAAa,EAC3CuC,EAAMvC,EAAQ,aAAa,UAAU,EACrCsB,EAAOkD,EAAiBxE,EAASA,EAAQ,aAAa,aAAa,CAAC,IAEpEoE,EAASpE,EAAQ,aAAa,aAAa,EAC3CuC,EAAM5C,EAAM,KAAKK,CAAO,EACxBsB,EAAOtB,EAAQ,aAAa,aAAa,GAE3CqE,EAAK,CACH,KAAMD,GAAU,MAChB,IAAK7B,EACL,KAAMjB,EACN,SAAUqD,EACV,WAAY,SAASnE,EAAKyB,EAAS,CACjC,OAAIpB,EAAKb,EAAS,kBAAmB,CAACQ,EAAKyB,CAAO,CAAC,EAC1CpB,EAAKb,EAAS,YAAa,CAACQ,CAAG,CAAC,GAEvCK,EAAKb,EAAS,cAAc,EACrB,GAEV,EACD,QAAS,UAAW,CAClB,IAAI6E,EACJ,OAAAA,EAAO,GAAK,UAAU,OAASJ,EAAM,KAAK,UAAW,CAAC,EAAI,GACnD5D,EAAKb,EAAS,eAAgB6E,CAAI,CAC1C,EACD,MAAO,UAAW,CAChB,IAAIA,EACJ,OAAAA,EAAO,GAAK,UAAU,OAASJ,EAAM,KAAK,UAAW,CAAC,EAAI,GACnD5D,EAAKb,EAAS,aAAc6E,CAAI,CACxC,EACD,SAAU,UAAW,CACnB,IAAIA,EACJ,OAAAA,EAAO,GAAK,UAAU,OAASJ,EAAM,KAAK,UAAW,CAAC,EAAI,GACnD5D,EAAKb,EAAS,gBAAiB6E,CAAI,CAC3C,EACD,YAAaP,EAAc/B,CAAG,EAC9B,gBAAkBqC,GAAmB,MAASA,IAAoB,OAC5E,CAAS,EACM3B,EAAe1B,CAAC,IA/DrBV,EAAKb,EAAS,cAAc,EACrB,IAJA,EAmEjB,EAEML,EAAM,sBAAwB,SAAS4B,EAAG,CACxC,IAAImD,EAAQ5B,EAGZ,GAFA4B,EAAS,KACT5B,EAAO4B,EAAO,KACV,EAAC5B,EAGL,OAAI4B,EAAO,MACTZ,EAAQhB,EAAM,oBAAqB,CACjC,KAAM4B,EAAO,KACb,MAAOA,EAAO,KAC1B,CAAW,EAEHZ,EAAQhB,EAAM,4BAA6B4B,EAAO,cAAc,EAChEZ,EAAQhB,EAAM,+BAAgC4B,EAAO,aAAa,YAAY,CAAC,EACxEZ,EAAQhB,EAAM,+BAAgC4B,EAAO,aAAa,YAAY,CAAC,CAC9F,EAEM/E,EAAM,0BAA4B,SAAS4B,EAAG,CAC5C,IAAID,EAAMwD,EAAwBX,EAAMY,EAAWX,EAAQY,EAO3D,GANAb,EAAO,KACPC,GAAUD,EAAK,aAAa,aAAa,GAAK,OAAO,cACrD7C,EAAO6C,EAAK,aAAa,aAAa,EACtCY,EAAYxD,EAAE,SAAWA,EAAE,QAC3BuD,EAAyBC,GAAaX,IAAW,OAAS,CAAC9C,EAC3D0D,EAAwBzD,EAAE,QAAU,MAASA,EAAE,SAAW,EACtDyD,GAAwBF,EAC1B,OAAOvD,EAAE,0BAEnB,CAEA,GAAO,KAAK,IAAI,GACX,UAAW,CACV,IAAInB,EAAGwB,EAAgBqD,EAAUC,EAAgBC,EAAetE,EAAMuE,EAAuBxB,EAASyB,EAAeC,EAAuBC,EAAcC,EAAcC,EAAcC,EAA2BC,EAIjN,GAFA9E,EAAOlB,EAAM,KAAMsF,EAAWtF,EAAM,SAAUiE,EAAUjE,EAAM,QAASS,EAAIT,EAAM,EAAGgG,EAAoBhG,EAAM,kBAAmBiC,EAAiBjC,EAAM,eAAgB8F,EAAe9F,EAAM,aAAcwF,EAAgBxF,EAAM,cAAeuF,EAAiBvF,EAAM,eAAgB2F,EAAwB3F,EAAM,sBAAuB0F,EAAgB1F,EAAM,cAAe+F,EAA4B/F,EAAM,0BAA2B6F,EAAe7F,EAAM,aAAcyF,EAAwBzF,EAAM,sBAAuB4F,EAAe5F,EAAM,aAEthB,OAAO,OAAW,KAAe,SAAW,MAAU,OAAO,MAAQ,KAAO,CAC/E,GAAI,OAAO,MACT,MAAM,IAAI,MAAM,gEAAgE,EAElF,OAAO,MAAQA,EACf,OAAO,cAAc,SAASsC,EAAS2D,EAAiBpF,EAAK,CAC3D,GAAI,CAACyB,EAAQ,YACX,OAAOL,EAAepB,CAAG,CAErC,CAAS,CACF,CAEDb,EAAM,MAAQ,UAAW,CACvB,GAAI,OAAO,cACT,MAAM,IAAI,MAAM,oCAAoC,EAEtD,cAAO,iBAAiB,WAAY,UAAW,CAC7C,OAAAS,EAAET,EAAM,kBAAkB,EAAE,QAAQ,SAASoD,EAAI,CAC/C,GAAIa,EAAQb,EAAI,cAAc,EAC5B,OAAOoC,EAAcpC,CAAE,CAErC,CAAW,EACM3C,EAAET,EAAM,mBAAmB,EAAE,QAAQ,SAASoD,EAAI,CACvD,GAAIa,EAAQb,EAAI,cAAc,EAC5B,OAAOoC,EAAcpC,CAAE,CAErC,CAAW,CACX,CAAS,EACDkC,EAAS,SAAUtF,EAAM,oBAAqB,gBAAiBwF,CAAa,EAC5EF,EAAS,SAAUtF,EAAM,oBAAqB,eAAgBwF,CAAa,EAC3EF,EAAS,SAAUtF,EAAM,sBAAuB,gBAAiBwF,CAAa,EAC9EF,EAAS,SAAUtF,EAAM,sBAAuB,eAAgBwF,CAAa,EAC7EF,EAAS,SAAUtF,EAAM,kBAAmB,QAAS+F,CAAyB,EAC9ET,EAAS,SAAUtF,EAAM,kBAAmB,QAAS2F,CAAqB,EAC1EL,EAAS,SAAUtF,EAAM,kBAAmB,QAAS0F,CAAa,EAClEJ,EAAS,SAAUtF,EAAM,kBAAmB,QAASuF,CAAc,EACnED,EAAS,SAAUtF,EAAM,kBAAmB,QAAS6F,CAAY,EACjEP,EAAS,SAAUtF,EAAM,kBAAmB,QAAS4F,CAAY,EACjEN,EAAS,SAAUtF,EAAM,oBAAqB,QAAS+F,CAAyB,EAChFT,EAAS,SAAUtF,EAAM,oBAAqB,QAAS2F,CAAqB,EAC5EL,EAAS,SAAUtF,EAAM,oBAAqB,QAAS0F,CAAa,EACpEJ,EAAS,SAAUtF,EAAM,oBAAqB,QAASuF,CAAc,EACrED,EAAS,SAAUtF,EAAM,oBAAqB,QAAS6F,CAAY,EACnEP,EAAS,SAAUtF,EAAM,oBAAqB,SAAU2F,CAAqB,EAC7EL,EAAS,SAAUtF,EAAM,oBAAqB,SAAU0F,CAAa,EACrEJ,EAAS,SAAUtF,EAAM,oBAAqB,SAAU6F,CAAY,EACpEP,EAAS,SAAUtF,EAAM,mBAAoB,SAAU2F,CAAqB,EAC5EL,EAAS,SAAUtF,EAAM,mBAAoB,SAAU0F,CAAa,EACpEJ,EAAS,SAAUtF,EAAM,mBAAoB,SAAU6F,CAAY,EACnEP,EAAS,SAAUtF,EAAM,mBAAoB,SAAU,SAAS4B,EAAG,CACjE,OAAO,WAAY,UAAW,CAC5B,OAAO2D,EAAe3D,CAAC,CACxB,EAAG,EAAE,CAChB,CAAS,EACD0D,EAAS,SAAUtF,EAAM,mBAAoB,YAAauF,CAAc,EACxED,EAAS,SAAUtF,EAAM,mBAAoB,gBAAiBwF,CAAa,EAC3EF,EAAS,SAAUtF,EAAM,uBAAwB,QAAS+F,CAAyB,EACnFT,EAAS,SAAUtF,EAAM,uBAAwB,QAAS2F,CAAqB,EAC/EL,EAAS,SAAUtF,EAAM,uBAAwB,QAAS0F,CAAa,EACvEJ,EAAS,SAAUtF,EAAM,uBAAwB,QAASyF,CAAqB,EAC/E,SAAS,iBAAiB,mBAAoBO,CAAiB,EAC/D,SAAS,iBAAiB,mBAAoBF,CAAY,EACnD,OAAO,cAAgB,EACtC,EAEU,OAAO,QAAU9F,GAASkB,EAAK,SAAU,sBAAsB,GACjElB,EAAM,MAAK,CAGnB,GAAO,KAAK,IAAI,CAChB,GAAK,KAAK,IAAI,EAEsBkG,EAAO,UACvCA,EAAA,QAAiBlG,EAIrB,GAAG,KAAKmG,EAAI,QCxuBZ,IAAIC,GAAqB,CAAC,QAAS,SAAU,WAAY,UAAW,SAAU,uBAAwB,kBAAmB,kBAAmB,mDAAoD,gCAAiC,SAAS,EACtOC,EAAoCD,GAAmB,KAAK,GAAG,EAC/DE,GAAY,OAAO,QAAY,IAC/BnF,EAAUmF,GAAY,UAAW,CACrC,EAAI,QAAQ,UAAU,SAAW,QAAQ,UAAU,mBAAqB,QAAQ,UAAU,sBACtFC,EAAc,CAACD,IAAa,QAAQ,UAAU,YAAc,SAASjG,EAAS,CAChF,OAAOA,EAAQ,aACjB,EAAI,SAASA,EAAS,CACpB,OAAOA,EAAQ,aACjB,EACImG,GAAgB,SAAwBpD,EAAIqD,EAAkBC,EAAQ,CACxE,IAAIC,EAAa,MAAM,UAAU,MAAM,MAAMvD,EAAG,iBAAiBiD,CAAiB,CAAC,EACnF,OAAII,GAAoBtF,EAAQ,KAAKiC,EAAIiD,CAAiB,GACxDM,EAAW,QAAQvD,CAAE,EAEvBuD,EAAaA,EAAW,OAAOD,CAAM,EAC9BC,CACT,EACIC,GAA2B,SAASC,EAA0BC,EAAUL,EAAkBnE,EAAS,CAGrG,QAFIqE,EAAa,CAAA,EACbI,EAAkB,MAAM,KAAKD,CAAQ,EAClCC,EAAgB,QAAQ,CAC7B,IAAI1G,EAAU0G,EAAgB,QAC9B,GAAI1G,EAAQ,UAAY,OAAQ,CAC9B,IAAI2G,EAAW3G,EAAQ,mBACnB4G,EAAUD,EAAS,OAASA,EAAW3G,EAAQ,SAC/C6G,EAAmBL,EAA0BI,EAAS,GAAM3E,CAAO,EACnEA,EAAQ,QACVqE,EAAW,KAAK,MAAMA,EAAYO,CAAgB,EAElDP,EAAW,KAAK,CACd,MAAOtG,EACP,WAAY6G,CACtB,CAAS,CAET,KAAW,CACL,IAAIC,EAAiBhG,EAAQ,KAAKd,EAASgG,CAAiB,EACxDc,GAAkB7E,EAAQ,OAAOjC,CAAO,IAAMoG,GAAoB,CAACK,EAAS,SAASzG,CAAO,IAC9FsG,EAAW,KAAKtG,CAAO,EAEzB,IAAI+G,EAAa/G,EAAQ,YACzB,OAAOiC,EAAQ,eAAkB,YAAcA,EAAQ,cAAcjC,CAAO,EACxEgH,EAAkB,CAAC/E,EAAQ,kBAAoBA,EAAQ,iBAAiBjC,CAAO,EACnF,GAAI+G,GAAcC,EAAiB,CACjC,IAAIC,EAAoBT,EAA0BO,IAAe,GAAO/G,EAAQ,SAAW+G,EAAW,SAAU,GAAM9E,CAAO,EACzHA,EAAQ,QACVqE,EAAW,KAAK,MAAMA,EAAYW,CAAiB,EAEnDX,EAAW,KAAK,CACd,MAAOtG,EACP,WAAYiH,CACxB,CAAW,CAEX,MACQP,EAAgB,QAAQ,MAAMA,EAAiB1G,EAAQ,QAAQ,CAElE,CACF,CACD,OAAOsG,CACT,EACIY,GAAc,SAAsBC,EAAMC,EAAS,CACrD,OAAID,EAAK,SAAW,IACbC,GAAW,0BAA0B,KAAKD,EAAK,OAAO,GAAKA,EAAK,oBAAsB,MAAM,SAASA,EAAK,aAAa,UAAU,EAAG,EAAE,CAAC,EACnI,EAGJA,EAAK,QACd,EACIE,GAAuB,SAA+BC,EAAGC,EAAG,CAC9D,OAAOD,EAAE,WAAaC,EAAE,SAAWD,EAAE,cAAgBC,EAAE,cAAgBD,EAAE,SAAWC,EAAE,QACxF,EACIC,GAAU,SAAkBL,EAAM,CACpC,OAAOA,EAAK,UAAY,OAC1B,EACIM,GAAgB,SAAwBN,EAAM,CAChD,OAAOK,GAAQL,CAAI,GAAKA,EAAK,OAAS,QACxC,EACIO,GAAuB,SAA+BP,EAAM,CAC9D,IAAIQ,EAAIR,EAAK,UAAY,WAAa,MAAM,UAAU,MAAM,MAAMA,EAAK,QAAQ,EAAE,KAAK,SAASS,EAAO,CACpG,OAAOA,EAAM,UAAY,SAC7B,CAAG,EACD,OAAOD,CACT,EACIE,GAAkB,SAA0BC,EAAOhF,EAAM,CAC3D,QAASiF,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAChC,GAAID,EAAMC,CAAC,EAAE,SAAWD,EAAMC,CAAC,EAAE,OAASjF,EACxC,OAAOgF,EAAMC,CAAC,CAGpB,EACIC,GAAkB,SAA0Bb,EAAM,CACpD,GAAI,CAACA,EAAK,KACR,MAAO,GAET,IAAIc,EAAad,EAAK,MAAQjB,EAAYiB,CAAI,EAC1Ce,EAAc,SAAsB7G,EAAM,CAC5C,OAAO4G,EAAW,iBAAiB,6BAA+B5G,EAAO,IAAI,CACjF,EACM8G,EACJ,GAAI,OAAO,OAAW,KAAe,OAAO,OAAO,IAAQ,KAAe,OAAO,OAAO,IAAI,QAAW,WACrGA,EAAWD,EAAY,OAAO,IAAI,OAAOf,EAAK,IAAI,CAAC,MAEnD,IAAI,CACFgB,EAAWD,EAAYf,EAAK,IAAI,CACjC,OAAQiB,EAAK,CACZ,eAAQ,MAAM,2IAA4IA,EAAI,OAAO,EAC9J,EACR,CAEH,IAAIC,EAAUR,GAAgBM,EAAUhB,EAAK,IAAI,EACjD,MAAO,CAACkB,GAAWA,IAAYlB,CACjC,EACImB,GAAU,SAAkBnB,EAAM,CACpC,OAAOK,GAAQL,CAAI,GAAKA,EAAK,OAAS,OACxC,EACIoB,GAAqB,SAA6BpB,EAAM,CAC1D,OAAOmB,GAAQnB,CAAI,GAAK,CAACa,GAAgBb,CAAI,CAC/C,EACIqB,EAAa,SAAqBrB,EAAM,CAC1C,IAAIsB,EAAwBtB,EAAK,wBAAyBuB,EAAQD,EAAsB,MAAOE,EAASF,EAAsB,OAC9H,OAAOC,IAAU,GAAKC,IAAW,CACnC,EACIC,GAAW,SAAmBzB,EAAM0B,EAAM,CAC5C,IAAIC,EAAeD,EAAK,aAAcE,EAAgBF,EAAK,cAC3D,GAAI,iBAAiB1B,CAAI,EAAE,aAAe,SACxC,MAAO,GAET,IAAI6B,EAAkBlI,EAAQ,KAAKqG,EAAM,+BAA+B,EACpE8B,EAAmBD,EAAkB7B,EAAK,cAAgBA,EAC9D,GAAIrG,EAAQ,KAAKmI,EAAkB,uBAAuB,EACxD,MAAO,GAET,IAAIC,EAAehD,EAAYiB,CAAI,EAAE,KACjCgC,GAAkBD,GAAiB,KAAkC,OAASA,EAAa,cAAc,SAASA,CAAY,IAAM/B,EAAK,cAAc,SAASA,CAAI,EACxK,GAAI,CAAC2B,GAAgBA,IAAiB,OAAQ,CAC5C,GAAI,OAAOC,GAAkB,WAAY,CAEvC,QADIK,EAAejC,EACZA,GAAM,CACX,IAAIkC,EAAgBlC,EAAK,cACrBmC,EAAWpD,EAAYiB,CAAI,EAC/B,GAAIkC,GAAiB,CAACA,EAAc,YAAcN,EAAcM,CAAa,IAAM,GACjF,OAAOb,EAAWrB,CAAI,EACbA,EAAK,aACdA,EAAOA,EAAK,aACH,CAACkC,GAAiBC,IAAanC,EAAK,cAC7CA,EAAOmC,EAAS,KAEhBnC,EAAOkC,CAEV,CACDlC,EAAOiC,CACR,CACD,GAAID,EACF,MAAO,CAAChC,EAAK,eAAgB,EAAC,MAEpC,SAAa2B,IAAiB,gBAC1B,OAAON,EAAWrB,CAAI,EAExB,MAAO,EACT,EACIoC,GAAyB,SAAiCpC,EAAM,CAClE,GAAI,mCAAmC,KAAKA,EAAK,OAAO,EAEtD,QADIqC,EAAarC,EAAK,cACfqC,GAAY,CACjB,GAAIA,EAAW,UAAY,YAAcA,EAAW,SAAU,CAC5D,QAASzB,EAAI,EAAGA,EAAIyB,EAAW,SAAS,OAAQzB,IAAK,CACnD,IAAIH,EAAQ4B,EAAW,SAAS,KAAKzB,CAAC,EACtC,GAAIH,EAAM,UAAY,SACpB,OAAO9G,EAAQ,KAAK0I,EAAY,sBAAsB,EAAI,GAAO,CAAC5B,EAAM,SAAST,CAAI,CAExF,CACD,MAAO,EACR,CACDqC,EAAaA,EAAW,aACzB,CAEH,MAAO,EACT,EACIC,EAAkC,SAA0CxH,EAASkF,EAAM,CAC7F,MAAI,EAAAA,EAAK,UAAYM,GAAcN,CAAI,GAAKyB,GAASzB,EAAMlF,CAAO,GAClEyF,GAAqBP,CAAI,GAAKoC,GAAuBpC,CAAI,EAI3D,EACIuC,EAAiC,SAAyCzH,EAASkF,EAAM,CAC3F,MAAI,EAAAoB,GAAmBpB,CAAI,GAAKD,GAAYC,CAAI,EAAI,GAAK,CAACsC,EAAgCxH,EAASkF,CAAI,EAIzG,EACIwC,GAA4B,SAAoCC,EAAgB,CAClF,IAAIC,EAAW,SAASD,EAAe,aAAa,UAAU,EAAG,EAAE,EACnE,MAAI,SAAMC,CAAQ,GAAKA,GAAY,EAIrC,EACIC,GAAc,SAASC,EAAazD,EAAY,CAClD,IAAI0D,EAAmB,CAAA,EACnBC,EAAmB,CAAA,EACvB,OAAA3D,EAAW,QAAQ,SAAS4D,EAAMnC,EAAG,CACnC,IAAIX,EAAU,CAAC,CAAC8C,EAAK,MACjBlK,EAAUoH,EAAU8C,EAAK,MAAQA,EACjCC,EAAoBjD,GAAYlH,EAASoH,CAAO,EAChDX,EAAWW,EAAU2C,EAAaG,EAAK,UAAU,EAAIlK,EACrDmK,IAAsB,EACxB/C,EAAU4C,EAAiB,KAAK,MAAMA,EAAkBvD,CAAQ,EAAIuD,EAAiB,KAAKhK,CAAO,EAEjGiK,EAAiB,KAAK,CACpB,cAAelC,EACf,SAAUoC,EACV,KAAAD,EACA,QAAA9C,EACA,QAASX,CACjB,CAAO,CAEP,CAAG,EACMwD,EAAiB,KAAK5C,EAAoB,EAAE,OAAO,SAAS+C,EAAKC,EAAU,CAChF,OAAAA,EAAS,QAAUD,EAAI,KAAK,MAAMA,EAAKC,EAAS,OAAO,EAAID,EAAI,KAAKC,EAAS,OAAO,EAC7ED,CACR,EAAE,EAAE,EAAE,OAAOJ,CAAgB,CAChC,EACIM,GAAW,SAAmBvH,EAAId,EAAS,CAC7CA,EAAUA,GAAW,GACrB,IAAIqE,EACJ,OAAIrE,EAAQ,cACVqE,EAAaC,GAAyB,CAACxD,CAAE,EAAGd,EAAQ,iBAAkB,CACpE,OAAQyH,EAA+B,KAAK,KAAMzH,CAAO,EACzD,QAAS,GACT,cAAeA,EAAQ,cACvB,iBAAkB0H,EACxB,CAAK,EAEDrD,EAAaH,GAAcpD,EAAId,EAAQ,iBAAkByH,EAA+B,KAAK,KAAMzH,CAAO,CAAC,EAEtG6H,GAAYxD,CAAU,CAC/B,EACIiE,GAAY,SAAoBxH,EAAId,EAAS,CAC/CA,EAAUA,GAAW,GACrB,IAAIqE,EACJ,OAAIrE,EAAQ,cACVqE,EAAaC,GAAyB,CAACxD,CAAE,EAAGd,EAAQ,iBAAkB,CACpE,OAAQwH,EAAgC,KAAK,KAAMxH,CAAO,EAC1D,QAAS,GACT,cAAeA,EAAQ,aAC7B,CAAK,EAEDqE,EAAaH,GAAcpD,EAAId,EAAQ,iBAAkBwH,EAAgC,KAAK,KAAMxH,CAAO,CAAC,EAEvGqE,CACT,EACIkE,EAAa,SAAqBrD,EAAMlF,EAAS,CAEnD,GADAA,EAAUA,GAAW,GACjB,CAACkF,EACH,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAIrG,EAAQ,KAAKqG,EAAMnB,CAAiB,IAAM,GACrC,GAEF0D,EAA+BzH,EAASkF,CAAI,CACrD,EACIsD,GAA6C1E,GAAmB,OAAO,QAAQ,EAAE,KAAK,GAAG,EACzF2E,EAAc,SAAsBvD,EAAMlF,EAAS,CAErD,GADAA,EAAUA,GAAW,GACjB,CAACkF,EACH,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAIrG,EAAQ,KAAKqG,EAAMsD,EAA0B,IAAM,GAC9C,GAEFhB,EAAgCxH,EAASkF,CAAI,CACtD,EAGA,SAASwD,EAAQC,EAAQC,EAAgB,CACvC,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAC7B,GAAI,OAAO,sBAAuB,CAChC,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EACjDC,IAAmBE,EAAUA,EAAQ,OAAO,SAASC,EAAK,CACxD,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAC1D,CAAK,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CACnC,CACD,OAAOD,CACT,CACA,SAASG,EAAevJ,EAAQ,CAC9B,QAASqG,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAImD,EAAiB,UAAUnD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,GACnDA,EAAI,EAAI4C,EAAQ,OAAOO,CAAM,EAAG,EAAI,EAAE,QAAQ,SAAShL,EAAK,CAC1DiL,GAAgBzJ,EAAQxB,EAAKgL,EAAOhL,CAAG,CAAC,CAC9C,CAAK,EAAI,OAAO,0BAA4B,OAAO,iBAAiBwB,EAAQ,OAAO,0BAA0BwJ,CAAM,CAAC,EAAIP,EAAQ,OAAOO,CAAM,CAAC,EAAE,QAAQ,SAAShL,EAAK,CAChK,OAAO,eAAewB,EAAQxB,EAAK,OAAO,yBAAyBgL,EAAQhL,CAAG,CAAC,CACrF,CAAK,CACF,CACD,OAAOwB,CACT,CACA,SAASyJ,GAAgB/J,EAAKlB,EAAKC,EAAO,CACxC,OAAID,KAAOkB,EACT,OAAO,eAAeA,EAAKlB,EAAK,CAC9B,MAAAC,EACA,WAAY,GACZ,aAAc,GACd,SAAU,EAChB,CAAK,EAEDiB,EAAIlB,CAAG,EAAIC,EAENiB,CACT,CACA,IAAIgK,EAAmB,UAAW,CAChC,IAAIC,EAAY,CAAA,EAChB,MAAO,CACL,aAAc,SAAsBC,EAAM,CACxC,GAAID,EAAU,OAAS,EAAG,CACxB,IAAIE,EAAaF,EAAUA,EAAU,OAAS,CAAC,EAC3CE,IAAeD,GACjBC,EAAW,MAAK,CAEnB,CACD,IAAIC,EAAYH,EAAU,QAAQC,CAAI,EAClCE,IAAc,IAGhBH,EAAU,OAAOG,EAAW,CAAC,EAC7BH,EAAU,KAAKC,CAAI,CAEtB,EACD,eAAgB,SAAwBA,EAAM,CAC5C,IAAIE,EAAYH,EAAU,QAAQC,CAAI,EAClCE,IAAc,IAChBH,EAAU,OAAOG,EAAW,CAAC,EAE3BH,EAAU,OAAS,GACrBA,EAAUA,EAAU,OAAS,CAAC,EAAE,QAAO,CAE1C,CACL,CACA,IACII,GAAoB,SAA4BtE,EAAM,CACxD,OAAOA,EAAK,SAAWA,EAAK,QAAQ,gBAAkB,SAAW,OAAOA,EAAK,QAAW,UAC1F,EACIuE,GAAgB,SAAwBnK,EAAG,CAC7C,OAAOA,EAAE,MAAQ,UAAYA,EAAE,MAAQ,OAASA,EAAE,UAAY,EAChE,EACIoK,GAAa,SAAqBpK,EAAG,CACvC,OAAOA,EAAE,MAAQ,OAASA,EAAE,UAAY,CAC1C,EACIqK,EAAQ,SAAgBC,EAAI,CAC9B,OAAO,WAAWA,EAAI,CAAC,CACzB,EACIC,EAAY,SAAoBC,EAAKF,EAAI,CAC3C,IAAIG,EAAM,GACV,OAAAD,EAAI,MAAM,SAAS5L,EAAO4H,EAAG,CAC3B,OAAI8D,EAAG1L,CAAK,GACV6L,EAAMjE,EACC,IAEF,EACX,CAAG,EACMiE,CACT,EACIC,EAAiB,SAAyB9L,EAAO,CACnD,QAAS+L,EAAO,UAAU,OAAQjL,EAAS,IAAI,MAAMiL,EAAO,EAAIA,EAAO,EAAI,CAAC,EAAGC,EAAO,EAAGA,EAAOD,EAAMC,IACpGlL,EAAOkL,EAAO,CAAC,EAAI,UAAUA,CAAI,EAEnC,OAAO,OAAOhM,GAAU,WAAaA,EAAM,MAAM,OAAQc,CAAM,EAAId,CACrE,EACIiM,EAAkB,SAA0BpL,EAAO,CACrD,OAAOA,EAAM,OAAO,YAAc,OAAOA,EAAM,cAAiB,WAAaA,EAAM,aAAc,EAAC,CAAC,EAAIA,EAAM,MAC/G,EACIqL,GAAkB,SAA0B5F,EAAU6F,EAAa,CACrE,IAAIC,GAAOD,GAAgB,KAAiC,OAASA,EAAY,WAAa,SAC1FE,EAASvB,EAAe,CAC1B,wBAAyB,GACzB,kBAAmB,GACnB,kBAAmB,EACpB,EAAEqB,CAAW,EACVG,EAAQ,CAGV,WAAY,CAAE,EAcd,gBAAiB,CAAE,EAMnB,eAAgB,CAAE,EAClB,4BAA6B,KAC7B,wBAAyB,KACzB,OAAQ,GACR,OAAQ,GAGR,uBAAwB,MAC5B,EACMnB,EACAoB,EAAY,SAAoBC,EAAuBC,EAAYC,EAAkB,CACvF,OAAOF,GAAyBA,EAAsBC,CAAU,IAAM,OAASD,EAAsBC,CAAU,EAAIJ,EAAOK,GAAoBD,CAAU,CAC5J,EACME,EAAqB,SAA6B9M,EAAS,CAC7D,OAAOyM,EAAM,gBAAgB,UAAU,SAAS5D,EAAM,CACpD,IAAIkE,EAAYlE,EAAK,UAAWmE,EAAgBnE,EAAK,cACrD,OAAOkE,EAAU,SAAS/M,CAAO,GAIjCgN,EAAc,KAAK,SAAS7F,EAAM,CAChC,OAAOA,IAASnH,CACxB,CAAO,CACP,CAAK,CACL,EACMiN,EAAmB,SAA2BL,EAAY,CAC5D,IAAIM,EAAcV,EAAOI,CAAU,EACnC,GAAI,OAAOM,GAAgB,WAAY,CACrC,QAASC,EAAQ,UAAU,OAAQlM,EAAS,IAAI,MAAMkM,EAAQ,EAAIA,EAAQ,EAAI,CAAC,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IAC1GnM,EAAOmM,EAAQ,CAAC,EAAI,UAAUA,CAAK,EAErCF,EAAcA,EAAY,MAAM,OAAQjM,CAAM,CAC/C,CAID,GAHIiM,IAAgB,KAClBA,EAAc,QAEZ,CAACA,EAAa,CAChB,GAAIA,IAAgB,QAAUA,IAAgB,GAC5C,OAAOA,EAET,MAAM,IAAI,MAAM,IAAI,OAAON,EAAY,8DAA8D,CAAC,CACvG,CACD,IAAIzF,EAAO+F,EACX,GAAI,OAAOA,GAAgB,WACzB/F,EAAOoF,EAAI,cAAcW,CAAW,EAChC,CAAC/F,GACH,MAAM,IAAI,MAAM,IAAI,OAAOyF,EAAY,uCAAuC,CAAC,EAGnF,OAAOzF,CACX,EACMkG,EAAsB,UAAgC,CACxD,IAAIlG,EAAO8F,EAAiB,cAAc,EAC1C,GAAI9F,IAAS,GACX,MAAO,GAET,GAAIA,IAAS,OACX,GAAI2F,EAAmBP,EAAI,aAAa,GAAK,EAC3CpF,EAAOoF,EAAI,kBACN,CACL,IAAIe,EAAqBb,EAAM,eAAe,CAAC,EAC3Cc,EAAoBD,GAAsBA,EAAmB,kBACjEnG,EAAOoG,GAAqBN,EAAiB,eAAe,CAC7D,CAEH,GAAI,CAAC9F,EACH,MAAM,IAAI,MAAM,8DAA8D,EAEhF,OAAOA,CACX,EACMqG,EAAsB,UAAgC,CAwCxD,GAvCAf,EAAM,gBAAkBA,EAAM,WAAW,IAAI,SAASM,EAAW,CAC/D,IAAIC,EAAgB1C,GAASyC,EAAWP,EAAO,eAAe,EAC1DiB,EAAiBlD,GAAUwC,EAAWP,EAAO,eAAe,EAChE,MAAO,CACL,UAAAO,EACA,cAAAC,EACA,eAAAS,EACA,kBAAmBT,EAAc,OAAS,EAAIA,EAAc,CAAC,EAAI,KACjE,iBAAkBA,EAAc,OAAS,EAAIA,EAAcA,EAAc,OAAS,CAAC,EAAI,KASvF,iBAAkB,SAA0B7F,EAAM,CAChD,IAAIuG,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAS,UAAU,CAAC,EAAI,GAC3EC,EAAUF,EAAe,UAAU,SAASG,EAAG,CACjD,OAAOA,IAAMzG,CACzB,CAAW,EACD,GAAI,EAAAwG,EAAU,GAGd,OAAID,EACKD,EAAe,MAAME,EAAU,CAAC,EAAE,KAAK,SAASC,EAAG,CACxD,OAAOpD,EAAWoD,EAAGpB,EAAO,eAAe,CACzD,CAAa,EAEIiB,EAAe,MAAM,EAAGE,CAAO,EAAE,QAAS,EAAC,KAAK,SAASC,EAAG,CACjE,OAAOpD,EAAWoD,EAAGpB,EAAO,eAAe,CACvD,CAAW,CACF,CACT,CACA,CAAK,EACDC,EAAM,eAAiBA,EAAM,gBAAgB,OAAO,SAASoB,EAAO,CAClE,OAAOA,EAAM,cAAc,OAAS,CAC1C,CAAK,EACGpB,EAAM,eAAe,QAAU,GAAK,CAACQ,EAAiB,eAAe,EACvE,MAAM,IAAI,MAAM,qGAAqG,CAE3H,EACMa,EAAW,SAASC,EAAU5G,EAAM,CACtC,GAAIA,IAAS,IAGTA,IAASoF,EAAI,cAGjB,IAAI,CAACpF,GAAQ,CAACA,EAAK,MAAO,CACxB4G,EAAUV,EAAmB,CAAE,EAC/B,MACD,CACDlG,EAAK,MAAM,CACT,cAAe,CAAC,CAACqF,EAAO,aAC9B,CAAK,EACDC,EAAM,wBAA0BtF,EAC5BsE,GAAkBtE,CAAI,GACxBA,EAAK,OAAM,EAEjB,EACM6G,EAAqB,SAA6BC,EAAuB,CAC3E,IAAI9G,EAAO8F,EAAiB,iBAAkBgB,CAAqB,EACnE,OAAO9G,IAAcA,IAAS,GAAQ,GAAQ8G,EAClD,EACMC,EAAmB,SAA2B3M,EAAG,CACnD,IAAIG,EAAS0K,EAAgB7K,CAAC,EAC9B,GAAI,EAAAuL,EAAmBpL,CAAM,GAAK,GAGlC,IAAIuK,EAAeO,EAAO,wBAAyBjL,CAAC,EAAG,CACrD+J,EAAK,WAAW,CAYd,YAAakB,EAAO,yBAA2B,CAAC9B,EAAYhJ,EAAQ8K,EAAO,eAAe,CAClG,CAAO,EACD,MACD,CACGP,EAAeO,EAAO,kBAAmBjL,CAAC,GAG9CA,EAAE,eAAc,EACpB,EACM4M,EAAe,SAAuB5M,EAAG,CAC3C,IAAIG,EAAS0K,EAAgB7K,CAAC,EAC1B6M,EAAkBtB,EAAmBpL,CAAM,GAAK,EAChD0M,GAAmB1M,aAAkB,SACnC0M,IACF3B,EAAM,wBAA0B/K,IAGlCH,EAAE,yBAAwB,EAC1BuM,EAASrB,EAAM,yBAA2BY,EAAqB,CAAA,EAErE,EACMgB,EAAW,SAAmB9M,EAAG,CACnC,IAAIG,EAAS0K,EAAgB7K,CAAC,EAC9BiM,IACA,IAAIc,EAAkB,KACtB,GAAI7B,EAAM,eAAe,OAAS,EAAG,CACnC,IAAI8B,EAAiBzB,EAAmBpL,CAAM,EAC1C8M,EAAiBD,GAAkB,EAAI9B,EAAM,gBAAgB8B,CAAc,EAAI,OACnF,GAAIA,EAAiB,EACfhN,EAAE,SACJ+M,EAAkB7B,EAAM,eAAeA,EAAM,eAAe,OAAS,CAAC,EAAE,iBAExE6B,EAAkB7B,EAAM,eAAe,CAAC,EAAE,0BAEnClL,EAAE,SAAU,CACrB,IAAIkN,EAAoB3C,EAAUW,EAAM,eAAgB,SAASiC,EAAO,CACtE,IAAInB,EAAoBmB,EAAM,kBAC9B,OAAOhN,IAAW6L,CAC5B,CAAS,EAID,GAHIkB,EAAoB,IAAMD,EAAe,YAAc9M,GAAUgJ,EAAYhJ,EAAQ8K,EAAO,eAAe,GAAK,CAAChC,EAAW9I,EAAQ8K,EAAO,eAAe,GAAK,CAACgC,EAAe,iBAAiB9M,EAAQ,EAAK,KAC/M+M,EAAoBF,GAElBE,GAAqB,EAAG,CAC1B,IAAIE,EAAwBF,IAAsB,EAAIhC,EAAM,eAAe,OAAS,EAAIgC,EAAoB,EACxGG,EAAmBnC,EAAM,eAAekC,CAAqB,EACjEL,EAAkBM,EAAiB,gBACpC,CACT,KAAa,CACL,IAAIC,EAAmB/C,EAAUW,EAAM,eAAgB,SAASqC,EAAO,CACrE,IAAIC,EAAmBD,EAAM,iBAC7B,OAAOpN,IAAWqN,CAC5B,CAAS,EAID,GAHIF,EAAmB,IAAML,EAAe,YAAc9M,GAAUgJ,EAAYhJ,EAAQ8K,EAAO,eAAe,GAAK,CAAChC,EAAW9I,EAAQ8K,EAAO,eAAe,GAAK,CAACgC,EAAe,iBAAiB9M,CAAM,KACvMmN,EAAmBN,GAEjBM,GAAoB,EAAG,CACzB,IAAIG,GAAyBH,IAAqBpC,EAAM,eAAe,OAAS,EAAI,EAAIoC,EAAmB,EACvGI,GAAoBxC,EAAM,eAAeuC,EAAsB,EACnEV,EAAkBW,GAAkB,iBACrC,CACF,CACP,MACMX,EAAkBrB,EAAiB,eAAe,EAEhDqB,IACF/M,EAAE,eAAc,EAChBuM,EAASQ,CAAe,EAE9B,EACMY,EAAW,SAAmB3N,EAAG,CACnC,GAAImK,GAAcnK,CAAC,GAAK0K,EAAeO,EAAO,kBAAmBjL,CAAC,IAAM,GAAO,CAC7EA,EAAE,eAAc,EAChB+J,EAAK,WAAU,EACf,MACD,CACD,GAAIK,GAAWpK,CAAC,EAAG,CACjB8M,EAAS9M,CAAC,EACV,MACD,CACL,EACM4N,EAAa,SAAqB5N,EAAG,CACvC,IAAIG,EAAS0K,EAAgB7K,CAAC,EAC1BuL,EAAmBpL,CAAM,GAAK,GAG9BuK,EAAeO,EAAO,wBAAyBjL,CAAC,GAGhD0K,EAAeO,EAAO,kBAAmBjL,CAAC,IAG9CA,EAAE,eAAc,EAChBA,EAAE,yBAAwB,EAC9B,EACM6N,EAAe,UAAyB,CAC1C,GAAK3C,EAAM,OAGX,OAAArB,EAAiB,aAAaE,CAAI,EAClCmB,EAAM,uBAAyBD,EAAO,kBAAoBZ,EAAM,UAAW,CACzEkC,EAAST,EAAmB,CAAE,CACpC,CAAK,EAAIS,EAAST,EAAmB,CAAE,EACnCd,EAAI,iBAAiB,UAAW4B,EAAc,EAAI,EAClD5B,EAAI,iBAAiB,YAAa2B,EAAkB,CAClD,QAAS,GACT,QAAS,EACf,CAAK,EACD3B,EAAI,iBAAiB,aAAc2B,EAAkB,CACnD,QAAS,GACT,QAAS,EACf,CAAK,EACD3B,EAAI,iBAAiB,QAAS4C,EAAY,CACxC,QAAS,GACT,QAAS,EACf,CAAK,EACD5C,EAAI,iBAAiB,UAAW2C,EAAU,CACxC,QAAS,GACT,QAAS,EACf,CAAK,EACM5D,CACX,EACM+D,EAAkB,UAA4B,CAChD,GAAK5C,EAAM,OAGX,OAAAF,EAAI,oBAAoB,UAAW4B,EAAc,EAAI,EACrD5B,EAAI,oBAAoB,YAAa2B,EAAkB,EAAI,EAC3D3B,EAAI,oBAAoB,aAAc2B,EAAkB,EAAI,EAC5D3B,EAAI,oBAAoB,QAAS4C,EAAY,EAAI,EACjD5C,EAAI,oBAAoB,UAAW2C,EAAU,EAAI,EAC1C5D,CACX,EACE,OAAAA,EAAO,CACL,IAAI,QAAS,CACX,OAAOmB,EAAM,MACd,EACD,IAAI,QAAS,CACX,OAAOA,EAAM,MACd,EACD,SAAU,SAAkB6C,EAAiB,CAC3C,GAAI7C,EAAM,OACR,OAAO,KAET,IAAI8C,EAAa7C,EAAU4C,EAAiB,YAAY,EACpDE,EAAiB9C,EAAU4C,EAAiB,gBAAgB,EAC5DG,EAAoB/C,EAAU4C,EAAiB,mBAAmB,EACjEG,GACHjC,IAEFf,EAAM,OAAS,GACfA,EAAM,OAAS,GACfA,EAAM,4BAA8BF,EAAI,cACpCgD,GACFA,IAEF,IAAIG,EAAmB,UAA6B,CAC9CD,GACFjC,IAEF4B,IACII,GACFA,GAEV,EACM,OAAIC,GACFA,EAAkBhD,EAAM,WAAW,OAAM,CAAE,EAAE,KAAKiD,EAAkBA,CAAgB,EAC7E,OAETA,IACO,KACR,EACD,WAAY,SAAoBC,EAAmB,CACjD,GAAI,CAAClD,EAAM,OACT,OAAO,KAET,IAAIxK,EAAUgJ,EAAe,CAC3B,aAAcuB,EAAO,aACrB,iBAAkBA,EAAO,iBACzB,oBAAqBA,EAAO,mBAC7B,EAAEmD,CAAiB,EACpB,aAAalD,EAAM,sBAAsB,EACzCA,EAAM,uBAAyB,OAC/B4C,IACA5C,EAAM,OAAS,GACfA,EAAM,OAAS,GACfrB,EAAiB,eAAeE,CAAI,EACpC,IAAIsE,EAAelD,EAAUzK,EAAS,cAAc,EAChD4N,EAAmBnD,EAAUzK,EAAS,kBAAkB,EACxD6N,EAAsBpD,EAAUzK,EAAS,qBAAqB,EAC9D8N,EAAcrD,EAAUzK,EAAS,cAAe,yBAAyB,EACzE2N,GACFA,IAEF,IAAII,EAAqB,UAA+B,CACtDpE,EAAM,UAAW,CACXmE,GACFjC,EAASE,EAAmBvB,EAAM,2BAA2B,CAAC,EAE5DoD,GACFA,GAEZ,CAAS,CACT,EACM,OAAIE,GAAeD,GACjBA,EAAoB9B,EAAmBvB,EAAM,2BAA2B,CAAC,EAAE,KAAKuD,EAAoBA,CAAkB,EAC/G,OAETA,IACO,KACR,EACD,MAAO,UAAiB,CACtB,OAAIvD,EAAM,QAAU,CAACA,EAAM,OAClB,MAETA,EAAM,OAAS,GACf4C,IACO,KACR,EACD,QAAS,UAAmB,CAC1B,MAAI,CAAC5C,EAAM,QAAU,CAACA,EAAM,OACnB,MAETA,EAAM,OAAS,GACfe,IACA4B,IACO,KACR,EACD,wBAAyB,SAAiCa,EAAmB,CAC3E,IAAIC,EAAkB,CAAA,EAAG,OAAOD,CAAiB,EAAE,OAAO,OAAO,EACjE,OAAAxD,EAAM,WAAayD,EAAgB,IAAI,SAASlQ,EAAS,CACvD,OAAO,OAAOA,GAAY,SAAWuM,EAAI,cAAcvM,CAAO,EAAIA,CAC1E,CAAO,EACGyM,EAAM,QACRe,IAEK,IACR,CACL,EACElC,EAAK,wBAAwB7E,CAAQ,EAC9B6E,CACT,EAGA,SAAS6E,GAAYC,EAAQ,CAC3B,IAAIC,EACAC,EACJ,OAAO,iBAAiB,UAAW,IAAM,CACvCD,EAAcC,EACdA,EAAiB,SAAS,aAC9B,CAAG,EACDF,EAAO,MAAM,QAAUrN,GAAO,CAC5B,IAAIwN,EAASxN,EACb,MAAO,CACL,WAAY,GACZ,aAAc,GACd,OAAOyN,EAAK,CACV,OAAAD,EAASC,EACF,IACR,EACD,kBAAmB,CACjB,YAAK,WAAa,GACX,IACR,EACD,UAAW,CACT,YAAK,WAAa,GACX,IACR,EACD,gBAAiB,CACf,YAAK,aAAe,GACb,IACR,EACD,MAAO,CACL,OAAO,KAAK,gBACb,EACD,UAAUA,EAAK,CACb,OAAO9F,EAAY8F,CAAG,CACvB,EACD,mBAAoB,CAClB,OAAOH,CACR,EACD,aAAc,CACZ,OAAOA,CACR,EACD,SAAU,CACR,OAAOC,CACR,EACD,YAAa,CACX,OAAI,MAAM,QAAQC,CAAM,EACfA,EACFhG,GAAUgG,EAAQ,CAAE,aAAc,MAAQ,CAAA,CAClD,EACD,KAAM,CACJ,OAAO,KAAK,YACb,EACD,QAAQC,EAAK,CACX,IAAIC,EAAM,KAAK,MACf,OAAOA,EAAI,CAAC,GAAKA,EAAI,CAAC,EAAE,WAAWD,CAAG,CACvC,EACD,OAAOA,EAAK,CACV,IAAIC,EAAM,KAAK,MACf,OAAOA,EAAI,QAAUA,EAAI,MAAM,EAAE,EAAE,CAAC,EAAE,WAAWD,CAAG,CACrD,EACD,UAAW,CACT,OAAO,KAAK,MAAM,CAAC,CACpB,EACD,SAAU,CACR,OAAO,KAAK,MAAM,MAAM,EAAE,EAAE,CAAC,CAC9B,EACD,SAAU,CACR,IAAIE,EAAO,KAAK,MACZC,EAAU,SAAS,cACvB,GAAID,EAAK,QAAQC,CAAO,IAAM,GAE9B,OAAI,KAAK,cAAgBD,EAAK,QAAQC,CAAO,IAAMD,EAAK,OAAS,EACxDA,EAAK,CAAC,EAERA,EAAKA,EAAK,QAAQC,CAAO,EAAI,CAAC,CACtC,EACD,aAAc,CACZ,IAAID,EAAO,KAAK,MACZC,EAAU,SAAS,cACvB,GAAID,EAAK,QAAQC,CAAO,IAAM,GAE9B,OAAI,KAAK,cAAgBD,EAAK,QAAQC,CAAO,IAAM,EAC1CD,EAAK,MAAM,EAAE,EAAE,CAAC,EAElBA,EAAKA,EAAK,QAAQC,CAAO,EAAI,CAAC,CACtC,EACD,OAAQ,CACN,KAAK,MAAM,KAAK,SAAU,CAAA,CAC3B,EACD,MAAO,CACL,KAAK,MAAM,KAAK,QAAS,CAAA,CAC1B,EACD,MAAO,CACL,KAAK,MAAM,KAAK,QAAS,CAAA,CAC1B,EACD,UAAW,CACT,KAAK,MAAM,KAAK,YAAa,CAAA,CAC9B,EACD,MAAO,CACL,OAAO,KAAK,UACb,EACD,MAAMH,EAAK,CACJA,GAEL,WAAW,IAAM,CACVA,EAAI,aAAa,UAAU,GAC9BA,EAAI,aAAa,WAAY,GAAG,EAClCA,EAAI,MAAM,CAAE,cAAe,KAAK,SAAW,CAAA,CACrD,CAAS,CACF,CACP,CACA,CAAG,EACDJ,EAAO,UAAU,OAAQA,EAAO,gBAC9B,CAACrN,EAAI,CAAE,WAAA6N,EAAY,UAAAC,CAAS,EAAI,CAAE,OAAAC,EAAQ,cAAAC,EAAe,QAAAC,KAAc,CACrE,IAAIC,EAAYF,EAAcH,CAAU,EACpCM,EAAW,GACXjP,EAAU,CACZ,kBAAmB,GACnB,kBAAmB,GACnB,cAAe,IAAMc,CAC7B,EACUoO,EAAcpO,EAAG,cAAc,aAAa,EAC5CoO,IACFlP,EAAQ,aAAekP,GACzB,IAAI7F,EAAOe,GAAgBtJ,EAAId,CAAO,EAClCmP,EAAY,IAAM,CAC5B,EACUC,EAAuB,IAAM,CACvC,EACM,MAAMC,EAAe,IAAM,CACzBF,IACAA,EAAY,IAAM,CAC1B,EACQC,IACAA,EAAuB,IAAM,CACrC,EACQ/F,EAAK,WAAW,CACd,YAAa,CAACuF,EAAU,SAAS,UAAU,CACrD,CAAS,CACT,EACMC,EAAO,IAAMG,EAAW9Q,GAAU,CAC5B+Q,IAAa/Q,IAEbA,GAAS,CAAC+Q,GACZ,WAAW,IAAM,CACXL,EAAU,SAAS,OAAO,IAC5BO,EAAYG,EAASxO,CAAE,GACrB8N,EAAU,SAAS,UAAU,IAC/BQ,EAAuBG,GAAgB,GACzClG,EAAK,SAAQ,CACzB,CAAW,EAEC,CAACnL,GAAS+Q,GACZI,IAEFJ,EAAW,CAAC,CAAC/Q,EACd,CAAA,CAAC,EACF6Q,EAAQM,CAAY,CACrB,EAID,CAACvO,EAAI,CAAE,WAAA6N,EAAY,UAAAC,CAAS,EAAI,CAAE,SAAAY,CAAQ,IAAO,CAC3CZ,EAAU,SAAS,OAAO,GAAKY,EAASb,CAAU,GACpDW,EAASxO,CAAE,CACd,CACL,CAAG,CACH,CACA,SAASwO,EAASxO,EAAI,CACpB,IAAI2O,EAAQ,CAAA,EACZ,OAAAC,GAAgB5O,EAAK6O,GAAY,CAC/B,IAAIC,EAAQD,EAAQ,aAAa,aAAa,EAC9CA,EAAQ,aAAa,cAAe,MAAM,EAC1CF,EAAM,KAAK,IAAMG,GAASD,EAAQ,gBAAgB,aAAa,CAAC,CACpE,CAAG,EACM,IAAM,CACX,KAAOF,EAAM,QACXA,EAAM,IAAG,GACf,CACA,CACA,SAASC,GAAgB5O,EAAIK,EAAU,CACjCL,EAAG,WAAW,SAAS,IAAI,GAAK,CAACA,EAAG,YAExC,MAAM,KAAKA,EAAG,WAAW,QAAQ,EAAE,QAAS6O,GAAY,CAClDA,EAAQ,WAAW7O,CAAE,EACvB4O,GAAgB5O,EAAG,WAAYK,CAAQ,EAEvCA,EAASwO,CAAO,CAEtB,CAAG,CACH,CACA,SAASJ,IAAmB,CAC1B,IAAIM,EAAW,SAAS,gBAAgB,MAAM,SAC1CC,EAAe,SAAS,gBAAgB,MAAM,aAC9CC,EAAiB,OAAO,WAAa,SAAS,gBAAgB,YAClE,gBAAS,gBAAgB,MAAM,SAAW,SAC1C,SAAS,gBAAgB,MAAM,aAAe,GAAGA,CAAc,KACxD,IAAM,CACX,SAAS,gBAAgB,MAAM,SAAWF,EAC1C,SAAS,gBAAgB,MAAM,aAAeC,CAClD,CACA,CAGA,IAAIE,GAAiB9B,GAIrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC5+Be,SAAA+B,IAAW,CAExB,GADuB,SAAS,eAAe,iBAAiB,IACzC,KACrB,OAGF,MAAMC,EAAY,SAAS,cAAc,oBAAoB,EAE7DA,EAAU,iBAAiB,SAAUnR,GAAS,CAC5C,KAAM,CAAE,MAAAoR,GAAUpR,EAAM,OACxB,GAAI,CAACqR,GAAmBD,CAAK,EAE3BD,EAAU,MAAQ,OACb,CACL,MAAMG,EAAc,SAAS,eAAe,0BAA0B,EAEtEF,EAAM,QAAQG,GAAQ,CACpBD,EAAY,mBACV,cACA;AAAA,qCAC2BC,EAAK,IAAI;AAAA,gDACEA,EAAK,IAAI;AAAA,uDACFA,EAAK,IAAI;AAAA;AAAA,WAGvD,CACT,CAAO,EACDD,EAAY,UAAU,OAAO,cAAc,CAC5C,CACL,CAAG,EAED,iBAAiB,yBAA0BtR,GAAS,CAClD,KAAM,CAAE,KAAAuR,EAAM,SAAAC,CAAU,EAAGxR,EAAM,OAC3ByR,EAAkB,SAAS,eAC/B,0BAA0BF,EAAK,IAAI,EACpC,EACDE,EAAgB,MAAM,MAAQ,GAAGD,CAAQ,GAC7C,CAAG,EAGD,iBAAiB,oBAAqBxR,GAAS,CAC7C,KAAM,CAAE,KAAAuR,GAASvR,EAAM,OACP,SAAS,eAAe,iBAAiBuR,EAAK,IAAI,EAAE,EAC5D,UAAU,IAAI,yBAAyB,CACnD,CAAG,EAED,iBAAiB,sBAAuBvR,GAAS,CAC/C,KAAM,CAAE,KAAAuR,EAAM,MAAAG,CAAO,EAAG1R,EAAM,OACxBhB,EAAU,SAAS,eAAe,iBAAiBuS,EAAK,IAAI,EAAE,EACpEvS,EAAQ,UAAU,IAAI,sBAAsB,EAC5CA,EAAQ,aAAa,QAAS0S,CAAK,EACnC,MAAMH,EAAK,KAAO,uBAAyBG,CAAK,CACpD,CAAG,CACH,CAEA,SAASC,IAAqB,CAC5B,MAAMC,EAA2BC,GAC/B,mCACD,EAED,OAAO,IAAI,OAAO,KAAMD,CAAwB,IAAI,CACtD,CAEA,SAASE,GAAmBC,EAAU,CAEpC,MAAI,EAAAA,EAAS,MAAMJ,GAAkB,CAAE,CAKzC,CAEA,SAASN,GAAmBD,EAAO,CACjC,KAAM,CAAE,MAAAY,GAAU,MAAM,UAElBC,EAAUD,EAAM,KAAKZ,EAAOG,GAAQO,GAAmBP,EAAK,IAAI,CAAC,EAEvE,OAAKU,GAIH,MADE,wFACW,EAERA,CACT,CCpFe,SAASC,IAAsB,CACxCC,GAAU,GACZC,GAAoB,mBAAqBC,GAAY,CACnD,MAAMC,EAAYD,EAAQ,QAAQ,UAC5BE,EAAcF,EAAQ,UACtBG,EAAiBD,EAAY,CAAC,EAEpCE,GACE,cAAcH,CAAS,GACvB,CAAC,CAAE,kBAAAI,EAAmB,gBAAAC,KAAsB,CACrCD,IAGLL,EAAQ,UAAYG,EAAiBG,EAAkB,aAAeJ,EAAc,oDACrF,CACF,CACP,CAAK,CAEL,CCnBA,SAASK,GAAO7Q,EAAI,CAClBA,EAAG,WAAW,YAAYA,CAAE,CAC9B,CAEe,SAAS8Q,IAAoB,CACrB,SAAS,iBAAiB,gBAAgB,EAElD,QAASC,GAAc,CAClC,MAAMC,EAAa,SAAS,eAAeD,EAAU,QAAQ,OAAO,EACpEA,EAAU,iBAAiB,QAAS,IAAMF,GAAOG,CAAU,CAAC,CAChE,CAAG,CACH,CCZe,SAASC,IAAiB,CACvC,MAAMC,EAAwB,SAAS,iBACrC,iCACD,EACKC,EAAc,SAAS,iBAAiB,yBAAyB,EAEtE,CAAA,EAAG,QAAQ,KAAKD,EAAuB,SAASE,EAAsB,CACrEA,EAAqB,aAAa,SAAU,EAAI,CACpD,CAAG,EACA,CAAA,EAAG,QAAQ,KAAKD,EAAa,SAASE,EAAY,CACjDA,EAAW,iBAAiB,QAAS,SAASpT,EAAO,CACnDA,EAAM,eAAgB,EAEtB,MAAMmT,EAAuB,KAAK,cAAc,cAAc,cAC5D,iCACD,EAGIA,EAAqB,aAAa,QAAQ,GAK7CC,EAAW,UAAY,YACvBD,EAAqB,gBAAgB,QAAQ,EAC7CC,EAAW,aAAa,gBAAiB,EAAI,IAN7CA,EAAW,UAAY,cACvBD,EAAqB,aAAa,SAAU,EAAI,EAChDC,EAAW,aAAa,gBAAiB,EAAK,EAMtD,CAAK,CACL,CAAG,CACH,CC7Be,SAAAC,IAAY,CACzB,SAAS,iBAAiB,sBAAsB,EAAE,QAASlQ,GAAS,CAGlEA,EAAK,iBAAiB,eAAgB,IAAM,CAC1CA,EAAK,WAAW,YAAYA,CAAI,CACtC,CAAK,EAEDA,EAAK,iBAAiB,aAAc,IAAM,CACxCA,EAAK,UAAU,IAAI,OAAO,EAC1BA,EAAK,UAAU,IAAI,OAAO,EAC1BA,EAAK,UAAY,4BAA4BA,EAAK,SAAS,GACjE,CAAK,CACL,CAAG,CACH,CCVO,SAASmQ,GAAW/R,EAAKgS,EAAW,MAAO,CAC5CA,GAAY,MACdC,GAAmBjS,CAAG,EACbkS,EAAU,cACnBA,EAAU,MAAMlS,EAAKmS,IAAgB,CACnC,cAAe,CACb,KAAM,MACN,WAAY,IACZ,QAAS,IACT,UAAW,IACX,SAAU,GACX,CACP,CAAK,EAED,SAAS,uBAAuB,WAAW,EAAE,CAAC,EAAE,IAAMnS,GAEtDoS,GAAuBpS,CAAG,CAE9B,CAGA,SAASiS,GAAmBjS,EAAK,CAC/BqS,GACE,sDAAsD,mBACpDrS,CACN,CAAK,EACL,CACA,CAGA,SAASoS,GAAuBpS,EAAK,CACnCqS,GACE,sCAAsC,mBACpCrS,CACD,CAAA,gBACL,CACA,CAMA,SAASqS,GAAYC,EAAW,CACb,OAAO,WACtB,oCACJ,EAAI,QAEF,MAAMC,EAAS,SAAS,cAAc,QAAQ,EAM9C,IALAA,EAAO,IAAMD,EACbC,EAAO,MAAQJ,IAAe,QAAQ,MACtCI,EAAO,QAAU,OAGVJ,EAAc,EAAC,YACpBA,EAAc,EAAC,YAAYA,EAAc,EAAC,UAAU,EAGtDA,EAAc,EAAC,YAAYI,CAAM,CACnC,CAEA,SAASJ,GAAe,CACtB,MAAMK,EAAU,uBAChB,OAAO,SAAS,eAAeA,CAAO,CACxC,CCjEA,SAASC,GAAsBC,EAAmB,CAEhD,MAAM3O,EAAa,KAAK,MACtB2O,EAAkB,QAAQ,uBAC3B,EACD,IAAIC,EAAwB,EAE5B,SAAS,iBAAiB,UAAWC,CAAgB,EAErD,SAASA,EAAiBnU,EAAO,CAC/BA,EAAM,eAAgB,EAEtB,MAAMoU,EAAe,GACfC,EAAgB,GAChBC,EAAe,GAEjBtU,EAAM,KAAOoU,EACfG,EAAuBL,EAAwB,CAAC,EACvClU,EAAM,KAAOqU,EACtBE,EAAuBL,EAAwB,CAAC,EACvClU,EAAM,KAAOsU,GACtBC,EAAuBC,EAAkB,CAAE,CAE9C,CAED,SAASA,GAAqB,CAC5B,MAAMC,EAAkBnP,EAAW4O,CAAqB,EAAE,UACpDQ,EACJD,GAAmB,KAAK,IAAI,GAAGnP,EAAW,IAAIvD,GAAMA,EAAG,SAAS,CAAC,EAEnE,OAAOuD,EAAW,UAAUvD,GACtB2S,EACK,GAEA3S,EAAG,UAAY0S,CAEzB,CACF,CAED,SAASF,EAAuBxN,EAAG,CAEjCmN,GACInN,EAAIzB,EAAW,OAAUA,EAAW,QAAUA,EAAW,OAC7D,MAAMqP,EAAmBrP,EAAW4O,CAAqB,EAEzD,SAAS,cAAc,6BAA6B,EAAE,YACpDS,EAAiB,KACnB,SAAS,cAAc,kCAAkC,EAAE,YACzDA,EAAiB,UACnB,SAAS,cAAc,mCAAmC,EAAE,YAC1DA,EAAiB,WACnB,SAAS,cAAc,2BAA2B,EAAE,MAClDA,EAAiB,GAEnBrB,GAAWqB,EAAiB,IAAQA,EAAiB,QAAW,CACjE,CACH,CAEe,SAAAC,IAAW,CACxB,MAAMX,EAAoB,SAAS,cACjC,mCACD,EACIA,GAGLD,GAAsBC,CAAiB,CACzC,CCpEA,MAAMY,EAAgB,UAAW,CAC/B,MAAM3L,EAAO,KAEP4L,EAAU,IAAI,gBAAgB,CAClC,KAAM5L,EAAK,QAAQ,KACnB,iBAAkBA,EAAK,QAAQ,eAC/B,mBAAoBA,EAAK,QAAQ,gBACrC,CAAG,EAED,MAAM,uBAAwB,CAC5B,OAAQ,OACR,QAAS,CACP,eAAgB,SAAS,cAAc,uBAAuB,EAAE,OACjE,EACD,KAAM4L,CACV,CAAG,EAAE,KAAK,IAAM,CACZ5L,EAAK,UAAYA,EAAK,UAAY,cAClCA,EAAK,UAAU,IAAI,sBAAsB,CAC7C,CAAG,CACH,EAEe,SAAA6L,IAAW,CACF,SAAS,iBAC7B,8BACD,EAEa,QAAQC,GAAgB,CACpCA,EAAa,iBAAiB,QAASH,EAAe,CAAE,KAAM,GAAM,EACpEG,EAAa,iBAAiB,cAAeH,EAAe,CAAE,KAAM,GAAM,CAC9E,CAAG,CACH,CC9BA,SAASI,EAA6BlT,EAAI,CACpCA,EAAG,OAAS,IACdA,EAAG,UAAU,OAAO,mBAAmB,EAEvCA,EAAG,UAAU,IAAI,mBAAmB,CAExC,CAEe,SAAAmT,IAAW,CACU,SAAS,iBACzC,uBACD,EAEyB,QAAQC,GAA4B,CAC5DA,EAAyB,iBAAiB,SAAUnV,GAAS,CAC3DiV,EAA6BjV,EAAM,MAAM,CAC/C,CAAK,EAGGmV,EAAyB,OAAS,KACpCF,EAA6BE,CAAwB,CAE3D,CAAG,CACH,CCbA,SAAS,iBAAiB,mBAAoB,IAAM,CAClDC,GAAW,EACXlE,GAAe,EACfmE,GAAW,EACXC,GAAa,EACbC,GAAU,EACVlC,GAAa,EACbuB,GAAqB,EACrBM,GAAQ,EACRH,GAAmB,CACrB,CAAC,ECpBD,SAAS,iBAAiB,mBAAoB,IAAM,CAClD,IAAIS,EAAY,GAEhB,MAAMC,EAAiB,IAAM,CAC3B,GAAID,EAAW,OAEf,MAAME,EAAiB,OAAO,YAAc,OAAO,QAC7CC,EAAY,SAAS,gBAAgB,aAAe,IAAM,SAAS,eAAe,QAAQ,EAAE,aAE9FD,GAAkBC,GACpBC,GAEN,EAEQA,EAAgB,SAAY,CAEhC,GAAI,CADmB,SAAS,cAAc,QAAQ,EACjC,OAErBJ,EAAY,GACZ,MAAMK,EAAU,SAAS,eAAe,yBAAyB,EACjEA,EAAQ,MAAM,QAAU,QAExB,MAAMC,EAAW,SAAS,cAAc,QAAQ,EAAE,QAAQ,SAG1D,GAAI,CAACA,EAAU,CACbD,EAAQ,MAAM,QAAU,OACxB,OAAO,oBAAoB,SAAUJ,CAAc,EACnD,MACD,CAED,MAAMnW,EAAY,SAAS,cAAc,yBAAyB,EAAE,QAEpE,GAAI,CACF,MAAM4B,EAAW,MAAM,MAAM4U,EAAU,CACrC,OAAQ,MACR,QAAS,CACP,OAAU,mBACV,eAAgBxW,CACjB,CACT,CAAO,EAED,GAAI,CAAC4B,EAAS,GAAI,MAAM,IAAI,MAAM,2BAA2B,EAC7D,MAAMZ,EAAO,MAAMY,EAAS,OACtB6U,EAAiB,SAAS,cAAc,QAAQ,EAEtDA,EAAe,mBAAmB,YAAazV,EAAK,MAAM,KAAK,EAAE,CAAC,EAClEyV,EAAe,QAAQ,SAAWzV,EAAK,UAElCA,EAAK,WACR,OAAO,oBAAoB,SAAUmV,CAAc,CAEtD,OAAQ/D,EAAO,CACd,QAAQ,MAAMA,CAAK,CACzB,QAAc,CACR8D,EAAY,GACZK,EAAQ,MAAM,QAAU,MACzB,CACL,EAEE,OAAO,iBAAiB,SAAUJ,CAAc,CAClD,CAAC,EC7BD,OAAO,OAASrG,EAChBA,EAAO,OAAO4G,EAAK,EACnB5G,EAAO,MAAK","x_google_ignoreList":[0,1]}