From c7db290aafedd813038e38acd3fb64b69ad2b1b0 Mon Sep 17 00:00:00 2001 From: Teddy Middleton-Smith Date: Tue, 17 Feb 2026 15:38:18 +0000 Subject: [PATCH] Fix: bugs, cleanup. --- .../71212_fn_TCG_MTG_Game_Player_Get_Many.sql | 44 +++++++++++++++++-- static/dist/js/main.bundle.js | 24 +++++----- static/dist/js/main.bundle.js.map | 2 +- static/js/pages/base_table.js | 4 +- static/js/pages/tcg/mtg_game.js | 18 ++++---- 5 files changed, 65 insertions(+), 27 deletions(-) diff --git a/static/PostgreSQL/71212_fn_TCG_MTG_Game_Player_Get_Many.sql b/static/PostgreSQL/71212_fn_TCG_MTG_Game_Player_Get_Many.sql index d2c1df7..ddc9207 100644 --- a/static/PostgreSQL/71212_fn_TCG_MTG_Game_Player_Get_Many.sql +++ b/static/PostgreSQL/71212_fn_TCG_MTG_Game_Player_Get_Many.sql @@ -38,12 +38,45 @@ BEGIN -- Outputs + WITH User_Name AS ( + SELECT + TCG_USER.user_id + , CASE + WHEN + TRIM(COALESCE(TCG_USER.firstname, '')) <> '' + AND TRIM(COALESCE(TCG_USER.surname, '')) <> '' + THEN CONCAT( + TRIM(COALESCE(TCG_USER.firstname, '')) <> '' + , ' ' + , TRIM(COALESCE(TCG_USER.surname, '')) <> '' + ) + WHEN TRIM(COALESCE(TCG_USER.firstname, '')) <> '' + THEN TRIM(COALESCE(TCG_USER.firstname, '')) <> '' + ELSE TRIM(COALESCE(TCG_USER.surname, '')) <> '' + END AS name + FROM tcg.public.TCG_User TCG_USER + ) RETURN QUERY SELECT PLAYER.player_id , PLAYER.game_id , PLAYER.user_id , PLAYER.deck_id - , PLAYER.name + , CASE + WHEN TRIM(COALESCE(PLAYER.name, '')) <> '' + THEN TRIM(COALESCE(PLAYER.name, '')) <> '' + WHEN + USER_NAME.name <> '' + AND TRIM(COALESCE(DECK.name, '')) <> '' + THEN CONCAT( + USER_NAME.name <> '' + , ' - ' + , TRIM(COALESCE(DECK.name, '')) <> '' + ) + ELSE CONCAT( + 'Player ' + , CAST(PLAYER.display_order AS VARCHAR) + ) + END AS name , PLAYER.notes , PLAYER.display_order , PLAYER.active @@ -54,6 +87,9 @@ BEGIN , PLAYER.change_set_id FROM tcg.public.TCG_MTG_Game_Player PLAYER INNER JOIN tcg.public.TCG_MTG_Game GAME ON PLAYER.game_id = GAME.game_id + -- LEFT JOIN tcg.public.TCG_User TCG_USER ON PLAYER.user_id = TCG_USER.user_id + LEFT JOIN User_Name USER_NAME ON PLAYER.user_id = USER_NAME.user_id + LEFT JOIN tcg.public.TCG_MTG_Deck DECK ON PLAYER.deck_id = DECK.deck_id WHERE ( ( @@ -90,9 +126,9 @@ $$; SELECT * FROM tcg.public.FN_TCG_MTG_Game_Player_Get_Many ( - a_get_all_game := TRUE + a_get_all_game := FALSE , a_get_inactive_game := FALSE - , a_game_ids := '' + , a_game_ids := '34' , a_require_all_id_filters_met := TRUE , a_require_any_id_filters_met := FALSE ) @@ -102,7 +138,7 @@ SELECT * FROM tcg.public.TCG_MTG_Game ; SELECT * -FROM tcg.public.tcg_mtg_game_player_temp -- TCG_MTG_Game_Player_Temp +FROM tcg.public.TCG_MTG_Game_Player_Temp ; SELECT * FROM tcg.public.TCG_MTG_Game_Player diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js index 1839dc1..cff3a3d 100644 --- a/static/dist/js/main.bundle.js +++ b/static/dist/js/main.bundle.js @@ -1467,7 +1467,7 @@ class TableBasePage extends BasePage { idCommandCategory = command[attrIdCommandCategory]; } } else { - idCommandCategory = Number(valueCurrentCommandCategoryFilter); + idCommandCategory = parseInt(valueCurrentCommandCategoryFilter); } return idCommandCategory; } @@ -1483,7 +1483,7 @@ class TableBasePage extends BasePage { let formFilters = TableBasePage.getFormFilters(); let commandFilter = formFilters.querySelector('#' + attrIdCommand); let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter); - let idCommand = Number(valueCurrentCommandFilter); + let idCommand = parseInt(valueCurrentCommandFilter); return idCommand; } getHasCommandFilter() { @@ -1778,7 +1778,7 @@ class PageMtgGame extends TableBasePage { // let activeRoundId = PageMtgGame.getActiveRoundId(); const roundDisplayOrderLabel = PageMtgGame.getRoundDisplayOrderLabel(); - const currentRoundDisplayOrder = Number(DOM.getElementValueCurrent(roundDisplayOrderLabel)); + const currentRoundDisplayOrder = parseInt(DOM.getElementValueCurrent(roundDisplayOrderLabel)); let activeRound = rounds.filter(round => round[flagDisplayOrder] == currentRoundDisplayOrder)[0]; if (activeRound == null) { activeRound = PageMtgGame.makeDefaultGameRound(currentRoundDisplayOrder); @@ -1887,6 +1887,7 @@ class PageMtgGame extends TableBasePage { if (damage[flagActive] && (damage[flagCommanderDeaths] > 0 || damage[flagLifeGain] != 0 || damage[flagLifeLoss] != 0 || damage[flagIsEliminated]) // && rounds.filter(r => r[attrRoundId] == damage[attrRoundId])[0][flagDisplayOrder] <= currentRoundDisplayOrder && previousRoundIds.includes(damage[attrRoundId])) { + debugger; let round = rounds.filter(r => r[attrRoundId] == damage[attrRoundId])[0]; let player = players.filter(p => p[attrPlayerId] == damage[attrPlayerId])[0]; let receivedFromPlayer = damage[attrReceivedFromCommanderPlayerId] == null ? { @@ -1942,7 +1943,7 @@ class PageMtgGame extends TableBasePage { } static getActiveRoundDisplayOrder() { const roundDisplayOrderLabel = PageMtgGame.getRoundDisplayOrderLabel(); - return Number(DOM.getElementValueCurrent(roundDisplayOrderLabel)); + return parseInt(DOM.getElementValueCurrent(roundDisplayOrderLabel)); } static getActiveRoundId() { const currentRoundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder(); @@ -1997,7 +1998,7 @@ class PageMtgGame extends TableBasePage { const amount = button.classList.contains(flagRoundDisplayOrderPlus) ? 1 : -1; const roundDisplayOrderButtonContainer = button.parentElement; const roundDisplayOrderLabel = roundDisplayOrderButtonContainer.querySelector('span.' + flagRound + '.' + flagDisplayOrder); - const currentRoundDisplayOrder = Number(DOM.getElementValueCurrent(roundDisplayOrderLabel)); + const currentRoundDisplayOrder = parseInt(DOM.getElementValueCurrent(roundDisplayOrderLabel)); const newDisplayOrder = currentRoundDisplayOrder + amount; DOM.setElementValueCurrent(roundDisplayOrderLabel, newDisplayOrder); DOM.isElementDirty(roundDisplayOrderLabel); @@ -2019,7 +2020,8 @@ class PageMtgGame extends TableBasePage { // Life gain buttons let lifeGainButtonSelector = '.life-gain-btn'; Events.hookupEventHandler("click", lifeGainButtonSelector, (event, button) => { - const playerId = button.dataset.playerId; + debugger; + const playerId = parseInt(button.dataset.playerId); const amount = parseInt(button.dataset.amount); const activeRoundId = PageMtgGame.getActiveRoundId(); const damageIndex = damageRecords.findIndex(damage => damage[attrRoundId] == activeRoundId && damage[attrPlayerId] == playerId && damage[attrReceivedFromCommanderPlayerId] == null); @@ -2034,7 +2036,7 @@ class PageMtgGame extends TableBasePage { // Life loss buttons let lifeLossButtonSelector = '.life-loss-btn'; Events.hookupEventHandler("click", lifeLossButtonSelector, (event, button) => { - const playerId = button.dataset.playerId; + const playerId = parseInt(button.dataset.playerId); const amount = parseInt(button.dataset.amount); const activeRoundId = PageMtgGame.getActiveRoundId(); const damageIndex = damageRecords.findIndex(damage => damage[attrRoundId] == activeRoundId && damage[attrPlayerId] == playerId && damage[attrReceivedFromCommanderPlayerId] == null); @@ -2049,7 +2051,7 @@ class PageMtgGame extends TableBasePage { // Commander death buttons let commanderDeathButtonSelector = '.death-btn'; Events.hookupEventHandler("click", commanderDeathButtonSelector, (event, button) => { - const playerId = button.dataset.playerId; + const playerId = parseInt(button.dataset.playerId); const isMinusButton = button.classList.contains('death-minus'); const amount = isMinusButton ? -1 : 1; this.changeCommanderDeaths(playerId, amount); @@ -2058,8 +2060,8 @@ class PageMtgGame extends TableBasePage { // Commander damage buttons let commmanderDamageButtonSelector = '.damage-btn'; Events.hookupEventHandler("click", commmanderDamageButtonSelector, (event, button) => { - const playerId = button.dataset.playerId; - const sourceId = button.dataset.sourceId; + const playerId = parseInt(button.dataset.playerId); + const sourceId = parseInt(button.dataset.sourceId); const isMinusButton = button.classList.contains('damage-minus'); const amount = isMinusButton ? -1 : 1; this.changeCommanderDamage(playerId, sourceId, amount); @@ -2068,7 +2070,7 @@ class PageMtgGame extends TableBasePage { // Eliminate buttons let eliminatePlayerButtonSelector = '.eliminate-btn'; Events.hookupEventHandler("click", eliminatePlayerButtonSelector, (event, button) => { - const playerId = button.dataset.playerId; + const playerId = parseInt(button.dataset.playerId); this.toggleEliminate(playerId); }); } diff --git a/static/dist/js/main.bundle.js.map b/static/dist/js/main.bundle.js.map index cabd274..de0d4f2 100644 --- a/static/dist/js/main.bundle.js.map +++ b/static/dist/js/main.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"js/main.bundle.js","mappings":"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","sources":["webpack://app/./static/js/lib/validation.js","webpack://app/./static/js/dom.js","webpack://app/./static/js/api.js","webpack://app/./static/js/lib/business_objects/business_objects.js","webpack://app/./static/js/lib/events.js","webpack://app/./static/js/lib/local_storage.js","webpack://app/./static/js/lib/utils.js","webpack://app/./static/js/components/common/temporary/overlay_confirm.js","webpack://app/./static/js/pages/base.js","webpack://app/./static/js/components/common/temporary/overlay_error.js","webpack://app/./static/js/pages/base_table.js","webpack://app/./static/js/pages/tcg/mtg_decks.js","webpack://app/./static/js/pages/tcg/mtg_game.js","webpack://app/./static/js/pages/tcg/mtg_games.js","webpack://app/./static/js/pages/tcg/mtg_home.js","webpack://app/./static/js/pages/legal/accessibility_report.js","webpack://app/./static/js/pages/legal/accessibility_statement.js","webpack://app/./static/js/pages/legal/license.js","webpack://app/./static/js/pages/legal/privacy_policy.js","webpack://app/./static/js/pages/legal/retention_schedule.js","webpack://app/./static/js/pages/mixin.js","webpack://app/./static/js/pages/mixin_table.js","webpack://app/./static/js/pages/user/user.js","webpack://app/./static/js/pages/user/users.js","webpack://app/./static/js/router.js","webpack://app/./static/js/app.js","webpack://app/./static/css/main.css?0a91","webpack://app/./static/css/components/button.css?0e0b","webpack://app/./static/css/components/card.css","webpack://app/./static/css/components/dialog.css","webpack://app/./static/css/components/form.css?94e1","webpack://app/./static/css/components/image.css?9f9c","webpack://app/./static/css/components/label.css?b78f","webpack://app/./static/css/components/modal.css","webpack://app/./static/css/components/navigation.css","webpack://app/./static/css/components/overlay.css?6dfd","webpack://app/./static/css/components/table.css?e553","webpack://app/./static/css/layouts/header.css?da75","webpack://app/./static/css/layouts/footer.css?65e3","webpack://app/./static/css/layouts/table-main.css?8c15","webpack://app/./static/css/lib/reset.css","webpack://app/./static/css/lib/typography.css","webpack://app/./static/css/lib/utils.css","webpack://app/./static/css/lib/variables.css","webpack://app/./static/css/themes/dark.css?0cc3"],"sourcesContent":["\nexport default class Validation {\n /*\n isNullOrWhitespace(v) {\n let txt = JSON.stringify(v).replace('/\\s\\g', '');\n return (txt == '' || 'null');\n }\n */\n\n static isEmpty(object) {\n\n let isEmpty = true;\n\n if (object !== null && object !== \"null\" && object !== undefined && object !== \"undefined\") {\n\n if (object.length == undefined) {\n isEmpty = false; // object exists but isn't a collection\n }\n else if (typeof object === \"function\") {\n isEmpty = false; // object is reference\n }\n else { // string or collection\n\n let isString = (typeof object == \"string\");\n\n if (isString) object = object.trim();\n\n if (object.length > 0) {\n\n if (isString) {\n isEmpty = false; // String greater than length 0\n }\n else {\n\n if (typeof object[0] != \"string\") {\n isEmpty = false;\n }\n else {\n for(let i = 0; i < object.length; i++) {\n if (object[i] != \"\") {\n isEmpty = false;\n break\n }\n }\n }\n }\n }\n }\n }\n\n return isEmpty;\n }\n\n static isValidNumber(value, positiveOnly) {\n return !Validation.isEmpty(value) && !isNaN(value) && (!positiveOnly || parseFloat(value) > 0);\n }\n\n static getDataContentType(params) {\n\n var data = null;\n var contentType = '';\n\n if (!Validation.isEmpty(params)) {\n\n if (typeof params === \"string\") {\n data = params;\n contentType = \"application/x-www-form-urlencoded; charset=UTF-8\";\n }\n else {\n data = JSON.stringify(params);\n contentType = \"application/json; charset=UTF-8\";\n }\n }\n\n return { Data: data, ContentType: contentType };\n }\n\n static arrayContainsItem(array, itemValue) {\n\n var hasItem = false;\n\n if (!Validation.isEmpty(array) && !Validation.isEmpty(itemValue)) {\n\n var isJQueryElementArray = array[0] instanceof jQuery;\n\n if (isJQueryElementArray) {\n\n for (let i = 0; i < array.length; i++) {\n\n if (document.querySelectorAll(array[i]).is(itemValue)) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n var isDate = array[0] instanceof Date;\n\n if (isDate) {\n \n for (let i = 0; i < array.length; i++) {\n\n if (array[i].getTime() === itemValue.getTime()) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n for (let i = 0; i < array.length; i++) {\n\n if (array[i] == itemValue) {\n hasItem = true;\n break;\n }\n }\n }\n }\n }\n\n return hasItem;\n }\n\n static dictHasKey(d, k) {\n return (k in d);\n }\n static areEqualDicts(dict1, dict2) {\n const keys1 = Object.keys(dict1);\n const keys2 = Object.keys(dict2);\n \n if (keys1.length !== keys2.length) {\n return false;\n }\n \n for (let key of keys1) {\n if (dict1[key] !== dict2[key]) {\n return false;\n }\n }\n \n return true;\n }\n\n static imageExists(url, callback) {\n\n var img = new Image();\n\n img.onload = function() { callback(true); };\n img.onerror = function() { callback(false); };\n img.src = url;\n }\n\n static toFixedOrDefault(value, decimalPlaces, defaultValue = null) {\n return Validation.isValidNumber(value) ? parseFloat(value).toFixed(decimalPlaces) : defaultValue;\n }\n}\n","\nimport Utils from \"./lib/utils.js\";\nimport Validation from \"./lib/validation.js\";\n\nexport default class DOM {\n static setElementAttributesValuesCurrentAndPrevious(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementAttributeValueCurrent(element, data) {\n element.setAttribute(attrValueCurrent, data);\n }\n static setElementAttributeValuePrevious(element, data) {\n element.setAttribute(attrValuePrevious, data);\n }\n static setElementValuesCurrentAndPrevious(element, data) {\n DOM.setElementValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementValueCurrent(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n element.checked = data;\n }\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n element.value = data;\n }\n else {\n element.textContent = data;\n }\n }\n static setElementValueCurrentIfEmpty(element, data) {\n if (Validation.isEmpty(DOM.getElementValueCurrent(element))) {\n DOM.setElementValueCurrent(element, data);\n }\n }\n static getCellFromElement(element) {\n return element.closest('td');\n }\n static getRowFromElement(element, flagRow) {\n let selector = Validation.isEmpty(flagRow) ? 'tr' : 'tr.' + flagRow;\n return element.closest(selector);\n }\n static getClosestParent(element, parentSelector) {\n let parent = element.parentElement;\n while (parent) {\n if (parent.matches(parentSelector)) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n static convertForm2JSON(elementForm) {\n let dataForm = {};\n if (Validation.isEmpty(elementForm)) {\n return dataForm;\n }\n let containersFilter = elementForm.querySelectorAll('.' + flagContainerInput + '.' + flagFilter);\n let containerFilter, labelFilter, keyFilter, filter;\n for (let indexFilter = 0; indexFilter < containersFilter.length; indexFilter++) {\n containerFilter = containersFilter[indexFilter];\n labelFilter = containerFilter.querySelector('label');\n keyFilter = labelFilter.getAttribute('for');\n filter = containerFilter.querySelector(`#${keyFilter}`);\n dataForm[keyFilter] = DOM.getElementValueCurrent(filter);\n }\n return dataForm;\n }\n static loadPageBody(contentNew) {\n let pageBody = document.querySelector(idPageBody);\n pageBody.innerHTML = contentNew;\n }\n static getHashPageCurrent() {\n const hashPageCurrent = document.body.dataset.page;\n return hashPageCurrent;\n }\n static updateAndCheckIsElementDirty(element) {\n element.setAttribute(attrValueCurrent, DOM.getElementValueCurrent(element));\n return DOM.isElementDirty(element);\n }\n static isElementDirty(element) {\n let isDirty = element.getAttribute(attrValuePrevious) != element.getAttribute(attrValueCurrent);\n DOM.handleDirtyElement(element, isDirty);\n return isDirty;\n }\n static handleDirtyElement(element, isDirty) {\n DOM.toggleElementHasClassnameFlag(element, isDirty, flagDirty);\n }\n static toggleElementHasClassnameFlag(element, elementHasFlag, flag) {\n let elementAlreadyHasFlag = element.classList.contains(flag);\n if (elementHasFlag == elementAlreadyHasFlag) return;\n if (elementHasFlag) {\n element.classList.add(flag);\n } else {\n element.classList.remove(flag);\n }\n }\n static hasDirtyChildrenContainer(container) {\n if (container == null) return false;\n return container.querySelector('.' + flagDirty) != null;\n }\n static hasDirtyChildrenNotDeletedContainer(container) {\n if (container == null || container.classList.contains(flagDelete)) return false;\n return container.querySelector('.' + flagDirty + ':not(.' + flagDelete + ', .' + flagDelete + ' *)') != null;\n }\n static getElementValueCurrent(element) {\n let returnVal = '';\n \n if (!Validation.isEmpty(element)) {\n \n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n returnVal = element.checked;\n }\n /*\n else if (element.classList.contains(flagIsDatePicker)) {\n returnVal = getDatePickerDate(element, adjust4DayLightSavings);\n }\n */\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n returnVal = element.value;\n }\n else if (element.classList.contains(flagButton) && element.classList.contains(flagActive)) { // tagName === 'BUTTON'\n returnVal = element.classList.contains(flagDelete);\n }\n else if (tagName === 'TD') {\n returnVal = DOM.getElementAttributeValueCurrent(element);\n }\n else if (tagName == 'SVG' && element.classList.contains(flagCheckbox)) {\n returnVal = (element.classList.contains(flagIsChecked))\n }\n else {\n returnVal = element.textContent;\n }\n }\n \n if (Validation.isEmpty(returnVal)) returnVal = '';\n \n return returnVal;\n }\n static getElementAttributeValueCurrent(element) {\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValueCurrent);\n }\n static getElementAttributeValuePrevious(element) {\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValuePrevious);\n }\n /* base_table.handleChangeElementCellTable\n static updateAndCheckIsTableElementDirty(element) {\n let wasDirty = DOM.isElementDirty(element);\n let row = DOM.getRowFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n let isDirty = DOM.updateAndCheckIsElementDirty(element);\n let cell = DOM.getCellFromElement(element);\n Utils.consoleLogIfNotProductionEnvironment({element, row, cell, isDirty, wasDirty});\n if (isDirty != wasDirty) {\n DOM.handleDirtyElement(cell, isDirty);\n let isDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isDirtyRow);\n }\n }\n }\n */\n static scrollToElement(parent, element) {\n // REQUIRED: parent has scroll-bar\n parent.scrollTop(parent.scrollTop() + (element.offset().top - parent.offset().top));\n }\n static isElementInContainer(container, element) {\n\n if (typeof jQuery === 'function') {\n if (container instanceof jQuery) container = container[0];\n if (element instanceof jQuery) element = element[0];\n }\n\n var containerBounds = container.getBoundingClientRect();\n var elementBounds = element.getBoundingClientRect();\n\n return (\n containerBounds.top <= elementBounds.top &&\n containerBounds.left <= elementBounds.left &&\n ((elementBounds.top + elementBounds.height) <= (containerBounds.top + containerBounds.height)) &&\n ((elementBounds.left + elementBounds.width) <= (containerBounds.left + containerBounds.width))\n );\n }\n static alertError(errorType, errorText) {\n alert(errorType + '\\n' + errorText);\n }\n static createOptionUnselectedProductVariation() {\n return {\n [flagProductVariationType]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariationType],\n [flagName]: 'Select Variation Type',\n [attrIdProductVariationType]: 0,\n },\n [flagProductVariation]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariation],\n [flagName]: 'Select Variation',\n [attrIdProductVariation]: 0,\n },\n };\n }\n static createOption(optionJson) {\n if (Validation.isEmpty(optionJson)) optionJson = {\n text: 'Select',\n value: 0,\n };\n let option = document.createElement('option');\n option.value = optionJson.value;\n option.textContent = optionJson.text;\n option.selected = optionJson.selected;\n return option;\n }\n\n static escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n static unescapeHtml(html) {\n const div = document.createElement('div');\n div.innerHTML = html;\n return div.textContent || div.innerText || '';\n }\n}\n","import DOM from './dom.js';\n\nexport default class API {\n \n static getCsrfToken() {\n return document.querySelector(idCSRFToken).getAttribute('content');\n }\n \n static async request(hashEndpoint, method = 'GET', data = null, params = null) {\n const url = API.getUrlFromHash(hashEndpoint, params);\n const csrfToken = API.getCsrfToken();\n const options = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n [flagCsrfToken]: csrfToken,\n }\n };\n\n if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n data = { \n ...data, \n [flagCsrfToken]: csrfToken,\n };\n options.body = JSON.stringify(data);\n }\n\n try {\n const response = await fetch(url, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return await response.json();\n } catch (error) {\n console.error('API request failed:', error);\n throw error;\n }\n }\n \n static getUrlFromHash(hash, params = null) {\n if (hash == null) hash = hashPageHome;\n let url = API.parameteriseUrl(_pathHost + hash, params);\n return url;\n }\n static parameteriseUrl(url, params) {\n if (params) {\n url += '?' + new URLSearchParams(params).toString();\n }\n return url;\n }\n static goToUrl(url) {\n window.location.href = url;\n }\n static goToHash(hash, params = null) {\n const url = API.getUrlFromHash(hash, params);\n API.goToUrl(url);\n }\n\n // specific api calls\n /* Example:\n getUsers: () => request('/users'),\n getUserById: (id) => request(`/users/${id}`),\n createUser: (userData) => request('/users', 'POST', userData),\n updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),\n deleteUser: (id) => request(`/users/${id}`, 'DELETE'),\n */\n\n // User\n // user\n static async loginUser() {\n let callback = {};\n callback[flagCallback] = DOM.getHashPageCurrent();\n return await API.request(hashPageUserLogin, 'POST', callback);\n }\n static async saveUsers(users, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagUser] = users;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveUserUser, 'POST', dataRequest);\n }\n\n // MTG Game API methods\n static async saveGame(game, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagGame] = game;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGame, 'POST', dataRequest);\n }\n\n static async getGamePlayers(gameId) {\n const url = `/mtg/api/game/${gameId}/players`;\n return await API.request(url, 'GET');\n }\n static async saveGamePlayers(players, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagPlayer] = players;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGamePlayer, 'POST', dataRequest);\n }\n\n static async getGameRounds(gameId) {\n const url = `/mtg/api/game/${gameId}/rounds`;\n return await API.request(url, 'GET');\n }\n\n static async getGameDamageRecords(gameId) {\n const url = `/mtg/api/game/${gameId}/damage-records`;\n return await API.request(url, 'GET');\n }\n static async saveGameRoundPlayerDamages(rounds, damages, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagDamage] = damages;\n dataRequest[flagRound] = rounds;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGameRoundPlayerDamage, 'POST', dataRequest);\n }\n\n\n}\n","\nimport Utils from '../utils.js';\n\nexport default class BusinessObjects {\n static getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected = null) {\n return {\n text: objectJson[keyText],\n value: objectJson[keyValue],\n selected: (objectJson[keyValue] == valueSelected),\n };\n }\n static getOptionJsonFromObjectJson(objectJson, valueSelected = null) {\n let keyText = objectJson[flagNameAttrOptionText];\n let keyValue = objectJson[flagNameAttrOptionValue];\n // Utils.consoleLogIfNotProductionEnvironment({objectJson, keyText, keyValue});\n return BusinessObjects.getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected);\n }\n static getObjectText(objectJson) {\n return objectJson == null ? '' : objectJson[objectJson[flagNameAttrOptionText]];\n }\n static getListObjectsFromIdDictAndCsv(idDict, idCsv) {\n let listObjects = [];\n let ids = idCsv.split(',');\n for (let id of ids) {\n listObjects.push(idDict[id]);\n }\n return listObjects;\n }\n}","\nexport default class Events {\n static initialiseEventHandler(selectorElement, classInitialised, eventHandler) {\n document.querySelectorAll(selectorElement).forEach(function(element) {\n if (element.classList.contains(classInitialised)) return;\n eventHandler(element);\n element.classList.add(classInitialised);\n });\n }\n static hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n}","\nimport Validation from \"./validation.js\";\n\nexport default class LocalStorage {\n/*\nfunction getPageLocalStorage(pageHash) {\n\n let ls;\n try {\n ls = JSON.parse(localStorage.getItem(pageHash));\n } catch {\n\n }\n\n if (Validation.isEmpty(ls)) return {}\n\n return ls;\n}\nfunction getPageLocalStorageCurrent() {\n\n return JSON.parse(localStorage.getItem(hashPageCurrent));\n}\n\nfunction setPageLocalStorage(pageHash, newLS) {\n\n localStorage.setItem(pageHash, JSON.stringify(newLS));\n}\n\nfunction clearPageLocalStorage(pageHash) {\n localStorage.removeItem(pageHash);\n}\n\nfunction setupPageLocalStorage(pageHash) {\n\n let ls = getPageLocalStorage(pageHash);\n\n if (Validation.isEmpty(ls)) ls = {};\n\n setPageLocalStorage(pageHash, ls);\n}\n*/\n\n static getLocalStorage(key) {\n return JSON.parse(localStorage.getItem(key));\n }\n\n static setLocalStorage(key, newLS) {\n localStorage.setItem(key, JSON.stringify(newLS));\n }\n\n/*\nfunction setupPageLocalStorageNext(pageHashNext) {\n let lsOld = getPageLocalStorage(hashPageCurrent);\n hashPageCurrent = pageHashNext;\n clearPageLocalStorage(hashPageCurrent);\n setupPageLocalStorage(hashPageCurrent);\n let lsNew = getPageLocalStorage(hashPageCurrent);\n lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};\n setPageLocalStorage(hashPageCurrent, lsNew);\n}\n*/\n}","// Utility functions\n/*\nfunction $(selector) {\n return document.querySelector(selector);\n}\n\nfunction $$(selector) {\n return document.querySelectorAll(selector);\n}\n*/\nexport default class Utils {\n static getListFromDict(dict) {\n let list = [];\n for (let key in dict) {\n list.push(dict[key]);\n }\n return list;\n }\n static consoleLogIfNotProductionEnvironment(message) {\n if (environment.is_production != \"true\") {\n console.log(message);\n }\n }\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayConfirm {\n static hookup(callbackSuccess) {\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.style.visibility = 'hidden';\n });\n });\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagSubmit, flagInitialised, (buttonConfirm) => {\n buttonConfirm.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n let textarea = overlay.querySelector('textarea');\n overlay.style.visibility = 'hidden';\n callbackSuccess(textarea.value);\n });\n });\n }\n static show() {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.classList.remove(flagIsCollapsed);\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\nimport Validation from \"../lib/validation.js\";\n\nexport default class BasePage {\n constructor(router) {\n if (!router) {\n throw new Error(\"Router is required\");\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"initialising with router: \", router);\n }\n this.router = router;\n this.title = titlePageCurrent;\n if (this.constructor === BasePage) {\n throw new Error(\"Cannot instantiate abstract class\");\n }\n \n if (!this.constructor.hash) {\n throw new Error(`Class ${this.constructor.name} must have a static hash attribute.`);\n }\n }\n\n initialize() {\n throw new Error(\"Method 'initialize()' must be implemented.\");\n }\n\n sharedInitialize() {\n this.logInitialisation();\n this.hookupCommonElements();\n }\n\n logInitialisation() {\n Utils.consoleLogIfNotProductionEnvironment('Initialising ' + this.title + ' page');\n }\n \n hookupCommonElements() {\n // hookupVideos();\n this.hookupLogos();\n this.hookupNavigation();\n this.hookupOverlays();\n }\n hookupLogos() {\n Events.hookupEventHandler(\"click\", \".\" + flagImageLogo + \",\" + \".\" + flagLogo, (event, element) => {\n Utils.consoleLogIfNotProductionEnvironment('clicking logo');\n this.router.navigateToHash(hashPageHome);\n });\n }\n /*\n hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n */\n hookupNavigation() {\n Events.hookupEventHandler(\"click\", idButtonHamburger, (event, element) => {\n let overlayHamburger = document.querySelector(idOverlayHamburger);\n if (overlayHamburger.classList.contains(flagIsCollapsed)) {\n overlayHamburger.classList.remove(flagIsCollapsed);\n overlayHamburger.classList.add(flagExpanded);\n } else {\n overlayHamburger.classList.remove(flagExpanded);\n overlayHamburger.classList.add(flagIsCollapsed);\n }\n });\n\n this.hookupButtonsNavUserAccount();\n this.hookupButtonsNavUserLogout();\n this.hookupButtonsNavUserLogin();\n }\n hookupButtonsNav(buttonSelector) {\n Events.hookupEventHandler(\"click\", buttonSelector, (event, button) => {\n let pageHash = buttonSelector.getAttribute('href');\n this.router.navigateToHash(pageHash); \n });\n }\n hookupButtonsNavUserAccount() {\n // this.hookupButtonsNav('.' + flagNavUserAccount);\n }\n hookupButtonsNavUserLogout() {\n // this.hookupButtonsNav('.' + flagNavUserLogout);\n }\n hookupButtonsNavUserLogin() {\n Events.hookupEventHandler(\"click\", '.' + flagNavUserLogin, (event, navigator) => {\n event.preventDefault();\n event.stopPropagation();\n this.leave();\n API.loginUser()\n .then((response) => {\n if (response.Success) {\n window.location.href = response[flagCallback];\n } else {\n DOM.alertError(\"Error\", response.Message);\n }\n });\n });\n }\n\n hookupOverlays() {\n this.hookupOverlayFromId(idOverlayConfirm);\n this.hookupOverlayFromId(idOverlayError);\n }\n\n hookupOverlayFromId(idOverlay) {\n Events.initialiseEventHandler(idOverlay, flagInitialised, (overlay) => {\n overlay.querySelector('button.' + flagCancel).addEventListener(\"click\", (event) => {\n event.stopPropagation();\n overlay.style.display = 'none';\n });\n });\n }\n\n hookupButtonSave() {\n Events.initialiseEventHandler('.' + flagContainer + '.' + flagSave + '.' + flagCancel + ' button.' + flagSave, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n Utils.consoleLogIfNotProductionEnvironment('saving page: ', this.title);\n OverlayConfirm.show();\n });\n });\n }\n\n leave() {\n Utils.consoleLogIfNotProductionEnvironment('Leaving ' + this.title + ' page');\n if (this.constructor === BasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n }\n setLocalStoragePage(dataPage) {\n LocalStorage.setLocalStorage(this.hash, dataPage);\n }\n getLocalStoragePage() {\n return LocalStorage.getLocalStorage(this.hash);\n }\n\n toggleShowButtonsSaveCancel(show, buttonContainerSelector = null) { // , buttonSave = null, buttonCancel = null\n if (Validation.isEmpty(buttonContainerSelector)) buttonContainerSelector = '.' + flagContainer + '.' + flagSave + '.' + flagCancel;\n let buttonSave = document.querySelector(buttonContainerSelector + ' ' + idButtonSave);\n if (buttonSave == null) return;\n let buttonCancel = document.querySelector(buttonContainerSelector + ' ' + idButtonCancel);\n Utils.consoleLogIfNotProductionEnvironment({ show, buttonContainerSelector, buttonCancel, buttonSave });\n if (show) {\n buttonCancel.classList.remove(flagIsCollapsed);\n buttonSave.classList.remove(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('showing buttons');\n } else {\n buttonCancel.classList.add(flagIsCollapsed);\n buttonSave.classList.add(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('hiding buttons');\n }\n }\n\n static isDirtyFilter(filter) {\n let isDirty = DOM.updateAndCheckIsElementDirty(filter);\n if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();\n return isDirty;\n }\n\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayError {\n static hookup() {\n Events.initialiseEventHandler(idOverlayError + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayError);\n overlay.style.visibility = 'hidden';\n });\n });\n }\n static show(msgError) {\n let overlay = document.querySelector(idOverlayError);\n let labelError = overlay.querySelector(idLabelError);\n labelError.innerText = msgError;\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport Validation from \"../lib/validation.js\";\nimport BasePage from \"./base.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\n\nexport default class TableBasePage extends BasePage {\n // static hash\n // static attrIdRowObject\n // callSaveTableContent\n\n constructor(router) {\n super(router);\n this.cursorYInitial = null;\n this.rowInitial = null;\n this.placeholder = null;\n this.dragSrcEl = null;\n this.dragSrcRow = null;\n\n this.hookupTableCellDdls = this.hookupTableCellDdls.bind(this);\n }\n \n initialize(isPopState = false) {\n throw new Error(\"Must implement initialize() method.\");\n }\n sharedInitialize(isPopState = false, isSinglePageApp = false) {\n if (!isPopState) {\n super.sharedInitialize();\n this.hookupFilters();\n this.hookupButtonsSaveCancel();\n this.hookupTableMain();\n OverlayConfirm.hookup(() => {\n if (isSinglePageApp) {\n this.saveRecordsTableDirtySinglePageApp();\n }\n else {\n this.saveRecordsTableDirty();\n }\n });\n } else {\n let dataPage = this.getLocalStoragePage();\n let filters = dataPage[flagFormFilters];\n let formFilters = TableBasePage.getFormFilters();\n let filtersDefault = DOM.convertForm2JSON(formFilters);\n if (!Validation.areEqualDicts(filters, filtersDefault)) {\n this.callFilterTableContent();\n }\n }\n }\n hookupFilters() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method hookupFilters().\");\n }\n }\n sharedHookupFilters() {\n this.hookupButtonApplyFilters();\n this.hookupSearchTextFilter();\n }\n hookupFilterActive() {\n let filterSelector = idFormFilters + ' #' + flagActiveOnly;\n let filterActiveOld = document.querySelector(filterSelector);\n filterActiveOld.removeAttribute('id');\n let parentDiv = filterActiveOld.parentElement;\n let isChecked = (DOM.getElementAttributeValuePrevious(parentDiv) == \"True\");\n let filterActiveNew = document.querySelector(idFormFilters + ' div.' + flagActiveOnly + '.' + flagContainerInput + ' svg.' + flagActiveOnly);\n filterActiveNew.setAttribute('id', flagActiveOnly);\n if (isChecked) filterActiveNew.classList.add(flagIsChecked);\n\n Events.hookupEventHandler(\"click\", filterSelector, (event, filterActive) => {\n Utils.consoleLogIfNotProductionEnvironment({ filterActive });\n Utils.consoleLogIfNotProductionEnvironment({ [filterActive.tagName]: filterActive.tagName });\n let svgElement = (filterActive.tagName.toUpperCase() == 'SVG') ? filterActive : filterActive.parentElement;\n let wasChecked = svgElement.classList.contains(flagIsChecked);\n if (wasChecked) {\n svgElement.classList.remove(flagIsChecked);\n }\n else {\n svgElement.classList.add(flagIsChecked);\n }\n return this.handleChangeFilter(event, filterActive);\n });\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n hookupFilter(filterFlag, handler = (event, filter) => { return this.handleChangeFilter(event, filter); }) {\n let filterSelector = idFormFilters + ' #' + filterFlag;\n Events.hookupEventHandler(\"change\", filterSelector, handler);\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n handleChangeFilter(event, filter) {\n let isDirtyFilter = DOM.updateAndCheckIsElementDirty(filter);\n let formFilters = TableBasePage.getFormFilters();\n let areDirtyFilters = isDirtyFilter || DOM.hasDirtyChildrenContainer(formFilters);\n let tbody = document.querySelector(idTableMain + ' tbody');\n let rows = tbody.querySelectorAll(':scope > tr');\n rows.forEach((row) => {\n if (areDirtyFilters && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);\n if (!areDirtyFilters && row.classList.contains(flagIsCollapsed)) {\n row.classList.remove(flagIsCollapsed);\n let dirtyInputs = row.querySelectorAll('input.' + flagDirty);\n dirtyInputs.forEach((dirtyInput) => {\n dirtyInput.value = DOM.getElementAttributeValueCurrent(dirtyInput);\n });\n }\n });\n if (areDirtyFilters) {\n /*\n tbody.querySelectorAll('tr').forEach((tr) => { \n if (!DOM.hasDirtyChildrenContainer(tr)) tr.remove(); \n });\n */\n tbody.innerHTML = '
Press \"Apply Filters\" to refresh the table.
' + tbody.innerHTML;\n if (!tbody.classList.contains(flagIsCollapsed)) tbody.classList.add(flagIsCollapsed);\n }\n else {\n let isDirtyLabel = tbody.querySelector(\":scope > div\");\n if (isDirtyLabel != null) isDirtyLabel.remove();\n if (tbody.classList.contains(flagIsCollapsed)) tbody.classList.remove(flagIsCollapsed);\n let initialisedElements = tbody.querySelectorAll('.' + flagInitialised);\n initialisedElements.forEach((initialisedElement) => {\n initialisedElement.classList.remove(flagInitialised);\n });\n this.hookupTableMain();\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupFilterIsNotEmpty() {\n this.hookupFilter(flagIsNotEmpty);\n }\n hookupButtonApplyFilters() {\n Events.hookupEventHandler(\"click\", idButtonApplyFilters, (event, button) => {\n event.stopPropagation();\n this.callFilterTableContent();\n });\n }\n hookupSearchTextFilter() {\n this.hookupFilter(flagSearch);\n }\n hookupFilterCommandCategory() {\n this.hookupFilter(attrIdCommandCategory, (event, filterCommandCategory) => {\n this.handleChangeFilter();\n let isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);\n let idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);\n console.log(\"filter commands unsorted\");\n console.log(Utils.getListFromDict(filterCommands));\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => command[attrIdCommandCategory] == idCommandCategory);\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n let filterCommand = document.querySelector(idFormFilters + ' .' + flagCommand);\n let idCommandPrevious = DOM.getElementAttributeValuePrevious(filterCommand);\n filterCommand.innerHTML = '';\n let optionJson, option;\n option = DOM.createOption(null);\n filterCommand.appendChild(option);\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command, idCommandPrevious);\n option = DOM.createOption(optionJson);\n filterCommand.appendChild(option);\n });\n filterCommand.dispatchEvent(new Event('change'));\n return isDirtyFilter;\n });\n }\n hookupFilterCommand() {\n this.hookupFilter(attrIdCommand);\n }\n hookupFilterLocation() {\n this.hookupFilter(attrIdLocation);\n }\n /*\n getAndLoadFilteredTableContent = () => {\n this.callFilterTableContent()\n .catch(error => console.error('Error:', error));\n }\n */\n static getFormFilters() {\n return document.querySelector(idFormFilters);\n }\n callFilterTableContent() {\n let formFilters = TableBasePage.getFormFilters();\n let filtersJson = DOM.convertForm2JSON(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"callFilterTableContent\");\n Utils.consoleLogIfNotProductionEnvironment(\"formFilters\");\n Utils.consoleLogIfNotProductionEnvironment(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"filtersJson\");\n Utils.consoleLogIfNotProductionEnvironment(filtersJson);\n this.leave();\n API.goToHash(this.constructor.hash, filtersJson);\n }\n callbackLoadTableContent(response) {\n let table = TableBasePage.getTableMain();\n let bodyTable = table.querySelector('tbody');\n bodyTable.querySelectorAll('tr').forEach(function(row) { row.remove(); });\n let rowsJson = response.data[flagRows];\n if (!Validation.isEmpty(rowsJson) && rowsJson.every(row => row.hasOwnProperty('display_order'))) {\n rowsJson = rowsJson.sort((a, b) => a.display_order - b.display_order);\n }\n rowsJson.forEach(this.loadRowTable.bind(this));\n this.hookupTableMain();\n }\n static getTableMain() {\n return document.querySelector(idTableMain);\n }\n loadRowTable(rowJson) {\n throw new Error(\"Subclass of TableBasePage must implement method loadRowTable().\");\n }\n getAndLoadFilteredTableContentSinglePageApp() {\n this.callFilterTableContent()\n .then(data => {\n Utils.consoleLogIfNotProductionEnvironment('Table data received:', data);\n this.callbackLoadTableContent(data);\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonsSaveCancel() {\n this.hookupButtonSave();\n this.hookupButtonCancel();\n this.toggleShowButtonsSaveCancel(false);\n }\n saveRecordsTableDirty() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = TableBasePage.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callFilterTableContent();\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n getTableRecords(dirtyOnly = false) {\n let records = [];\n let record;\n document.querySelectorAll(idTableMain + ' > tbody > tr').forEach((row) => {\n if (dirtyOnly && !DOM.hasDirtyChildrenContainer(row)) return;\n record = this.getJsonRow(row);\n records.push(record);\n });\n return records;\n }\n getJsonRow(row) {\n throw new Error(\"Subclass of TableBasePage must implement method getJsonRow().\");\n }\n saveRecordsTableDirtySinglePageApp() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = TableBasePage.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callbackLoadTableContent(data);\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonCancel() {\n Events.initialiseEventHandler('.' + flagContainer + '.' + flagSave + '.' + flagCancel + ' button.' + flagCancel, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n this.callFilterTableContent();\n });\n button.classList.add(flagIsCollapsed);\n });\n }\n handleClickAddRowTable(event, button) {\n event.stopPropagation();\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - _rowBlank.getAttribute(this.constructor.attrIdRowObject));\n let tbody = document.querySelector(idTableMain + ' tbody');\n if (tbody.classList.contains(flagIsCollapsed)) return;\n let row = _rowBlank.cloneNode(true);\n row.classList.remove(flagInitialised);\n row.querySelectorAll('.' + flagInitialised).forEach(function(element) {\n element.classList.remove(flagInitialised);\n });\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n row.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n this.initialiseRowNew(tbody, row);\n tbody.prepend(row);\n tbody.scrollTop = 0;\n this.hookupTableMain();\n this.postInitialiseRowNewCallback(tbody);\n }\n initialiseRowNew(tbody, row) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method initialiseRowNew().\");\n }\n // row.classList.remove(flagRowNew);\n }\n hookupTableMain() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement hookupTableMain() method.\");\n }\n Events.initialiseEventHandler(idTableMain, flagInitialised, (table) => {\n this.cacheRowBlank();\n });\n }\n cacheRowBlank() {\n let selectorRowNew = idTableMain + ' tbody tr.' + flagRowNew;\n let rowBlankTemp = document.querySelector(selectorRowNew);\n if (rowBlankTemp == null) return;\n Utils.consoleLogIfNotProductionEnvironment(\"row blank temp: \", rowBlankTemp);\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n _rowBlank = rowBlankTemp.cloneNode(true);\n document.querySelectorAll(selectorRowNew).forEach(function(row) {\n row.remove();\n });\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n }\n postInitialiseRowNewCallback(tbody) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method postInitialiseRowNewCallback(tbody).\");\n }\n }\n initialiseSliderDisplayOrderRowNew(tbody, row) {\n // let tdSelector = ':scope > tr > td.' + flagDisplayOrder;\n // let tbody = document.querySelector('table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody');\n let slidersDisplayOrder = tbody.querySelectorAll(':scope > tr > td.' + flagDisplayOrder + ' input.' + flagSlider);\n let maxDisplayOrder = 0;\n slidersDisplayOrder.forEach((slider) => {\n maxDisplayOrder = Math.max(maxDisplayOrder, parseFloat(DOM.getElementValueCurrent(slider)));\n });\n let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);\n DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, maxDisplayOrder + 1);\n }\n hookupSlidersDisplayOrderTable() {\n let selectorDisplayOrder = idTableMain + ' tbody tr td.' + flagDisplayOrder + ' input.' + flagSlider + '.' + flagDisplayOrder;\n this.hookupChangeHandlerTableCells(selectorDisplayOrder);\n }\n hookupChangeHandlerTableCells(inputSelector, handler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.initialiseEventHandler(inputSelector, flagInitialised, (input) => {\n input.addEventListener(\"change\", (event) => {\n handler(event, input);\n });\n handler(null, input);\n });\n }\n handleChangeNestedElementCellTable(event, element) {\n let wasDirtyParentRows = this.getAllIsDirtyRowsInParentTree(element);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n // Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement, wasDirtyParentRows});\n // let td = DOM.getCellFromElement(element);\n // DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element));\n if (isDirtyElement != wasDirtyElement) {\n // DOM.handleDirtyElement(td, isDirtyElement);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows);\n }\n }\n getAllIsDirtyRowsInParentTree(element) {\n let rows = [];\n let parent = element;\n let isDirty;\n while (parent) {\n if (parent.tagName.toUpperCase() == 'TR') {\n isDirty = parent.classList.contains(flagDirty)\n rows.push(isDirty);\n }\n parent = parent.parentElement;\n }\n return rows;\n }\n cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows) {\n if (Validation.isEmpty(wasDirtyParentRows)) return;\n let tr = DOM.getRowFromElement(element);\n let isDirtyRow = isDirtyElement || DOM.hasDirtyChildrenContainer(tr);\n let wasDirtyRow = wasDirtyParentRows.shift();\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(tr, isDirtyRow);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(tr.parentElement, isDirtyRow, wasDirtyParentRows);\n }\n }\n hookupChangeHandlerTableCellsWhenNotCollapsed(inputSelector, handler = (event, element) => {\n if (!element.classList.contains(flagIsCollapsed)) this.handleChangeNestedElementCellTable(event, element);\n }) {\n Events.hookupEventHandler(\"change\", inputSelector, handler);\n }\n hookupFieldsCodeTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagCode + ' > .' + flagCode);\n }\n hookupFieldsNameTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagName + ' > .' + flagName);\n }\n hookupFieldsDescriptionTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagDescription + ' > .' + flagDescription);\n }\n hookupFieldsNotesTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagNotes + ' > .' + flagNotes);\n }\n hookupFieldsActive(flagTable = '', handleClickRowNew = (event, element) => { this.handleClickAddRowTable(event, element); }) {\n let selectorButton = 'table.table-main' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' .' + flagButton + '.' + flagActive;\n let selectorButtonDelete = selectorButton + '.' + flagDelete;\n let selectorButtonUndelete = selectorButton + ':not(.' + flagDelete + ')';\n Utils.consoleLogIfNotProductionEnvironment(\"hookupFieldsActive: \", selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);\n Events.hookupEventHandler(\n \"click\"\n , 'table.table-main' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' .' + flagButton + '.' + flagActive\n , (event, button) => { handleClickRowNew(event, button); }\n );\n }\n hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.hookupEventHandler(\"click\", selectorButtonDelete, (event, element) => {\n this.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = element.classList.contains(flagDirty);\n let row = DOM.getRowFromElement(element);\n if (row.classList.contains(flagRowNew) && !DOM.hasDirtyChildrenContainer(row)) {\n row.parentNode.removeChild(row);\n }\n else {\n let buttonAddTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagAdd);\n let buttonAdd = buttonAddTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonAdd, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonAdd, false);\n if (wasDirty) buttonAdd.classList.add(flagDirty);\n element.replaceWith(buttonAdd);\n changeHandler(null, buttonAdd);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.hookupEventHandler(\"click\", selectorButtonUndelete, (event, element) => {\n this.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = DOM.isElementDirty(element);\n let buttonDeleteTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagDelete);\n let buttonDelete = buttonDeleteTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonDelete, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonDelete, true);\n if (wasDirty) buttonDelete.classList.add(flagDirty);\n element.replaceWith(buttonDelete);\n changeHandler(null, buttonDelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupTdsAccessLevel() {\n this.hookupTableCellDdlPreviews(flagAccessLevel, Utils.getListFromDict(accessLevels));\n }\n hookupTableCellDdlPreviews(\n fieldFlag\n , optionList\n , cellSelector = null\n , ddlHookup = (ddlSelector) => { this.hookupTableCellDdls(ddlSelector); }\n , changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }\n ) {\n if (cellSelector == null) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n Events.hookupEventHandler(\"click\", cellSelector + ' div.' + fieldFlag, (event, div) => {\n this.handleClickTableCellDdlPreview(\n event\n , div\n , fieldFlag\n , optionList\n , cellSelector\n , (ddlSelector) => { ddlHookup(\n ddlSelector\n , (event, element) => { changeHandler(event, element); }\n ); }\n );\n });\n ddlHookup(cellSelector + ' select.' + fieldFlag);\n }\n hookupTableCellDdls(ddlSelector, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { changeHandler(event, element); });\n }\n handleClickTableCellDdlPreview(event, div, fieldFlag, optionObjectList, cellSelector = null, ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); }) {\n if (Validation.isEmpty(cellSelector)) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n let idSelected = DOM.getElementAttributeValueCurrent(div);\n let td = DOM.getCellFromElement(div);\n td.innerHTML = '';\n let ddl = document.createElement('select');\n ddl.classList.add(fieldFlag);\n DOM.setElementValuesCurrentAndPrevious(ddl, idSelected);\n let optionJson, option;\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment(\"click table cell ddl preview\");\n Utils.consoleLogIfNotProductionEnvironment({optionObjectList, cellSelector});\n }\n option = DOM.createOption(null);\n ddl.appendChild(option);\n optionObjectList.forEach((optionObjectJson) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(optionObjectJson, idSelected);\n option = DOM.createOption(optionJson);\n ddl.appendChild(option);\n });\n td.appendChild(ddl);\n let ddlSelector = cellSelector + ' select.' + fieldFlag;\n ddlHookup(ddlSelector);\n }\n /*\n hookupTableCellDDlPreviewsWhenNotCollapsed(cellSelector, optionList, ddlHookup = (event, element) => { this.hookupTableCellDdls(event, element); }) {\n Events.hookupEventHandler(\"click\", cellSelector + ' div', (event, div) => {\n this.handleClickTableCellDdlPreview(event, div, optionList, cellSelector, (event, element) => { ddlHookup(event, element); });\n });\n }\n */\n toggleColumnCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n toggleColumnHeaderCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n\n hookupFieldsCommandCategory(idTable = null) {\n if (idTable == null) idTable = idTableMain;\n this.hookupTableCellDdlPreviews(\n flagCommandCategory\n , Utils.getListFromDict(filterCommandCategories).sort((a, b) => a[flagName].localeCompare(b[flagName]))\n , idTable + ' > tbody > tr > td.' + flagCommandCategory // + ' .' + flagCommandCategory\n , (cellSelector) => { this.hookupCommandCategoryDdls(cellSelector); }\n );\n }\n hookupCommandCategoryDdls(ddlSelector) {\n this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeCommandCategoryDdl(event, element); });\n }\n handleChangeCommandCategoryDdl(event, ddlCategory) {\n let row = DOM.getRowFromElement(ddlCategory);\n let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n this.handleChangeNestedElementCellTable(event, ddlCategory);\n let idCommandCategoryRowNew = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n if (\n idCommandCategoryRowOld == idCommandCategoryRowNew\n || idCommandCategoryRowNew == 0\n ) return;\n console.log({ idCommandCategoryRowNew, idCommandCategoryRowOld });\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let tdCommand = row.querySelector('td.' + flagCommand);\n tdCommand.dispatchEvent(new Event('click'));\n let ddlCommand = row.querySelector('td.' + flagCommand + ' select.' + flagCommand);\n ddlCommand.innerHTML = '';\n ddlCommand.appendChild(DOM.createOption(null));\n let optionJson, option;\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRowNew\n || idCommandCategoryRowNew == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command);\n option = DOM.createOption(optionJson);\n ddlCommand.appendChild(option);\n });\n this.handleChangeNestedElementCellTable(event, ddlCommand);\n }\n hookupFieldsCommand(idTable = null) {\n if (idTable == null) idTable = idTableMain;\n Events.hookupEventHandler(\"click\", idTable + ' > tbody > tr > td.' + flagCommand + ' div.' + flagCommand, (event, div) => {\n Utils.consoleLogIfNotProductionEnvironment(div);\n let parentTr = DOM.getRowFromElement(div);\n Utils.consoleLogIfNotProductionEnvironment({ div, parentTr });\n let tdCommandCategory = parentTr.querySelector('td.' + flagCommandCategory);\n let idCommandCategoryRow = this.getIdCommandCategoryRow(parentTr); // DOM.getElementAttributeValueCurrent(tdCommandCategory);\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let filterCommandList = Utils.getListFromDict(filterCommands);\n let commandsInCategory = filterCommandList.filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRow\n || idCommandCategoryRow == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n Utils.consoleLogIfNotProductionEnvironment({ tdCommandCategory, idCommandCategoryRow, idCommandCategoryFilter, filterCommandList, commandsInCategory });\n Utils.consoleLogIfNotProductionEnvironment(filterCommandList);\n this.handleClickTableCellDdlPreview(\n event\n , div\n , flagCommand // fieldFlag\n , sortedCommands // optionList\n , idTable + ' > tbody > tr > td.' + flagCommand // cellSelector\n , (cellSelector) => { this.hookupTableCellDdls(\n cellSelector\n , (event, element) => { this.handleChangeCommandDdl(event, element); }\n ); }\n );\n });\n this.hookupTableCellDdls(\n idTable + ' > tbody > tr > td.' + flagCommand + ' select.' + flagCommand\n , (event, element) => { this.handleChangeCommandDdl(event, element); }\n );\n }\n handleChangeCommandDdl(event, ddlCommand) {\n // console.log(\"handle change command ddl\");\n let row = DOM.getRowFromElement(ddlCommand);\n this.handleChangeNestedElementCellTable(event, ddlCommand);\n let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row);\n let idCommandNew = this.getIdCommandRow(row);\n let commandNew = filterCommands[idCommandNew];\n // console.log({ idCommandCategoryRowOld, commandNew });\n if (commandNew == null || idCommandCategoryRowOld == commandNew[attrIdCommandCategory]) return;\n let divCommandCategory = row.querySelector('td.' + flagCommandCategory + ' div');\n if (divCommandCategory) divCommandCategory.dispatchEvent(new Event('click'));\n let ddlCommandCategory = row.querySelector('td.' + flagCommandCategory + ' select.' + flagCommandCategory);\n DOM.setElementValueCurrent(ddlCommandCategory, commandNew[attrIdCommandCategory]);\n // console.log({ ddlCommandCategory, commandNew });\n this.handleChangeNestedElementCellTable(event, ddlCommandCategory);\n }\n getIdCommandCategoryRow(tr) {\n let elementCommandCategory = tr.querySelector('td.' + flagCommandCategory + ' .' + flagCommandCategory);\n return DOM.getElementAttributeValueCurrent(elementCommandCategory);\n }\n getIdCommandCategoryFilter() {\n let formFilters = TableBasePage.getFormFilters();\n let idCommandCategory = 0;\n if (formFilters == null) return idCommandCategory;\n let commandCategoryFilter = formFilters.querySelector('#' + attrIdCommandCategory);\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let valueCurrentCommandCategoryFilter = DOM.getElementAttributeValueCurrent(commandCategoryFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandCategoryFilter });\n if (valueCurrentCommandCategoryFilter == \"\") {\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandFilter });\n if (valueCurrentCommandFilter != \"\") {\n let command = filterCommands[valueCurrentCommandFilter];\n idCommandCategory = command[attrIdCommandCategory];\n }\n } else {\n idCommandCategory = Number(valueCurrentCommandCategoryFilter);\n }\n return idCommandCategory;\n }\n getHasCommandCategoryFilter() {\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n return !(Validation.isEmpty(idCommandCategoryFilter) || idCommandCategoryFilter == 0);\n }\n getIdCommandRow(tr) {\n let elementCommand = tr.querySelector('td.' + flagCommand + ' .' + flagCommand);\n return DOM.getElementAttributeValueCurrent(elementCommand);\n }\n getIdCommandFilter() {\n let formFilters = TableBasePage.getFormFilters();\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n let idCommand = Number(valueCurrentCommandFilter);\n return idCommand;\n }\n getHasCommandFilter() {\n let idCommandFilter = this.getIdCommandFilter();\n return !(Validation.isEmpty(idCommandFilter) || idCommandFilter == 0);\n }\n /*\n createTdActive(isActive) {\n let tdActive = document.createElement(\"td\");\n tdActive.classList.add(flagActive);\n let buttonActive = document.createElement(\"button\");\n buttonActive.classList.add(flagActive);\n buttonActive.classList.add(isActive ? flagDelete : flagAdd);\n buttonActive.textContent = isActive ? 'x' : '+';\n DOM.setElementAttributesValuesCurrentAndPrevious(buttonActive, isActive);\n tdActive.appendChild(buttonActive);\n return tdActive;\n }\n */\n leave() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n super.leave();\n let formFilters = TableBasePage.getFormFilters();\n let dataPage = {};\n dataPage[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n this.setLocalStoragePage(dataPage);\n }\n\n toggleColumnHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n let columnThHasFlag = columnTh.classList.contains(classnameFlag);\n if (isRequiredFlag == columnThHasFlag) return;\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n toggleColumnHeaderHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n\n updateAndToggleShowButtonsSaveCancel() {\n // let pageBody = document.querySelector(idPageBody);\n let isDirty = DOM.hasDirtyChildrenContainer(pageBody);\n\n let buttonContainerSelector = '.' + flagContainer + '.' + flagSave + '.' + flagCancel;\n let buttonSave = document.querySelector(buttonContainerSelector + ' ' + idButtonSave);\n let areVisibleSaveCancelButtons = !buttonSave.classList.contains(flagIsCollapsed);\n \n console.log({ pageBody, isDirty, areVisibleSaveCancelButtons });\n\n this.toggleShowButtonsSaveCancel(isDirty || areVisibleSaveCancelButtons);\n }\n}\n","\nimport API from \"../../api.js\";\nimport Events from \"../../lib/events.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\n\nexport default class PageMtgDecks extends TableBasePage {\n static hash = hashPageMtgDecks;\n static attrIdRowObject = attrDeckId;\n callSaveTableContent = API.saveDeck;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n hookupFilters() {\n /*\n this.sharedHookupFilters();\n this.hookupFilterActive();\n */\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n return;\n }\n initialiseRowNew(tbody, row) {\n }\n postInitialiseRowNewCallback(tbody) {\n let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n let newestRow = newRows[0];\n let clickableElementsSelector = [\n 'td.' + attrCommanderBracketId + ' div.' + attrCommanderBracketId\n ].join('');\n newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {\n clickableElement.click();\n });\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupTableMainRows();\n this.hookupFieldsNameTable();\n this.hookupTableMainIsCommanderCheckboxes();\n this.hookupTableMainCommanderBracketPreviews();\n this.hookupFieldsActive();\n }\n hookupTableMainRows() {\n return;\n let rowSelector = 'table.' + flagTableMain + ' tbody tr';\n Events.hookupEventHandler(\"click\", rowSelector, (event, row) => {\n let isRowExpanded = row.classList.contains(flagActive);\n let showSection;\n if (isRowExpanded) {\n showSection = false;\n PageMtgDecks.toggleShowDeckStatisticsSection(showSection);\n }\n else {\n showSection = true;\n let deckId = row.getAttribute(attrDeckId);\n let statisticsSectionTableBody = document.querySelector('table.' + flagStatistics + ' tbody');\n statisticsSectionTableBody.innerHTML = '';\n let deck = decks.filter(d => d[attrDeckId] == deckId)[0];\n if (deck[flagStatistics].length > 0) {\n let newStatisticRowsHtml = '';\n deck[flagStatistics]\n .sort((a, b) => a[flagDisplayOrder] - b[flagDisplayOrder])\n .forEach((statistic) => {\n newStatisticRowsHtml += `\n \n ${statistic[flagName]}\n ${statistic[flagValue]}\n \n `;\n });\n statisticsSectionTableBody.innerHTML = newStatisticRowsHtml;\n }\n PageMtgDecks.toggleShowDeckStatisticsSection(showSection);\n }\n });\n }\n static toggleShowDeckStatisticsSection(showSection) {\n let statisticsSectionTableBody = document.querySelector('table.' + flagStatistics + ' tbody');\n if (showSection) {\n statisticsSectionTableBody.classList.remove(flagIsCollapsed);\n }\n else {\n statisticsSectionTableBody.classList.add(flagIsCollapsed);\n }\n }\n hookupTableMainIsCommanderCheckboxes() {\n this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIsCommander + ' .' + flagIsCommander);\n }\n hookupTableMainCommanderBracketPreviews() {\n this.hookupTableCellDdlPreviews(\n attrCommanderBracketId\n , Utils.getListFromDict(commanderBrackets)\n );\n }\n \n leave() {\n super.leave();\n }\n}\n","\n\nimport API from \"../../api.js\";\nimport TableBasePage from \"../base_table.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\n\nexport default class PageMtgGame extends TableBasePage {\n static hash = hashPageMtgGame;\n static attrIdRowObject = attrGameId;\n callSaveTableContent = API.saveGame;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTcgGame();\n }\n hookupFilters() {\n // this.sharedHookupFilters();\n }\n loadRowTable(rowJson) {\n return;\n }\n getJsonRow(row) {\n return;\n }\n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n \n }\n\n hookupTableMain() {\n super.hookupTableMain();\n }\n hookupTcgGame() {\n this.initGamePage();\n let pageHeading = document.querySelector('.container.company-name .tcg-title.company-name');\n pageHeading.innerText = `MTG Game #${gameId}`;\n }\n\n initGamePage() {\n // Load existing game state from API or show setup\n PageMtgGame.updatePlayerSetup();\n if (typeof gameId !== 'undefined' && gameId) {\n this.loadGameFromServer();\n }\n /*\n else {\n PageMtgGame.updatePlayerSetup();\n }\n */\n \n PageMtgGame.hookupResetButton();\n PageMtgGame.hookupPlayerCountInput();\n this.hookupStartGameButton();\n /*\n this.hookupCommanderDeathIncrementButtons();\n this.hookupEliminateCommanderButtons();\n this.hookupPlayerLifeIncrementButtons();\n this.hookupCommanderDamageIncrementButtons();\n */\n }\n static hookupResetButton() {\n const resetGameButton = document.querySelector('header.game-header .header-right .btn-tcg.btn-tcg-secondary');\n if (resetGameButton) {\n resetGameButton.addEventListener('click', PageMtgGame.resetGame);\n }\n }\n static hookupPlayerCountInput() {\n const playerCountInput = document.getElementById('playerCount');\n if (playerCountInput) {\n playerCountInput.addEventListener('change', PageMtgGame.updatePlayerSetup);\n }\n }\n hookupStartGameButton() {\n const startGameButton = document.querySelector('.setup-section .setup-actions .btn-tcg');\n if (startGameButton) {\n startGameButton.addEventListener('click', () => { this.startGame(); });\n }\n }\n /*\n hookupCommanderDeathIncrementButtons() {\n const commanderDeathIncremementButtons = document.querySelectorAll('#players-grid .player-card .commander-deaths .death-btn');\n if (commanderDeathIncremementButtons) {\n commanderDeathIncremementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeCommanderDeaths);\n });\n }\n }\n hookupEliminateCommanderButtons() {\n const eliminateCommanderButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (eliminateCommanderButtons) {\n eliminateCommanderButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.toggleEliminate);\n });\n }\n }\n hookupPlayerLifeIncrementButtons() {\n const playerLifeIncrementButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (playerLifeIncrementButtons) {\n playerLifeIncrementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeLife);\n });\n }\n }\n hookupCommanderDamageIncrementButtons() {\n const commanderDamageIncrementButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (commanderDamageIncrementButtons) {\n commanderDamageIncrementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeCommanderDamage);\n });\n }\n }\n */\n\n async loadGameFromServer() {\n console.log(\"loading game from server\");\n try {\n // Fetch players, rounds, and damage records from API\n const [playersResponse, roundsResponse, damageResponse] = await Promise.all([\n API.getGamePlayers(gameId)\n , API.getGameRounds(gameId)\n , API.getGameDamageRecords(gameId)\n ]);\n console.log({ playersResponse, damageResponse });\n\n let setupSection = document.getElementById('setupSection');\n let gameSection = document.getElementById('gameSection');\n setupSection.classList.remove('hidden');\n gameSection.classList.add('hidden');\n\n if (playersResponse.status !== 'success') {\n console.error('Failed to load players:', playersResponse.message);\n return;\n }\n\n const savedPlayers = playersResponse.data || [];\n const savedRounds = roundsResponse.status === 'success' ? (roundsResponse.data || []) : [];\n const savedDamageRecords = damageResponse.status === 'success' ? (damageResponse.data || []) : [];\n \n players = savedPlayers;\n rounds = savedRounds;\n damageRecords = savedDamageRecords;\n\n if (savedPlayers.length === 0) {\n // No players yet, show setup section\n return;\n }\n\n // Hide setup, show game\n setupSection.classList.add('hidden');\n gameSection.classList.remove('hidden');\n\n console.log({ savedPlayers, damageRecords });\n\n // Render players to DOM\n const latestRoundId = PageMtgGame.getLatestRoundId();\n const latestRound = rounds.filter(round => round[attrRoundId] == latestRoundId)[0];\n const roundDisplayOrderLabel = PageMtgGame.getRoundDisplayOrderLabel();\n DOM.setElementValuesCurrentAndPrevious(roundDisplayOrderLabel, latestRound[flagDisplayOrder]);\n \n this.renderPlayers();\n\n } catch (error) {\n console.error('Error loading game from server:', error);\n }\n }\n static getRoundDisplayOrderLabel() {\n return document.querySelector([\n '#gameSection'\n , ' > .'\n , flagRow\n , '.'\n , flagRound\n , ' > .'\n , flagRow\n , '.'\n , flagRound\n , ' > .'\n , flagRound\n , '.'\n , flagDisplayOrder\n , ' > span.'\n , flagRound\n , '.'\n , flagDisplayOrder\n ].join(''));\n }\n\n renderPlayers() {\n const grid = document.getElementById('playersGrid');\n grid.innerHTML = '';\n \n // let activeRoundId = PageMtgGame.getActiveRoundId();\n const roundDisplayOrderLabel = PageMtgGame.getRoundDisplayOrderLabel();\n const currentRoundDisplayOrder = Number(DOM.getElementValueCurrent(roundDisplayOrderLabel));\n let activeRound = rounds.filter(round => round[flagDisplayOrder] == currentRoundDisplayOrder)[0];\n if (activeRound == null) {\n activeRound = PageMtgGame.makeDefaultGameRound(currentRoundDisplayOrder);\n rounds.push(activeRound);\n }\n DOM.setElementValueCurrent(roundDisplayOrderLabel, activeRound[flagDisplayOrder]);\n \n const previousRoundIds = rounds.filter(round => round[flagDisplayOrder] <= currentRoundDisplayOrder)\n .map(round => round[attrRoundId]);\n players.forEach((player, index) => {\n // Build display name: prefer user_name + deck_name, fallback to player name\n const playerId = player[attrPlayerId];\n let displayName = PageMtgGame.makePlayerDisplayName(playerId, index);\n let damagePlayerPairs = [...players, { [attrPlayerId]: null }];\n let maxCommanderDamageReceived = 0;\n damagePlayerPairs.forEach(damagePlayerPair => {\n const sourceId = damagePlayerPair[attrPlayerId];\n const filteredPlayerDamages = damageRecords.filter(damage => (\n damage[attrRoundId] == activeRound[attrRoundId]\n // previousRoundIds.includes(damage[attrRoundId])\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n )); //[playerId] || {};\n if (filteredPlayerDamages.length == 0) {\n damageRecords.push(PageMtgGame.makeDefaultGameRoundPlayerDamage(playerId, sourceId));\n }\n maxCommanderDamageReceived = Math.max(\n maxCommanderDamageReceived\n , damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n && damage[attrReceivedFromCommanderPlayerId] != null\n && previousRoundIds.includes(damage[attrRoundId])\n ))\n .map(damage => damage[flagLifeLoss])\n .reduce((a, b) => a + b, 0)\n );\n });\n\n const totalDamage = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && previousRoundIds.includes(damage[attrRoundId])\n ))\n .map(damage => damage[flagLifeLoss] - damage[flagLifeGain])\n .reduce((a, b) => a + b, 0);\n let life = startingLife - totalDamage;\n\n let isEliminatedByForce = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && previousRoundIds.includes(damage[attrRoundId])\n ))\n .map(damage => damage[flagIsEliminated])\n .some(Boolean);\n console.log(\"renderPlayers\");\n console.log({isEliminatedByForce, player, life, maxCommanderDamageReceived});\n const isEliminated = (\n isEliminatedByForce\n || !player[flagActive]\n || life < 1\n || maxCommanderDamageReceived >= 21\n );\n\n const totalCommanderDeaths = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n && damage[attrRoundId] == activeRound[attrRoundId]\n ))\n .map(damage => damage[flagCommanderDeaths])\n .reduce((a, b) => a + b, 0);\n const card = document.createElement('div');\n card.className = `player-card ${isEliminated ? 'eliminated' : ''}`;\n card.style.animationDelay = `${index * 0.1}s`;\n card.dataset.playerId = playerId;\n card.dataset.userName = player.user_name || '';\n card.dataset.deckName = player.deck_name || '';\n\n card.innerHTML = `\n
\n
\n
${displayName}
\n
\n Commander Deaths:\n
\n \n ${totalCommanderDeaths}\n \n
\n
\n
\n \n
\n\n
\n \n
${life}
\n \n
\n \n \n \n \n
\n \n
\n \n \n \n \n
\n
\n\n
\n
Commander Damage Taken
\n
\n ${PageMtgGame.renderCommanderDamageRows(\n playerId // playerId\n , player[attrDeckId] // deckId\n )}\n
\n
\n `;\n\n grid.appendChild(card);\n });\n\n this.reorderPlayerCards();\n\n PageMtgGame.renderCommanderDamageLog();\n\n // Hookup all event handlers\n this.hookupGameRoundEvents();\n this.hookupPlayerCardEvents();\n }\n static renderCommanderDamageLog() {\n const currentRoundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder();\n\n const damageTableBody = document.querySelector('.' + flagDamageLog + '.' + flagContainer + ' table tbody');\n damageTableBody.innerHTML = '';\n \n const previousRoundIds = rounds.filter(round => round[flagDisplayOrder] <= currentRoundDisplayOrder)\n .map(round => round[attrRoundId]);\n let newTableBodyHtml = '';\n damageRecords.forEach((damage) => {\n if (\n damage[flagActive]\n && (\n damage[flagCommanderDeaths] > 0\n || damage[flagLifeGain] != 0\n || damage[flagLifeLoss] != 0\n || damage[flagIsEliminated]\n )\n // && rounds.filter(r => r[attrRoundId] == damage[attrRoundId])[0][flagDisplayOrder] <= currentRoundDisplayOrder\n && previousRoundIds.includes(damage[attrRoundId])\n ) {\n let round = rounds.filter(r => r[attrRoundId] == damage[attrRoundId])[0];\n let player = players.filter(p => p[attrPlayerId] == damage[attrPlayerId])[0];\n let receivedFromPlayer = (damage[attrReceivedFromCommanderPlayerId] == null) ? { [flagName]: ''} : players.filter(p => p[attrPlayerId] == damage[attrReceivedFromCommanderPlayerId])[0];\n newTableBodyHtml += `\n \n ${round[flagDisplayOrder]}\n ${player[flagName]}\n ${receivedFromPlayer[flagName]}\n ${damage[flagLifeGain]}\n ${damage[flagLifeLoss]}\n ${damage[flagCommanderDeaths]}\n ${damage[flagIsEliminated]}\n \n `;\n }\n });\n damageTableBody.innerHTML = newTableBodyHtml;\n }\n static makeDefaultGameRoundPlayerDamage(playerId, receivedFromCommanderPlayerId) {\n let roundId = PageMtgGame.getActiveRoundId();\n return {\n [attrDamageId]: -1 - damageRecords.length\n , [attrRoundId]: roundId\n , [attrPlayerId]: playerId\n , [attrReceivedFromCommanderPlayerId]: receivedFromCommanderPlayerId\n , [flagLifeGain]: 0\n , [flagLifeLoss]: 0\n , [flagCommanderDeaths]: 0\n , [flagIsEliminated]: false\n , [flagActive]: true\n };\n }\n static getLatestRoundId() {\n let roundId = -1;\n if (rounds.length > 0) {\n const highestRoundDisplayOrder = rounds.map(round => { return round[flagDisplayOrder]; })\n .reduce((acc, cur) => Math.max(acc, cur), 0);\n const filteredRounds = rounds.filter(round => round[flagDisplayOrder] == highestRoundDisplayOrder);\n if (filteredRounds.length > 0) {\n roundId = filteredRounds[0][attrRoundId];\n }\n console.log({ \"method\": \"getLatestRoundId\", highestRoundDisplayOrder, filteredRounds, roundId });\n }\n return roundId;\n }\n static getActiveRoundDisplayOrder() {\n const roundDisplayOrderLabel = PageMtgGame.getRoundDisplayOrderLabel();\n return Number(DOM.getElementValueCurrent(roundDisplayOrderLabel));\n }\n static getActiveRoundId() {\n const currentRoundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder();\n let roundId = 0;\n if (rounds.length > 0) {\n let filteredRounds = rounds.filter(round => round[flagDisplayOrder] == currentRoundDisplayOrder);\n if (filteredRounds.length > 0) roundId = filteredRounds[0][attrRoundId];\n console.log({ \"method\": \"getActiveRoundId\", filteredRounds, roundId });\n }\n return roundId;\n }\n static makePlayerDisplayName(playerId, index) {\n if (playerId == null) {\n return `Player ${index + 1}`;\n }\n const player = players.filter(player => player[attrPlayerId] == playerId)[0];\n const deckId = player[attrDeckId];\n const deck = (deckId == null) ? null : decks.filter(deck => deck[attrDeckId] == deckId)[0];\n const user = (playerId == null) ? null : users[player[attrUserId]];\n return player[flagName] || `${(user == null) ? 'Error' : user[flagName]} - ${(deck == null) ? 'Error' : deck[flagName]}`;\n }\n static renderCommanderDamageRows(playerId) {\n const activeRoundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder();\n const previousRoundIds = rounds.filter(round => round[flagDisplayOrder] <= activeRoundDisplayOrder)\n .map(round => round[attrRoundId]);\n return players\n .filter(otherPlayer => otherPlayer[attrPlayerId] !== playerId)\n .map(otherPlayer => {\n const sourceId = otherPlayer[attrPlayerId];\n let otherPlayerDisplayName = PageMtgGame.makePlayerDisplayName(sourceId);\n const totalDamage = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n // && damage[attrRoundId] == roundId\n && previousRoundIds.includes(damage[attrRoundId])\n ))\n .map(damage => damage[flagLifeLoss])\n .reduce((acc, curr) => acc + curr, 0);\n const isLethal = (totalDamage >= 21);\n\n return `\n
\n from ${otherPlayerDisplayName}\n
\n \n \n ${totalDamage}\n \n
\n
\n `;\n })\n .join('');\n }\n\n hookupGameRoundEvents() {\n let incrementRoundButtonSelector = '#gameSection .' + flagRow + '.' + flagRound + ' button.' + flagRoundDisplayOrderButton;\n Events.hookupEventHandler(\"click\", incrementRoundButtonSelector, (event, button) => {\n const amount = button.classList.contains(flagRoundDisplayOrderPlus) ? 1 : -1;\n const roundDisplayOrderButtonContainer = button.parentElement;\n const roundDisplayOrderLabel = roundDisplayOrderButtonContainer.querySelector('span.' + flagRound + '.' + flagDisplayOrder);\n const currentRoundDisplayOrder = Number(DOM.getElementValueCurrent(roundDisplayOrderLabel));\n const newDisplayOrder = currentRoundDisplayOrder + amount;\n DOM.setElementValueCurrent(roundDisplayOrderLabel, newDisplayOrder);\n DOM.isElementDirty(roundDisplayOrderLabel);\n this.updateAndToggleShowButtonsSaveCancel();\n this.renderPlayers();\n });\n }\n static makeDefaultGameRound(displayOrder) {\n const newDisplayOrder = (displayOrder != null) ? displayOrder : 1 + Math.max(rounds.map(round => round[flagDisplayOrder]));\n return {\n [attrRoundId]: -newDisplayOrder\n , [attrGameId]: gameId\n , [flagNotes]: null\n , [flagDisplayOrder]: newDisplayOrder\n , [flagActive]: true\n };\n }\n hookupPlayerCardEvents() {\n // Life gain buttons\n let lifeGainButtonSelector = '.life-gain-btn';\n Events.hookupEventHandler(\"click\", lifeGainButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n const amount = parseInt(button.dataset.amount);\n const activeRoundId = PageMtgGame.getActiveRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == activeRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n this.changeLife(\n playerId // playerId\n , amount // amount\n , true // isLifeGainNotLoss\n , true // updateDamage\n , damageIndex // damageIndex\n );\n });\n\n // Life loss buttons\n let lifeLossButtonSelector = '.life-loss-btn';\n Events.hookupEventHandler(\"click\", lifeLossButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n const amount = parseInt(button.dataset.amount);\n const activeRoundId = PageMtgGame.getActiveRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == activeRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n this.changeLife(\n playerId // playerId\n , amount // amount\n , false // isLifeGainNotLoss\n , true // updateDamage\n , damageIndex // damageIndex\n );\n });\n\n // Commander death buttons\n let commanderDeathButtonSelector = '.death-btn';\n Events.hookupEventHandler(\"click\", commanderDeathButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n const isMinusButton = button.classList.contains('death-minus');\n const amount = (isMinusButton) ? -1 : 1;\n this.changeCommanderDeaths(playerId, amount);\n });\n\n // Commander damage buttons\n let commmanderDamageButtonSelector = '.damage-btn';\n Events.hookupEventHandler(\"click\", commmanderDamageButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n const sourceId = button.dataset.sourceId;\n const isMinusButton = button.classList.contains('damage-minus');\n const amount = (isMinusButton) ? -1 : 1;\n this.changeCommanderDamage(playerId, sourceId, amount);\n });\n\n // Eliminate buttons\n let eliminatePlayerButtonSelector = '.eliminate-btn';\n Events.hookupEventHandler(\"click\", eliminatePlayerButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n this.toggleEliminate(playerId);\n });\n }\n\n changeLife(playerId, amount, isLifeGainNotLoss = false, updateDamage = false, damageIndex = null) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n // if (!card || card.classList.contains('eliminated')) return;\n\n const lifeInput = card.querySelector(`.life-value[data-player-id=\"${playerId}\"]`);\n const lifeDisplay = card.querySelector(`.life-display[data-player-id=\"${playerId}\"]`);\n\n const currentLife = parseInt(lifeInput.value) || 0;\n const newLife = currentLife + amount * ((isLifeGainNotLoss) ? 1 : -1);\n\n DOM.setElementAttributeValueCurrent(lifeDisplay, newLife);\n DOM.isElementDirty(lifeDisplay);\n lifeInput.value = newLife;\n lifeDisplay.textContent = newLife;\n\n if (updateDamage) {\n let fieldFlag = (isLifeGainNotLoss) ? flagLifeGain : flagLifeLoss;\n damageRecords[damageIndex][fieldFlag] += amount;\n }\n\n PageMtgGame.renderCommanderDamageLog();\n\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n\n changeCommanderDamage(playerId, sourceId, amount) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n // if (!card || card.classList.contains('eliminated')) return;\n\n const damageInput = card.querySelector(`.damage-value[data-player-id=\"${playerId}\"][data-source-id=\"${sourceId}\"]`);\n const damageDisplay = card.querySelector(`.damage-display[data-player-id=\"${playerId}\"][data-source-id=\"${sourceId}\"]`);\n\n const currentDamage = parseInt(damageInput.value) || 0;\n const newDamage = Math.max(0, currentDamage + amount);\n amount = newDamage - currentDamage;\n DOM.setElementAttributeValueCurrent(damageDisplay, newDamage);\n DOM.isElementDirty(damageDisplay);\n damageInput.value = newDamage;\n damageDisplay.textContent = newDamage;\n\n // Update lethal class\n if (newDamage >= 21) {\n damageDisplay.classList.add('lethal');\n } else {\n damageDisplay.classList.remove('lethal');\n }\n\n const activeRoundId = PageMtgGame.getActiveRoundId();\n const damageIndex = damageRecords.findIndex(damageRecord => (\n damageRecord[attrRoundId] == activeRoundId\n && damageRecord[attrPlayerId] == playerId\n && damageRecord[attrReceivedFromCommanderPlayerId] == sourceId\n ));\n damageRecords[damageIndex][flagLifeLoss] += amount;\n \n let isLifeGainNotLoss = false;\n this.changeLife(\n playerId // playerId\n , -amount // amount\n , isLifeGainNotLoss // isLifeGainNotLoss\n , false // updateDamage\n , damageIndex // damageIndex\n );\n // PageMtgGame.debouncedSave();\n }\n\n changeCommanderDeaths(playerId, amount) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n // if (!card || card.classList.contains('eliminated')) return;\n\n const deathDisplay = card.querySelector(`.death-display[data-player-id=\"${playerId}\"]`);\n const currentDeaths = parseInt(deathDisplay.textContent) || 0;\n const newDeaths = Math.max(0, currentDeaths + amount);\n\n deathDisplay.textContent = newDeaths;\n DOM.setElementAttributeValueCurrent(deathDisplay, newDeaths);\n DOM.isElementDirty(deathDisplay);\n\n const activeRoundId = PageMtgGame.getActiveRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == activeRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n damageRecords[damageIndex][flagCommanderDeaths] = newDeaths;\n\n PageMtgGame.renderCommanderDamageLog();\n\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n\n toggleEliminate(playerId) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n if (!card) return;\n\n const eliminateBtn = card.querySelector(`.eliminate-btn[data-player-id=\"${playerId}\"]`);\n const wasEliminated = card.classList.contains('eliminated');\n\n if (wasEliminated) {\n card.classList.remove('eliminated');\n eliminateBtn.textContent = 'Eliminate';\n } else {\n card.classList.add('eliminated');\n eliminateBtn.textContent = 'Revive';\n }\n const isEliminated = card.classList.contains('eliminated');\n\n const activeRoundId = PageMtgGame.getActiveRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == activeRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n damageRecords[damageIndex][flagIsEliminated] = isEliminated;\n\n DOM.setElementAttributeValueCurrent(eliminateBtn, isEliminated);\n DOM.isElementDirty(eliminateBtn);\n\n this.reorderPlayerCards();\n PageMtgGame.renderCommanderDamageLog();\n\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n reorderPlayerCards() {\n let playerGrid = document.getElementById('playersGrid');\n let currentPlayerCards = playerGrid.querySelectorAll('.player-card');\n let newPlayerCards = [];\n let playerCardMetas = [];\n currentPlayerCards.forEach((playerCard, index) => {\n newPlayerCards.push(playerCard.cloneNode(true));\n playerCardMetas.push({\n [flagIsEliminated]: playerCard.classList.contains(flagIsEliminated)\n , [attrPlayerId]: playerCard.dataset[\"playerId\"]\n , [flagDisplayOrder]: index\n });\n });\n let activeRoundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder();\n let newPlayerGridInnerHTML = '';\n let playerIdA, playerIdB, isEliminatedAsIntA, isEliminatedAsIntB, playerA, playerB, indexPlayerCard;\n playerCardMetas.sort((a, b) => {\n playerIdA = a[attrPlayerId];\n playerIdB = b[attrPlayerId];\n isEliminatedAsIntA = PageMtgGame.isPlayerEliminated(playerIdA, activeRoundDisplayOrder) ? 1 : 0;\n isEliminatedAsIntB = PageMtgGame.isPlayerEliminated(playerIdB, activeRoundDisplayOrder) ? 1 : 0;\n playerA = players.filter(p => p[attrPlayerId] == playerIdA)[0];\n playerB = players.filter(p => p[attrPlayerId] == playerIdB)[0];\n return (\n players.length * isEliminatedAsIntA\n + playerA[flagDisplayOrder]\n ) - (\n players.length * isEliminatedAsIntB\n + playerB[flagDisplayOrder]\n );\n }).forEach((playerCardMeta) => {\n indexPlayerCard = playerCardMeta[flagDisplayOrder];\n newPlayerGridInnerHTML += newPlayerCards[indexPlayerCard].outerHTML;\n });\n\n playerGrid.innerHTML = newPlayerGridInnerHTML;\n\n playerGrid.querySelectorAll('.' + flagInitialised).forEach((initialisedElement) => {\n initialisedElement.classList.remove(flagInitialised);\n });\n\n this.hookupPlayerCardEvents();\n }\n static isPlayerEliminated(playerId, roundDisplayOrder = null) {\n if (roundDisplayOrder == null) roundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder();\n const filteredRoundIds = rounds.filter(round => round[flagDisplayOrder] <= roundDisplayOrder)\n .map(round => round[attrRoundId]);\n let hasDamageWithIsEliminated = damageRecords.filter(damage => (\n // damage[attrRoundId] <= roundDisplayOrder\n filteredRoundIds.includes(damage[attrRoundId])\n && damage[attrPlayerId] == playerId\n && damage[flagIsEliminated]\n )).length > 0;\n let damageFromOtherPlayers = {};\n let otherPlayerId;\n damageRecords.filter(damage => (\n // damage[attrRoundId] <= roundId\n filteredRoundIds.includes(damage[attrRoundId])\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] != null\n ))\n .forEach((damage) => {\n otherPlayerId = damage[attrReceivedFromCommanderPlayerId];\n damageFromOtherPlayers[otherPlayerId] = \n damage[flagLifeLoss]\n + ((damageFromOtherPlayers[otherPlayerId] == null) ? 0 : damageFromOtherPlayers[otherPlayerId]);\n });\n let maxDamageFromOtherCommander = Object.keys(damageFromOtherPlayers)\n .map((playerId) => damageFromOtherPlayers[playerId])\n .reduce((acc, cur) => Math.max(acc, cur), 0);\n let totalDamageTaken = damageRecords.filter(damage => (\n // damage[attrRoundId] <= roundId\n filteredRoundIds.includes(damage[attrRoundId])\n && damage[attrPlayerId] == playerId\n ))\n .map((damage) => damage[flagLifeLoss] - damage[flagLifeGain])\n .reduce((a, b) => a + b, 0);\n console.log({ roundDisplayOrder, filteredRoundIds, hasDamageWithIsEliminated, maxDamageFromOtherCommander, totalDamageTaken });\n return (\n hasDamageWithIsEliminated\n || maxDamageFromOtherCommander >= 21\n || totalDamageTaken >= startingLife\n );\n }\n\n static updatePlayerSetup() {\n const playerCountInput = document.getElementById('playerCount');\n if (!playerCountInput) return;\n\n const playerCount = parseInt(playerCountInput.value);\n const grid = document.getElementById('playerSetupGrid');\n if (!grid) return;\n\n grid.innerHTML = '';\n const wrapperTemplate = document.getElementById(playerSetupWrapperTemplateId);\n let player, wrapper, wrapperHeading, userDdl, deckDdl, nameInput;\n for (let i = 0; i < playerCount; i++) {\n if (i < players.length) {\n player = players[i];\n }\n else {\n player = PageMtgGame.makeDefaultGamePlayer();\n players.push(player);\n }\n wrapper = wrapperTemplate.cloneNode(true);\n wrapper.removeAttribute(\"id\");\n wrapper.setAttribute(flagDisplayOrder, i + 1);\n wrapper.classList.remove(flagIsCollapsed);\n wrapperHeading = wrapper.querySelector('label');\n wrapperHeading.innerText = 'Player ' + (i + 1);\n userDdl = wrapper.querySelector('.playerUser select');\n DOM.setElementValuesCurrentAndPrevious(userDdl, player[attrUserId]);\n deckDdl = wrapper.querySelector('.playerDeck select');\n DOM.setElementValuesCurrentAndPrevious(deckDdl, player[attrDeckId]);\n nameInput = wrapper.querySelector('.playerName input');\n DOM.setElementValuesCurrentAndPrevious(nameInput, player[flagName]);\n console.log('player: ', player);\n grid.appendChild(wrapper);\n }\n }\n static makeDefaultGamePlayer() {\n return {\n [attrPlayerId]: -players.length\n , [attrGameId]: gameId\n , [attrUserId]: user[attrUserId]\n , [attrDeckId]: 0\n , [flagName]: \"\"\n , [flagNotes]: null\n , [flagDisplayOrder]: players.length\n , [flagActive]: true\n };\n }\n\n async startGame() {\n const playerCountInput = document.getElementById('playerCount');\n if (!playerCountInput) return;\n\n const playerCount = parseInt(playerCountInput.value);\n const playersToSave = [];\n\n let playerSetupWrapper, playerId, player, userDdl, userId, deckDdl, deckId, nameInput, name;\n for (let i = 0; i < playerCount; i++) {\n playerSetupWrapper = document.querySelector('.player-name-input-wrapper[' + flagDisplayOrder + '=\"' + (i + 1) + '\"]');\n userDdl = playerSetupWrapper.querySelector('.playerUser select');\n deckDdl = playerSetupWrapper.querySelector('.playerDeck select');\n nameInput = playerSetupWrapper.querySelector('.playerName input');\n \n userId = DOM.getElementValueCurrent(userDdl);\n deckId = DOM.getElementValueCurrent(deckDdl);\n name = nameInput ? nameInput.value.trim() || null : null; // `Player ${i + 1}` : `Player ${i + 1}`;\n\n playerId = playerSetupWrapper.getAttribute(attrPlayerId);\n player = players.filter(p => p[attrPlayerId] == playerId)[0];\n playersToSave.push({\n ...player\n , [attrGameId]: gameId\n , [attrUserId]: userId\n , [attrDeckId]: deckId\n , [flagName]: name\n , [flagDisplayOrder]: i + 1\n , [flagActive]: true\n });\n }\n\n // Save players to server\n const comment = 'Save players';\n const self = this;\n API.saveGamePlayers(playersToSave, null, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n self.leave();\n window.location.reload();\n }\n else {\n console.error('Failed to save players:', data[flagMessage]);\n PageMtgGame.showError('An error occurred while creating the game');\n }\n })\n .catch(error => {\n console.error('Error creating game:', error);\n PageMtgGame.showError('An error occurred while creating the game');\n })\n .finally(() => {\n });\n }\n\n static resetGame() {\n if (confirm('Are you sure you want to start a new game? Current game will be lost.')) {\n localStorage.removeItem(`mtgGame_${gameId}`);\n window.location.href = hashPageGames;\n }\n }\n\n async saveGame() {\n /*\n const gameState = {\n [flagPlayer]: players\n , [flagRound]: rounds\n , [flagDamage]: damageRecords\n };\n if (gameState[flagPlayer].length > 0) {\n localStorage.setItem(`mtgGame_${gameId}`, JSON.stringify(gameState));\n PageMtgGame.showSaveIndicator();\n }\n */\n const comment = 'Save player damage';\n const self = this;\n API.saveGameRoundPlayerDamages(rounds, damageRecords, null, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n self.leave();\n window.location.reload();\n }\n else {\n console.error('Failed to save player damages:', data[flagMessage]);\n PageMtgGame.showError('An error occurred while saving player damages');\n }\n })\n .catch(error => {\n console.error('Error saving player damages:', error);\n PageMtgGame.showError('An error occurred while saving player damages');\n })\n .finally(() => {\n });\n }\n /*\n static debouncedSave() {\n clearTimeout(PageMtgGame._saveTimeout);\n PageMtgGame._saveTimeout = setTimeout(() => PageMtgGame.saveGame(), 500);\n }\n\n static showSaveIndicator() {\n const indicator = document.getElementById('saveIndicator');\n if (indicator) {\n indicator.classList.add('show');\n setTimeout(() => {\n indicator.classList.remove('show');\n }, 2000);\n }\n }\n */\n saveRecordsTableDirty() {\n this.saveGame();\n }\n static showError(message) {\n // Check if there's an overlay error element\n const errorOverlay = document.getElementById('overlayError');\n if (errorOverlay) {\n const errorLabel = errorOverlay.querySelector('.error-message, #labelError');\n if (errorLabel) {\n errorLabel.textContent = message;\n }\n errorOverlay.classList.remove('hidden');\n errorOverlay.style.display = 'flex';\n } else {\n // Fallback to alert\n alert(message);\n }\n }\n\n leave() {\n super.leave();\n }\n}\n\n// Static timeout reference for debouncing\nPageMtgGame._saveTimeout = null;\n","\nimport API from \"../../api.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\n\nexport default class PageMtgGames extends TableBasePage {\n static hash = hashPageMtgGames;\n static attrIdRowObject = attrGameId;\n callSaveTableContent = API.saveGame;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n hookupFilters() {\n /*\n this.sharedHookupFilters();\n this.hookupFilterActive();\n */\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n return;\n }\n initialiseRowNew(tbody, row) {\n }\n postInitialiseRowNewCallback(tbody) {\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n // this.hookupTableMainRows();\n this.hookupTcgGames();\n // PageMtgGames.hideNewGameForm();\n }\n hookupTcgGames() {\n console.log(\"hookupTableMain PageMtgGames\");\n // Initialize form submission\n const newGameForm = document.getElementById('newGameForm');\n if (newGameForm) {\n newGameForm.addEventListener('submit', this.handleNewGameSubmit.bind(this)); // () => { this.handleNewGameSubmit.bind(this); });\n }\n\n // Initialize filter form\n const filterForm = document.getElementById('formFilters');\n if (filterForm) {\n filterForm.addEventListener('submit', PageMtgGames.handleFilterSubmit);\n }\n\n // Close modal on escape key\n document.addEventListener('keydown', function(e) {\n if (e.key === 'Escape') {\n PageMtgGames.hideNewGameForm();\n }\n });\n\n // Close modal on backdrop click\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.addEventListener('click', function(e) {\n if (e.target === modal) {\n PageMtgGames.hideNewGameForm();\n }\n });\n }\n\n // Button onclicks\n const newGameButton = document.getElementById('btnNewGame');\n if (newGameButton) {\n newGameButton.addEventListener('click', PageMtgGames.showNewGameForm);\n }\n const cancelNewGameButtons = document.querySelectorAll(\n '#newGameForm .form-actions .btn-tcg.btn-tcg-secondary'\n + ','\n + '#newGameModal .modal-content .modal-header .modal-close'\n );\n if (cancelNewGameButtons.length > 0) {\n cancelNewGameButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGames.hideNewGameForm);\n });\n }\n\n }\n static showNewGameForm() {\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.classList.remove(flagIsCollapsed);\n document.body.style.overflow = 'hidden';\n\n // Focus on first input\n const firstInput = modal.querySelector('input, select');\n if (firstInput) {\n firstInput.focus();\n }\n }\n }\n static hideNewGameForm() {\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.classList.add(flagIsCollapsed);\n document.body.style.overflow = '';\n\n // Reset form\n const form = document.getElementById('newGameForm');\n if (form) {\n form.reset();\n }\n }\n }\n async handleNewGameSubmit(e) {\n e.preventDefault();\n\n const form = e.target;\n const formData = new FormData(form);\n\n const gameType = formData.get('game_type');\n const gameData = {\n [attrGameId]: -1\n , [flagIsCommander]: gameType === 'commander'\n , [flagIsDraft]: gameType === 'draft'\n , [flagIsSealed]: gameType === 'sealed'\n , [flagLocationName]: formData.get(flagLocationName) || null\n , [flagNotes]: formData.get(flagNotes) || null\n , [flagStartOn]: new Date().toISOString()\n , [flagStartingLife]: formData.get(flagStartingLife) || 40\n , [flagActive]: true\n };\n\n const submitBtn = form.querySelector('button[type=\"submit\"]');\n const originalText = submitBtn.textContent;\n submitBtn.textContent = 'Creating...';\n submitBtn.disabled = true;\n\n const games = [gameData];\n const comment = 'Create new game';\n API.saveGame(games, form, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n const gamePageHash = `${hashPageGame}/${data[attrGameId]}`;\n let filtersJson = {};\n this.leave();\n API.goToHash(gamePageHash, filtersJson);\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \" + data[flagMessage]);\n // OverlayError.show(data[flagMessage]);\n window.location.reload();\n }\n })\n .catch(error => {\n console.error('Error creating game:', error);\n PageMtgGames.showError('An error occurred while creating the game');\n })\n .finally(() => {\n submitBtn.textContent = originalText;\n submitBtn.disabled = false;\n });\n \n }\n static handleFilterSubmit(e) {\n // Let the form submit normally - it will reload with query params\n // You can add client-side filtering here if needed\n }\n static getCSRFToken() {\n // Try meta tag first\n const metaTag = document.querySelector('meta[name=\"csrf-token\"]');\n if (metaTag) {\n return metaTag.getAttribute('content');\n }\n\n // Try hidden input\n const hiddenInput = document.querySelector('input[name=\"csrf_token\"]');\n if (hiddenInput) {\n return hiddenInput.value;\n }\n\n // Try cookie\n const cookies = document.cookie.split(';');\n for (let cookie of cookies) {\n const [name, value] = cookie.trim().split('=');\n if (name === 'csrf_token') {\n return value;\n }\n }\n\n return '';\n }\n static showError(message) {\n // Check if there's an overlay error element\n const errorOverlay = document.getElementById('overlayError');\n if (errorOverlay) {\n const errorLabel = errorOverlay.querySelector('.error-message, #labelError');\n if (errorLabel) {\n errorLabel.textContent = message;\n }\n errorOverlay.classList.remove(flagIsCollapsed);\n errorOverlay.style.display = 'flex';\n } else {\n // Fallback to alert\n alert(message);\n }\n }\n static showSuccess(message) {\n // Could implement a toast notification here\n console.log('Success:', message);\n }\n static joinGame(gameId) {\n window.location.href = `${hashPageGame}/${gameId}`;\n }\n static async deleteGame(gameId) {\n if (!confirm('Are you sure you want to delete this game? This action cannot be undone.')) {\n return;\n }\n\n try {\n const gameData = {\n 'game_id': gameId,\n 'active': false\n };\n\n const response = await fetch(hashSaveGame, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRFToken': PageMtgGames.getCSRFToken()\n },\n body: JSON.stringify({\n [flagGame]: [gameData],\n 'form-filters': {},\n 'comment': 'Game deleted'\n })\n });\n\n const result = await response.json();\n\n if (result.status === 'success') {\n // Remove the row from the table\n const row = document.querySelector(`tr[data-game-id=\"${gameId}\"]`);\n if (row) {\n row.style.animation = 'tcg-fadeOut 0.3s ease-out forwards';\n setTimeout(() => row.remove(), 300);\n }\n } else {\n PageMtgGames.showError(result.message || 'Failed to delete game');\n }\n } catch (error) {\n console.error('Error deleting game:', error);\n PageMtgGames.showError('An error occurred while deleting the game');\n }\n }\n\n toggleShowButtonsSaveCancel() {}\n leave() {\n super.leave();\n }\n}\n","\n\nimport API from \"../../api.js\";\nimport BasePage from \"../base.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\n\nexport default class PageMtgHome extends BasePage {\n static hash = hashPageMtgHome;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTcgHome();\n }\n\n hookupTcgHome() {\n }\n\n leave() {\n super.leave();\n }\n}\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityReport extends BasePage {\n static hash = hashPageAccessibilityReport;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityStatement extends BasePage {\n static hash = hashPageAccessibilityStatement;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport BasePage from \"../base.js\";\n\nexport default class PageLicense extends BasePage {\n static hash = hashPageLicense;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","\nimport BasePage from \"../base.js\";\n\nexport default class PagePrivacyPolicy extends BasePage {\n static hash = hashPagePrivacyPolicy;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","import BasePage from \"../base.js\";\n\nexport default class PageRetentionSchedule extends BasePage {\n static hash = hashPageDataRetentionSchedule;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\n\nexport default class MixinPage {\n constructor(pageCurrent) {\n this.page = pageCurrent;\n }\n\n initialize() {\n Utils.consoleLogIfNotProductionEnvironment('hookup start for ', this.page.hash);\n this.hookupFilters();\n this.hookupLocalStorage();\n }\n hookupFilters() {\n }\n hookupLocalStorage() {\n \n }\n \n leave() {}\n}\n","\nimport MixinPage from \"./mixin.js\";\n\nexport default class TableMixinPage extends MixinPage {\n constructor(pageCurrent) {\n super(pageCurrent);\n }\n initialize() {\n super.initialize();\n this.hookupFilters();\n this.hookupTable();\n }\n hookupFilters() {\n // Implement filter-specific functionality here\n }\n hookupTable() {\n // Implement table-specific functionality here\n }\n}","\nimport API from \"../../api.js\";\nimport TableMixinPage from \"../mixin_table.js\";\nimport DOM from \"../../dom.js\";\nimport TableBasePage from \"../base_table.js\";\n\nexport default class PageUser extends TableBasePage {\n static hash = hashPageUserAccount;\n static attrIdRowObject = attrUserId;\n callSaveTableContent = API.saveUsers;\n\n constructor(router) {\n super(router);\n this.mixin = new TableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTableMain();\n }\n\n\n hookupFilters() {\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getTableRecords(dirtyOnly = false) {\n dirtyOnly = true;\n let container = document.querySelector('.' + flagCard + '.' + flagUser);\n return [this.getJsonRow(container)];\n }\n getJsonRow(container) {\n console.log(\"getJsonRow: \", container);\n if (container == null) return;\n let inputFirstname = container.querySelector(' #' + flagFirstname);\n let inputSurname = container.querySelector(' #' + flagSurname);\n let inputEmail = container.querySelector(' #' + flagEmail);\n\n let idUser = container.getAttribute(attrUserId);\n \n let jsonRow = {\n [attrUserAuth0Id]: null\n , [flagEmail]: null\n , [flagIsEmailVerified]: null\n , [flagIsSuperUser]: null\n , [flagCanAdminUser]: null\n };\n\n jsonRow[attrUserId] = idUser;\n jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);\n jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);\n jsonRow[flagEmail] = DOM.getElementAttributeValueCurrent(inputEmail);\n return jsonRow;\n }\n \n initialiseRowNew(tbody, row) {\n }\n postInitialiseRowNewCallback(tbody) {\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsFirstname();\n this.hookupFieldsSurname();\n this.hookupFieldsEmail();\n }\n hookupFieldsFirstname() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagFirstname);\n }\n hookupFieldsSurname() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagSurname);\n }\n hookupFieldsEmail() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagEmail);\n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport API from \"../../api\";\nimport TableMixinPage from \"../mixin_table\";\nimport DOM from \"../../dom\";\nimport TableBasePage from \"../base_table\";\nimport Utils from \"../../lib/utils\";\n\nexport default class PageUsers extends TableBasePage {\n static hash = hashPageUserAccounts;\n static attrIdRowObject = attrUserId;\n callSaveTableContent = API.saveUsers;\n\n constructor(router) {\n super(router);\n this.mixin = new TableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n hookupFilters() {\n this.sharedHookupFilters();\n this.hookupFilterActive();\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n if (row == null) return;\n let inputFirstname = row.querySelector('td.' + flagFirstname + ' .' + flagFirstname);\n let inputSurname = row.querySelector('td.' + flagSurname + ' .' + flagSurname);\n let inputNotes = row.querySelector('td.' + flagNotes + ' .' + flagNotes);\n let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);\n\n let jsonRow = {\n [attrUserAuth0Id]: null\n , [flagEmail]: null\n , [flagIsEmailVerified]: null\n , [flagIsSuperUser]: null\n , [flagCanAdminUser]: null\n };\n jsonRow[attrUserId] = row.getAttribute(attrUserId);\n jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);\n jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);\n jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);\n jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);\n\n console.log(\"jsonRow\");\n console.log(jsonRow);\n\n return jsonRow;\n }\n \n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n let newestRow = newRows[0];\n let clickableElementsSelector = [].join('');\n newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {\n clickableElement.click();\n });\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsFirstname();\n this.hookupFieldsSurname();\n this.hookupFieldsNotesTable();\n this.hookupFieldsActive();\n }\n hookupFieldsFirstname() {\n this.hookupChangeHandlerTableCells(flagFirstname);\n }\n hookupFieldsSurname() {\n this.hookupChangeHandlerTableCells(flagSurname);\n }\n\n leave() {\n super.leave();\n }\n}\n","\n// Pages\n// Core\n// TCG\nimport PageMtgDecks from './pages/tcg/mtg_decks.js';\nimport PageMtgGame from './pages/tcg/mtg_game.js';\nimport PageMtgGames from './pages/tcg/mtg_games.js';\nimport PageMtgHome from './pages/tcg/mtg_home.js';\n// Legal\nimport PageAccessibilityReport from './pages/legal/accessibility_report.js';\nimport PageAccessibilityStatement from './pages/legal/accessibility_statement.js';\nimport PageLicense from './pages/legal/license.js';\nimport PagePrivacyPolicy from './pages/legal/privacy_policy.js';\nimport PageRetentionSchedule from './pages/legal/retention_schedule.js';\n// User\n// import PageUserLogin from './pages/user/login.js';\n// import PageUserLogout from './pages/user/logout.js';\nimport PageUser from './pages/user/user.js';\nimport PageUsers from './pages/user/users.js';\n\nimport API from './api.js';\nimport DOM from './dom.js';\nimport Utils from './lib/utils.js';\n\n\nexport default class Router {\n constructor() {\n // Pages\n this.pages = {};\n // Core\n // TCG\n this.pages[hashPageMtgDecks] = { name: 'PageMtgDecks', module: PageMtgDecks };\n this.pages[hashPageMtgGame] = { name: 'PageMtgGame', module: PageMtgGame };\n this.pages[hashPageMtgGames] = { name: 'PageMtgGames', module: PageMtgGames };\n this.pages[hashPageMtgHome] = { name: 'PageMtgGame', module: PageMtgHome };\n // Legal\n this.pages[hashPageAccessibilityStatement] = { name: 'PageAccessibilityStatement', module: PageAccessibilityStatement };\n this.pages[hashPageDataRetentionSchedule] = { name: 'PageDataRetentionSchedule', module: PageRetentionSchedule };\n this.pages[hashPageLicense] = { name: 'PageLicense', module: PageLicense };\n this.pages[hashPagePrivacyPolicy] = { name: 'PagePrivacyPolicy', module: PagePrivacyPolicy };\n // User\n // this.pages[hashPageUserLogin] = { name: 'PageUserLogin', module: PageUserLogin }; // pathModule: './pages/user/login.js' };\n // this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };\n this.pages[hashPageUserAccount] = { name: 'PageUser', module: PageUser };\n this.pages[hashPageUserAccounts] = { name: 'PageUsers', module: PageUsers };\n // Routes\n this.routes = {};\n // Core\n // TCG\n this.routes[hashPageMtgDecks] = (isPopState = false) => this.navigateToHash(hashPageMtgDecks, isPopState);\n this.routes[hashPageMtgGame] = (isPopState = false) => this.navigateToHash(hashPageMtgGame, isPopState);\n this.routes[hashPageMtgGames] = (isPopState = false) => this.navigateToHash(hashPageMtgGames, isPopState);\n this.routes[hashPageMtgHome] = (isPopState = false) => this.navigateToHash(hashPageMtgHome, isPopState);\n // Legal\n this.routes[hashPageAccessibilityStatement] = (isPopState = false) => this.navigateToHash(hashPageAccessibilityStatement, isPopState);\n this.routes[hashPageDataRetentionSchedule] = (isPopState = false) => this.navigateToHash(hashPageDataRetentionSchedule, isPopState);\n this.routes[hashPageLicense] = (isPopState = false) => this.navigateToHash(hashPageLicense, isPopState);\n this.routes[hashPagePrivacyPolicy] = (isPopState = false) => this.navigateToHash(hashPagePrivacyPolicy, isPopState);\n // User\n // this.routes[hashPageUserLogin] = (isPopState = false) => this.navigateToHash(hashPageUserLogin, isPopState);\n // this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);\n this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);\n this.routes[hashPageUserAccounts] = (isPopState = false) => this.navigateToHash(hashPageUserAccounts, isPopState);\n this.initialize();\n }\n loadPage(hashPage, isPopState = false) {\n const PageClass = this.getClassPageFromHash(hashPage);\n this.currentPage = new PageClass(this);\n this.currentPage.initialize(isPopState);\n window.addEventListener('beforeunload', () => this.currentPage.leave());\n }\n getClassPageFromHash(hashPage) {\n \n let pageJson = this.pages[hashPage];\n try {\n const module = pageJson.module;\n return module; \n }\n catch (error) {\n Utils.consoleLogIfNotProductionEnvironment(\"this.pages: \", this.pages);\n console.error('Page not found:', hashPage);\n throw error;\n }\n }\n initialize() {\n window.addEventListener('popstate', this.handlePopState.bind(this));\n }\n handlePopState(event) {\n this.loadPageCurrent();\n }\n loadPageCurrent() {\n const hashPageCurrent = DOM.getHashPageCurrent();\n this.loadPage(hashPageCurrent);\n }\n navigateToHash(hash, data = null, params = null, isPopState = false) {\n let url = API.getUrlFromHash(hash, params);\n history.pushState({data: data, params: params}, '', hash);\n API.goToUrl(url, data);\n }\n \n navigateToUrl(url, data = null, appendHistory = true) {\n // this.beforeLeave();\n if (appendHistory) history.pushState(data, '', url);\n url = API.parameteriseUrl(url, data);\n API.goToUrl(url);\n }\n\n static loadPageBodyFromResponse(response) {\n DOM.loadPageBody(response.data);\n }\n}\n\nexport const router = new Router();\n","\n'use strict';\n\nimport DOM from './dom.js';\nimport Router from './router.js';\n\n\nclass App {\n constructor() {\n this.dom = new DOM();\n this.router = new Router();\n }\n\n initialize() {\n this.setupEventListeners();\n this.start();\n }\n\n setupEventListeners() {\n // document.addEventListener('click', this.handleGlobalClick.bind(this));\n }\n\n handleGlobalClick(event) {\n }\n\n start() {\n this.initPageCurrent();\n }\n\n initPageCurrent() {\n this.router.loadPageCurrent();\n }\n \n}\n\nconst app = new App();\n\nfunction domReady(fn) {\n if (document.readyState !== 'loading') {\n fn();\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n}\n\ndomReady(() => {\n app.initialize();\n});\n\nwindow.app = app;\n\nexport default app;","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":["Validation","isEmpty","object","undefined","length","isString","trim","i","isValidNumber","value","positiveOnly","isNaN","parseFloat","getDataContentType","params","data","contentType","JSON","stringify","Data","ContentType","arrayContainsItem","array","itemValue","hasItem","isJQueryElementArray","jQuery","document","querySelectorAll","is","isDate","Date","getTime","dictHasKey","d","k","areEqualDicts","dict1","dict2","keys1","Object","keys","keys2","key","imageExists","url","callback","img","Image","onload","onerror","src","toFixedOrDefault","decimalPlaces","defaultValue","toFixed","Utils","DOM","setElementAttributesValuesCurrentAndPrevious","element","setElementAttributeValueCurrent","setElementAttributeValuePrevious","setAttribute","attrValueCurrent","attrValuePrevious","setElementValuesCurrentAndPrevious","setElementValueCurrent","tagName","toUpperCase","type","checked","textContent","setElementValueCurrentIfEmpty","getElementValueCurrent","getCellFromElement","closest","getRowFromElement","flagRow","selector","getClosestParent","parentSelector","parent","parentElement","matches","convertForm2JSON","elementForm","dataForm","containersFilter","flagContainerInput","flagFilter","containerFilter","labelFilter","keyFilter","filter","indexFilter","querySelector","getAttribute","loadPageBody","contentNew","pageBody","idPageBody","innerHTML","getHashPageCurrent","hashPageCurrent","body","dataset","page","updateAndCheckIsElementDirty","isElementDirty","isDirty","handleDirtyElement","toggleElementHasClassnameFlag","flagDirty","elementHasFlag","flag","elementAlreadyHasFlag","classList","contains","add","remove","hasDirtyChildrenContainer","container","hasDirtyChildrenNotDeletedContainer","flagDelete","returnVal","flagButton","flagActive","getElementAttributeValueCurrent","flagCheckbox","flagIsChecked","getElementAttributeValuePrevious","scrollToElement","scrollTop","offset","top","isElementInContainer","containerBounds","getBoundingClientRect","elementBounds","left","height","width","alertError","errorType","errorText","alert","createOptionUnselectedProductVariation","flagProductVariationType","flagNameAttrOptionText","flagName","flagNameAttrOptionValue","attrIdProductVariationType","flagProductVariation","attrIdProductVariation","createOption","optionJson","text","option","createElement","selected","escapeHtml","div","unescapeHtml","html","innerText","API","getCsrfToken","idCSRFToken","request","hashEndpoint","method","getUrlFromHash","csrfToken","options","headers","flagCsrfToken","response","fetch","ok","Error","status","json","error","console","hash","hashPageHome","parameteriseUrl","_pathHost","URLSearchParams","toString","goToUrl","window","location","href","goToHash","loginUser","flagCallback","hashPageUserLogin","saveUsers","users","formFilters","comment","dataRequest","flagFormFilters","flagUser","flagComment","hashSaveUserUser","saveGame","game","flagGame","hashSaveGame","getGamePlayers","gameId","saveGamePlayers","players","flagPlayer","hashSaveGamePlayer","getGameRounds","getGameDamageRecords","saveGameRoundPlayerDamages","rounds","damages","flagDamage","flagRound","hashSaveGameRoundPlayerDamage","BusinessObjects","getOptionJsonFromObjectJsonAndKeys","objectJson","keyText","keyValue","valueSelected","getOptionJsonFromObjectJson","getObjectText","getListObjectsFromIdDictAndCsv","idDict","idCsv","listObjects","ids","split","id","push","Events","initialiseEventHandler","selectorElement","classInitialised","eventHandler","forEach","hookupEventHandler","eventType","flagInitialised","addEventListener","event","stopPropagation","LocalStorage","getLocalStorage","parse","localStorage","getItem","setLocalStorage","newLS","setItem","getListFromDict","dict","list","consoleLogIfNotProductionEnvironment","message","environment","is_production","log","OverlayConfirm","hookup","callbackSuccess","idOverlayConfirm","flagCancel","buttonCancel","overlay","style","visibility","flagSubmit","buttonConfirm","textarea","show","flagIsCollapsed","OverlayError","BasePage","constructor","router","title","titlePageCurrent","name","initialize","sharedInitialize","logInitialisation","hookupCommonElements","hookupLogos","hookupNavigation","hookupOverlays","flagImageLogo","flagLogo","navigateToHash","idButtonHamburger","overlayHamburger","idOverlayHamburger","flagExpanded","hookupButtonsNavUserAccount","hookupButtonsNavUserLogout","hookupButtonsNavUserLogin","hookupButtonsNav","buttonSelector","button","pageHash","flagNavUserLogin","navigator","preventDefault","leave","then","Success","Message","hookupOverlayFromId","idOverlayError","idOverlay","display","hookupButtonSave","flagContainer","flagSave","target","setLocalStoragePage","dataPage","getLocalStoragePage","toggleShowButtonsSaveCancel","buttonContainerSelector","buttonSave","idButtonSave","idButtonCancel","isDirtyFilter","idTableMain","msgError","labelError","idLabelError","TableBasePage","cursorYInitial","rowInitial","placeholder","dragSrcEl","dragSrcRow","hookupTableCellDdls","bind","isPopState","isSinglePageApp","hookupFilters","hookupButtonsSaveCancel","hookupTableMain","saveRecordsTableDirtySinglePageApp","saveRecordsTableDirty","filters","getFormFilters","filtersDefault","callFilterTableContent","sharedHookupFilters","hookupButtonApplyFilters","hookupSearchTextFilter","hookupFilterActive","filterSelector","idFormFilters","flagActiveOnly","filterActiveOld","removeAttribute","parentDiv","isChecked","filterActiveNew","filterActive","svgElement","wasChecked","handleChangeFilter","filterValuePrevious","hookupFilter","filterFlag","handler","areDirtyFilters","tbody","rows","row","dirtyInputs","dirtyInput","isDirtyLabel","initialisedElements","initialisedElement","updateAndToggleShowButtonsSaveCancel","hookupFilterIsNotEmpty","flagIsNotEmpty","idButtonApplyFilters","flagSearch","hookupFilterCommandCategory","attrIdCommandCategory","filterCommandCategory","idCommandCategory","filterCommands","commandsInCategory","command","sortedCommands","sort","a","b","localeCompare","filterCommand","flagCommand","idCommandPrevious","appendChild","dispatchEvent","Event","hookupFilterCommand","attrIdCommand","hookupFilterLocation","attrIdLocation","filtersJson","callbackLoadTableContent","table","getTableMain","bodyTable","rowsJson","flagRows","every","hasOwnProperty","display_order","loadRowTable","rowJson","getAndLoadFilteredTableContentSinglePageApp","catch","hookupButtonCancel","records","getTableRecords","formElement","idTextareaConfirm","callSaveTableContent","flagStatus","flagSuccess","_verbose","flagMessage","dirtyOnly","record","getJsonRow","handleClickAddRowTable","_rowBlank","attrIdRowObject","cloneNode","countRows","initialiseRowNew","prepend","postInitialiseRowNewCallback","cacheRowBlank","selectorRowNew","flagRowNew","rowBlankTemp","initialiseSliderDisplayOrderRowNew","slidersDisplayOrder","flagDisplayOrder","flagSlider","maxDisplayOrder","slider","Math","max","sliderDisplayOrder","hookupSlidersDisplayOrderTable","selectorDisplayOrder","hookupChangeHandlerTableCells","inputSelector","handleChangeNestedElementCellTable","input","wasDirtyParentRows","getAllIsDirtyRowsInParentTree","wasDirtyElement","isDirtyElement","cascadeChangedIsDirtyNestedElementCellTable","tr","isDirtyRow","wasDirtyRow","shift","hookupChangeHandlerTableCellsWhenNotCollapsed","hookupFieldsCodeTable","flagCode","hookupFieldsNameTable","hookupFieldsDescriptionTable","flagDescription","hookupFieldsNotesTable","flagNotes","hookupFieldsActive","flagTable","handleClickRowNew","selectorButton","selectorButtonDelete","selectorButtonUndelete","hookupButtonsRowDelete","hookupButtonsRowUndelete","changeHandler","handleClickButtonRowDelete","changeEvent","changeElement","valuePrevious","wasDirty","parentNode","removeChild","buttonAddTemplate","idContainerTemplateElements","flagAdd","buttonAdd","replaceWith","handleClickButtonRowUndelete","buttonDeleteTemplate","buttonDelete","hookupTdsAccessLevel","hookupTableCellDdlPreviews","flagAccessLevel","accessLevels","fieldFlag","optionList","cellSelector","ddlHookup","ddlSelector","handleClickTableCellDdlPreview","optionObjectList","idSelected","td","ddl","optionObjectJson","toggleColumnCollapsed","flagColumn","isCollapsed","toggleColumnHasClassnameFlag","toggleColumnHeaderCollapsed","hookupFieldsCommandCategory","idTable","flagCommandCategory","filterCommandCategories","hookupCommandCategoryDdls","handleChangeCommandCategoryDdl","ddlCategory","idCommandCategoryRowOld","getIdCommandCategoryRow","idCommandCategoryRowNew","idCommandCategoryFilter","getIdCommandCategoryFilter","tdCommand","ddlCommand","hookupFieldsCommand","parentTr","tdCommandCategory","idCommandCategoryRow","filterCommandList","handleChangeCommandDdl","idCommandNew","getIdCommandRow","commandNew","divCommandCategory","ddlCommandCategory","elementCommandCategory","commandCategoryFilter","commandFilter","valueCurrentCommandCategoryFilter","valueCurrentCommandFilter","Number","getHasCommandCategoryFilter","elementCommand","getIdCommandFilter","idCommand","getHasCommandFilter","idCommandFilter","columnFlag","isRequiredFlag","classnameFlag","columnTh","columnThHasFlag","toggleColumnHeaderHasClassnameFlag","areVisibleSaveCancelButtons","PageMtgDecks","hashPageMtgDecks","attrDeckId","saveDeck","newRows","newestRow","clickableElementsSelector","attrCommanderBracketId","join","clickableElement","click","hookupTableMainRows","hookupTableMainIsCommanderCheckboxes","hookupTableMainCommanderBracketPreviews","rowSelector","flagTableMain","isRowExpanded","showSection","toggleShowDeckStatisticsSection","deckId","statisticsSectionTableBody","flagStatistics","deck","decks","newStatisticRowsHtml","statistic","attrStatisticId","flagValue","flagIsCommander","commanderBrackets","PageMtgGame","hashPageMtgGame","attrGameId","hookupTcgGame","initGamePage","pageHeading","updatePlayerSetup","loadGameFromServer","hookupResetButton","hookupPlayerCountInput","hookupStartGameButton","resetGameButton","resetGame","playerCountInput","getElementById","startGameButton","startGame","playersResponse","roundsResponse","damageResponse","Promise","all","setupSection","gameSection","savedPlayers","savedRounds","savedDamageRecords","damageRecords","latestRoundId","getLatestRoundId","latestRound","round","attrRoundId","roundDisplayOrderLabel","getRoundDisplayOrderLabel","renderPlayers","grid","currentRoundDisplayOrder","activeRound","makeDefaultGameRound","previousRoundIds","map","player","index","playerId","attrPlayerId","displayName","makePlayerDisplayName","damagePlayerPairs","maxCommanderDamageReceived","damagePlayerPair","sourceId","filteredPlayerDamages","damage","attrReceivedFromCommanderPlayerId","makeDefaultGameRoundPlayerDamage","includes","flagLifeLoss","reduce","totalDamage","flagLifeGain","life","startingLife","isEliminatedByForce","flagIsEliminated","some","Boolean","isEliminated","totalCommanderDeaths","flagCommanderDeaths","card","className","animationDelay","userName","user_name","deckName","deck_name","renderCommanderDamageRows","reorderPlayerCards","renderCommanderDamageLog","hookupGameRoundEvents","hookupPlayerCardEvents","getActiveRoundDisplayOrder","damageTableBody","flagDamageLog","newTableBodyHtml","r","p","receivedFromPlayer","attrDamageId","receivedFromCommanderPlayerId","roundId","getActiveRoundId","highestRoundDisplayOrder","acc","cur","filteredRounds","user","attrUserId","activeRoundDisplayOrder","otherPlayer","otherPlayerDisplayName","curr","isLethal","incrementRoundButtonSelector","flagRoundDisplayOrderButton","amount","flagRoundDisplayOrderPlus","roundDisplayOrderButtonContainer","newDisplayOrder","displayOrder","lifeGainButtonSelector","parseInt","activeRoundId","damageIndex","findIndex","changeLife","lifeLossButtonSelector","commanderDeathButtonSelector","isMinusButton","changeCommanderDeaths","commmanderDamageButtonSelector","changeCommanderDamage","eliminatePlayerButtonSelector","toggleEliminate","isLifeGainNotLoss","updateDamage","lifeInput","lifeDisplay","currentLife","newLife","damageInput","damageDisplay","currentDamage","newDamage","damageRecord","deathDisplay","currentDeaths","newDeaths","eliminateBtn","wasEliminated","playerGrid","currentPlayerCards","newPlayerCards","playerCardMetas","playerCard","newPlayerGridInnerHTML","playerIdA","playerIdB","isEliminatedAsIntA","isEliminatedAsIntB","playerA","playerB","indexPlayerCard","isPlayerEliminated","playerCardMeta","outerHTML","roundDisplayOrder","filteredRoundIds","hasDamageWithIsEliminated","damageFromOtherPlayers","otherPlayerId","maxDamageFromOtherCommander","totalDamageTaken","playerCount","wrapperTemplate","playerSetupWrapperTemplateId","wrapper","wrapperHeading","userDdl","deckDdl","nameInput","makeDefaultGamePlayer","playersToSave","playerSetupWrapper","userId","self","reload","showError","finally","confirm","removeItem","hashPageGames","errorOverlay","errorLabel","_saveTimeout","PageMtgGames","hashPageMtgGames","hookupTcgGames","newGameForm","handleNewGameSubmit","filterForm","handleFilterSubmit","e","hideNewGameForm","modal","newGameButton","showNewGameForm","cancelNewGameButtons","overflow","firstInput","focus","form","reset","formData","FormData","gameType","get","gameData","flagIsDraft","flagIsSealed","flagLocationName","flagStartOn","toISOString","flagStartingLife","submitBtn","originalText","disabled","games","gamePageHash","hashPageGame","getCSRFToken","metaTag","hiddenInput","cookies","cookie","showSuccess","joinGame","deleteGame","result","animation","setTimeout","PageMtgHome","hashPageMtgHome","hookupTcgHome","PageAccessibilityReport","hashPageAccessibilityReport","PageAccessibilityStatement","hashPageAccessibilityStatement","PageLicense","hashPageLicense","PagePrivacyPolicy","hashPagePrivacyPolicy","PageRetentionSchedule","hashPageDataRetentionSchedule","MixinPage","pageCurrent","hookupLocalStorage","TableMixinPage","hookupTable","PageUser","hashPageUserAccount","mixin","flagCard","inputFirstname","flagFirstname","inputSurname","flagSurname","inputEmail","flagEmail","idUser","jsonRow","attrUserAuth0Id","flagIsEmailVerified","flagIsSuperUser","flagCanAdminUser","hookupFieldsFirstname","hookupFieldsSurname","hookupFieldsEmail","PageUsers","hashPageUserAccounts","inputNotes","buttonActive","Router","pages","module","routes","loadPage","hashPage","PageClass","getClassPageFromHash","currentPage","pageJson","handlePopState","loadPageCurrent","history","pushState","navigateToUrl","appendHistory","loadPageBodyFromResponse","App","dom","setupEventListeners","start","handleGlobalClick","initPageCurrent","app","domReady","fn","readyState"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/main.bundle.js","mappings":";;;;;;;;AACe,MAAMA,UAAU,CAAC;EAC5B;AACJ;AACA;AACA;AACA;AACA;;EAEI,OAAOC,OAAOA,CAACC,MAAM,EAAE;IAEnB,IAAID,OAAO,GAAG,IAAI;IAElB,IAAIC,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAK,MAAM,IAAIA,MAAM,KAAKC,SAAS,IAAID,MAAM,KAAK,WAAW,EAAE;MAExF,IAAIA,MAAM,CAACE,MAAM,IAAID,SAAS,EAAE;QAC5BF,OAAO,GAAG,KAAK,CAAC,CAAC;MACrB,CAAC,MACI,IAAI,OAAOC,MAAM,KAAK,UAAU,EAAE;QACnCD,OAAO,GAAG,KAAK,CAAC,CAAC;MACrB,CAAC,MACI;QAAE;;QAEH,IAAII,QAAQ,GAAI,OAAOH,MAAM,IAAI,QAAS;QAE1C,IAAIG,QAAQ,EAAEH,MAAM,GAAGA,MAAM,CAACI,IAAI,CAAC,CAAC;QAEpC,IAAIJ,MAAM,CAACE,MAAM,GAAG,CAAC,EAAE;UAEnB,IAAIC,QAAQ,EAAE;YACVJ,OAAO,GAAG,KAAK,CAAC,CAAC;UACrB,CAAC,MACI;YAED,IAAI,OAAOC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;cAC9BD,OAAO,GAAG,KAAK;YACnB,CAAC,MACI;cACD,KAAI,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,MAAM,CAACE,MAAM,EAAEG,CAAC,EAAE,EAAE;gBACnC,IAAIL,MAAM,CAACK,CAAC,CAAC,IAAI,EAAE,EAAE;kBACjBN,OAAO,GAAG,KAAK;kBACf;gBACJ;cACJ;YACJ;UACJ;QACJ;MACJ;IACJ;IAEA,OAAOA,OAAO;EAClB;EAEA,OAAOO,aAAaA,CAACC,KAAK,EAAEC,YAAY,EAAE;IACtC,OAAO,CAACV,UAAU,CAACC,OAAO,CAACQ,KAAK,CAAC,IAAI,CAACE,KAAK,CAACF,KAAK,CAAC,KAAK,CAACC,YAAY,IAAIE,UAAU,CAACH,KAAK,CAAC,GAAG,CAAC,CAAC;EAClG;EAEA,OAAOI,kBAAkBA,CAACC,MAAM,EAAE;IAE9B,IAAIC,IAAI,GAAG,IAAI;IACf,IAAIC,WAAW,GAAG,EAAE;IAEpB,IAAI,CAAChB,UAAU,CAACC,OAAO,CAACa,MAAM,CAAC,EAAE;MAE7B,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;QAC5BC,IAAI,GAAGD,MAAM;QACbE,WAAW,GAAG,kDAAkD;MACpE,CAAC,MACI;QACDD,IAAI,GAAGE,IAAI,CAACC,SAAS,CAACJ,MAAM,CAAC;QAC7BE,WAAW,GAAG,iCAAiC;MACnD;IACJ;IAEA,OAAO;MAAEG,IAAI,EAAEJ,IAAI;MAAEK,WAAW,EAAEJ;IAAY,CAAC;EACnD;EAEA,OAAOK,iBAAiBA,CAACC,KAAK,EAAEC,SAAS,EAAE;IAEvC,IAAIC,OAAO,GAAG,KAAK;IAEnB,IAAI,CAACxB,UAAU,CAACC,OAAO,CAACqB,KAAK,CAAC,IAAI,CAACtB,UAAU,CAACC,OAAO,CAACsB,SAAS,CAAC,EAAE;MAE9D,IAAIE,oBAAoB,GAAGH,KAAK,CAAC,CAAC,CAAC,YAAYI,MAAM;MAErD,IAAID,oBAAoB,EAAE;QAEtB,KAAK,IAAIlB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGe,KAAK,CAAClB,MAAM,EAAEG,CAAC,EAAE,EAAE;UAEnC,IAAIoB,QAAQ,CAACC,gBAAgB,CAACN,KAAK,CAACf,CAAC,CAAC,CAAC,CAACsB,EAAE,CAACN,SAAS,CAAC,EAAE;YACnDC,OAAO,GAAG,IAAI;YACd;UACJ;QACJ;MACJ,CAAC,MACI;QAED,IAAIM,MAAM,GAAGR,KAAK,CAAC,CAAC,CAAC,YAAYS,IAAI;QAErC,IAAID,MAAM,EAAE;UAER,KAAK,IAAIvB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGe,KAAK,CAAClB,MAAM,EAAEG,CAAC,EAAE,EAAE;YAEnC,IAAIe,KAAK,CAACf,CAAC,CAAC,CAACyB,OAAO,CAAC,CAAC,KAAKT,SAAS,CAACS,OAAO,CAAC,CAAC,EAAE;cAC5CR,OAAO,GAAG,IAAI;cACd;YACJ;UACJ;QACJ,CAAC,MACI;UAED,KAAK,IAAIjB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGe,KAAK,CAAClB,MAAM,EAAEG,CAAC,EAAE,EAAE;YAEnC,IAAIe,KAAK,CAACf,CAAC,CAAC,IAAIgB,SAAS,EAAE;cACvBC,OAAO,GAAG,IAAI;cACd;YACJ;UACJ;QACJ;MACJ;IACJ;IAEA,OAAOA,OAAO;EAClB;EAEA,OAAOS,UAAUA,CAACC,CAAC,EAAEC,CAAC,EAAE;IACpB,OAAQA,CAAC,IAAID,CAAC;EAClB;EACA,OAAOE,aAAaA,CAACC,KAAK,EAAEC,KAAK,EAAE;IAC/B,MAAMC,KAAK,GAAGC,MAAM,CAACC,IAAI,CAACJ,KAAK,CAAC;IAChC,MAAMK,KAAK,GAAGF,MAAM,CAACC,IAAI,CAACH,KAAK,CAAC;IAEhC,IAAIC,KAAK,CAACnC,MAAM,KAAKsC,KAAK,CAACtC,MAAM,EAAE;MACnC,OAAO,KAAK;IACZ;IAEA,KAAK,IAAIuC,GAAG,IAAIJ,KAAK,EAAE;MACvB,IAAIF,KAAK,CAACM,GAAG,CAAC,KAAKL,KAAK,CAACK,GAAG,CAAC,EAAE;QAC3B,OAAO,KAAK;MAChB;IACA;IAEA,OAAO,IAAI;EACf;EAEA,OAAOC,WAAWA,CAACC,GAAG,EAAEC,QAAQ,EAAE;IAE9B,IAAIC,GAAG,GAAG,IAAIC,KAAK,CAAC,CAAC;IAErBD,GAAG,CAACE,MAAM,GAAG,YAAW;MAAEH,QAAQ,CAAC,IAAI,CAAC;IAAE,CAAC;IAC3CC,GAAG,CAACG,OAAO,GAAG,YAAW;MAAEJ,QAAQ,CAAC,KAAK,CAAC;IAAE,CAAC;IAC7CC,GAAG,CAACI,GAAG,GAAGN,GAAG;EACjB;EAEA,OAAOO,gBAAgBA,CAAC3C,KAAK,EAAE4C,aAAa,EAAEC,YAAY,GAAG,IAAI,EAAE;IAC/D,OAAOtD,UAAU,CAACQ,aAAa,CAACC,KAAK,CAAC,GAAGG,UAAU,CAACH,KAAK,CAAC,CAAC8C,OAAO,CAACF,aAAa,CAAC,GAAGC,YAAY;EACpG;AACJ,C;;AC5JmC;AACU;AAE9B,MAAMG,GAAG,CAAC;EACrB,OAAOC,4CAA4CA,CAACC,OAAO,EAAE5C,IAAI,EAAE;IAC/D0C,GAAG,CAACG,+BAA+B,CAACD,OAAO,EAAE5C,IAAI,CAAC;IAClD0C,GAAG,CAACI,gCAAgC,CAACF,OAAO,EAAE5C,IAAI,CAAC;EACvD;EACA,OAAO6C,+BAA+BA,CAACD,OAAO,EAAE5C,IAAI,EAAE;IAClD4C,OAAO,CAACG,YAAY,CAACC,gBAAgB,EAAEhD,IAAI,CAAC;EAChD;EACA,OAAO8C,gCAAgCA,CAACF,OAAO,EAAE5C,IAAI,EAAE;IACnD4C,OAAO,CAACG,YAAY,CAACE,iBAAiB,EAAEjD,IAAI,CAAC;EACjD;EACA,OAAOkD,kCAAkCA,CAACN,OAAO,EAAE5C,IAAI,EAAE;IACrD0C,GAAG,CAACS,sBAAsB,CAACP,OAAO,EAAE5C,IAAI,CAAC;IACzC0C,GAAG,CAACI,gCAAgC,CAACF,OAAO,EAAE5C,IAAI,CAAC;EACvD;EACA,OAAOmD,sBAAsBA,CAACP,OAAO,EAAE5C,IAAI,EAAE;IACzC0C,GAAG,CAACG,+BAA+B,CAACD,OAAO,EAAE5C,IAAI,CAAC;IAClD,IAAIoD,OAAO,GAAGR,OAAO,CAACQ,OAAO,CAACC,WAAW,CAAC,CAAC;IAC3C,IAAIT,OAAO,CAACU,IAAI,KAAK,UAAU,EAAE;MAC7BV,OAAO,CAACW,OAAO,GAAGvD,IAAI;IAC1B,CAAC,MACI,IAAIoD,OAAO,KAAK,OAAO,IAAIA,OAAO,KAAK,UAAU,IAAIA,OAAO,KAAK,QAAQ,EAAE;MAC5ER,OAAO,CAAClD,KAAK,GAAGM,IAAI;IACxB,CAAC,MACI;MACD4C,OAAO,CAACY,WAAW,GAAGxD,IAAI;IAC9B;EACJ;EACA,OAAOyD,6BAA6BA,CAACb,OAAO,EAAE5C,IAAI,EAAE;IAChD,IAAIf,UAAU,CAACC,OAAO,CAACwD,GAAG,CAACgB,sBAAsB,CAACd,OAAO,CAAC,CAAC,EAAE;MACzDF,GAAG,CAACS,sBAAsB,CAACP,OAAO,EAAE5C,IAAI,CAAC;IAC7C;EACJ;EACA,OAAO2D,kBAAkBA,CAACf,OAAO,EAAE;IAC/B,OAAOA,OAAO,CAACgB,OAAO,CAAC,IAAI,CAAC;EAChC;EACA,OAAOC,iBAAiBA,CAACjB,OAAO,EAAEkB,OAAO,EAAE;IACvC,IAAIC,QAAQ,GAAG9E,UAAU,CAACC,OAAO,CAAC4E,OAAO,CAAC,GAAG,IAAI,GAAG,KAAK,GAAGA,OAAO;IACnE,OAAOlB,OAAO,CAACgB,OAAO,CAACG,QAAQ,CAAC;EACpC;EACA,OAAOC,gBAAgBA,CAACpB,OAAO,EAAEqB,cAAc,EAAE;IAC7C,IAAIC,MAAM,GAAGtB,OAAO,CAACuB,aAAa;IAClC,OAAOD,MAAM,EAAE;MACX,IAAIA,MAAM,CAACE,OAAO,CAACH,cAAc,CAAC,EAAE;QAChC,OAAOC,MAAM;MACjB;MACAA,MAAM,GAAGA,MAAM,CAACC,aAAa;IACjC;IACA,OAAO,IAAI;EACb;EACF,OAAOE,gBAAgBA,CAACC,WAAW,EAAE;IACjC,IAAIC,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAItF,UAAU,CAACC,OAAO,CAACoF,WAAW,CAAC,EAAE;MACjC,OAAOC,QAAQ;IACnB;IACA,IAAIC,gBAAgB,GAAGF,WAAW,CAACzD,gBAAgB,CAAC,GAAG,GAAG4D,kBAAkB,GAAG,GAAG,GAAGC,UAAU,CAAC;IAChG,IAAIC,eAAe,EAAEC,WAAW,EAAEC,SAAS,EAAEC,MAAM;IACnD,KAAK,IAAIC,WAAW,GAAG,CAAC,EAAEA,WAAW,GAAGP,gBAAgB,CAACnF,MAAM,EAAE0F,WAAW,EAAE,EAAE;MAC5EJ,eAAe,GAAGH,gBAAgB,CAACO,WAAW,CAAC;MAC/CH,WAAW,GAAGD,eAAe,CAACK,aAAa,CAAC,OAAO,CAAC;MACpDH,SAAS,GAAGD,WAAW,CAACK,YAAY,CAAC,KAAK,CAAC;MAC3CH,MAAM,GAAGH,eAAe,CAACK,aAAa,CAAC,IAAIH,SAAS,EAAE,CAAC;MACvDN,QAAQ,CAACM,SAAS,CAAC,GAAGnC,GAAG,CAACgB,sBAAsB,CAACoB,MAAM,CAAC;IAC5D;IACA,OAAOP,QAAQ;EACnB;EACA,OAAOW,YAAYA,CAACC,UAAU,EAAE;IAC5B,IAAIC,QAAQ,GAAGxE,QAAQ,CAACoE,aAAa,CAACK,UAAU,CAAC;IACjDD,QAAQ,CAACE,SAAS,GAAGH,UAAU;EACnC;EACA,OAAOI,kBAAkBA,CAAA,EAAG;IACxB,MAAMC,eAAe,GAAG5E,QAAQ,CAAC6E,IAAI,CAACC,OAAO,CAACC,IAAI;IAClD,OAAOH,eAAe;EAC1B;EACA,OAAOI,4BAA4BA,CAAChD,OAAO,EAAE;IACzCA,OAAO,CAACG,YAAY,CAACC,gBAAgB,EAAEN,GAAG,CAACgB,sBAAsB,CAACd,OAAO,CAAC,CAAC;IAC3E,OAAOF,GAAG,CAACmD,cAAc,CAACjD,OAAO,CAAC;EACtC;EACA,OAAOiD,cAAcA,CAACjD,OAAO,EAAE;IAC3B,IAAIkD,OAAO,GAAGlD,OAAO,CAACqC,YAAY,CAAChC,iBAAiB,CAAC,IAAIL,OAAO,CAACqC,YAAY,CAACjC,gBAAgB,CAAC;IAC/FN,GAAG,CAACqD,kBAAkB,CAACnD,OAAO,EAAEkD,OAAO,CAAC;IACxC,OAAOA,OAAO;EAClB;EACA,OAAOC,kBAAkBA,CAACnD,OAAO,EAAEkD,OAAO,EAAE;IACxCpD,GAAG,CAACsD,6BAA6B,CAACpD,OAAO,EAAEkD,OAAO,EAAEG,SAAS,CAAC;EAClE;EACA,OAAOD,6BAA6BA,CAACpD,OAAO,EAAEsD,cAAc,EAAEC,IAAI,EAAE;IAChE,IAAIC,qBAAqB,GAAGxD,OAAO,CAACyD,SAAS,CAACC,QAAQ,CAACH,IAAI,CAAC;IAC5D,IAAID,cAAc,IAAIE,qBAAqB,EAAE;IAC7C,IAAIF,cAAc,EAAE;MAChBtD,OAAO,CAACyD,SAAS,CAACE,GAAG,CAACJ,IAAI,CAAC;IAC/B,CAAC,MAAM;MACHvD,OAAO,CAACyD,SAAS,CAACG,MAAM,CAACL,IAAI,CAAC;IAClC;EACJ;EACA,OAAOM,yBAAyBA,CAACC,SAAS,EAAE;IACxC,IAAIA,SAAS,IAAI,IAAI,EAAE,OAAO,KAAK;IACnC,OAAOA,SAAS,CAAC1B,aAAa,CAAC,GAAG,GAAGiB,SAAS,CAAC,IAAI,IAAI;EAC3D;EACA,OAAOU,mCAAmCA,CAACD,SAAS,EAAE;IAClD,IAAIA,SAAS,IAAI,IAAI,IAAIA,SAAS,CAACL,SAAS,CAACC,QAAQ,CAACM,UAAU,CAAC,EAAE,OAAO,KAAK;IAC/E,OAAOF,SAAS,CAAC1B,aAAa,CAAC,GAAG,GAAGiB,SAAS,GAAG,QAAQ,GAAGW,UAAU,GAAG,KAAK,GAAGA,UAAU,GAAG,KAAK,CAAC,IAAI,IAAI;EAChH;EACA,OAAOlD,sBAAsBA,CAACd,OAAO,EAAE;IACnC,IAAIiE,SAAS,GAAG,EAAE;IAElB,IAAI,CAAC5H,UAAU,CAACC,OAAO,CAAC0D,OAAO,CAAC,EAAE;MAE9B,IAAIQ,OAAO,GAAGR,OAAO,CAACQ,OAAO,CAACC,WAAW,CAAC,CAAC;MAC3C,IAAIT,OAAO,CAACU,IAAI,KAAK,UAAU,EAAE;QAC7BuD,SAAS,GAAGjE,OAAO,CAACW,OAAO;MAC/B;MACA;AACZ;AACA;AACA;AACA,QAJY,KAKK,IAAIH,OAAO,KAAK,OAAO,IAAIA,OAAO,KAAK,UAAU,IAAIA,OAAO,KAAK,QAAQ,EAAE;QAC5EyD,SAAS,GAAGjE,OAAO,CAAClD,KAAK;MAC7B,CAAC,MACI,IAAIkD,OAAO,CAACyD,SAAS,CAACC,QAAQ,CAACQ,UAAU,CAAC,IAAIlE,OAAO,CAACyD,SAAS,CAACC,QAAQ,CAACS,UAAU,CAAC,EAAE;QAAE;QACzFF,SAAS,GAAGjE,OAAO,CAACyD,SAAS,CAACC,QAAQ,CAACM,UAAU,CAAC;MACtD,CAAC,MACI,IAAIxD,OAAO,KAAK,IAAI,EAAE;QACvByD,SAAS,GAAGnE,GAAG,CAACsE,+BAA+B,CAACpE,OAAO,CAAC;MAC5D,CAAC,MACI,IAAIQ,OAAO,IAAI,KAAK,IAAIR,OAAO,CAACyD,SAAS,CAACC,QAAQ,CAACW,YAAY,CAAC,EAAE;QACnEJ,SAAS,GAAIjE,OAAO,CAACyD,SAAS,CAACC,QAAQ,CAACY,aAAa,CAAE;MAC3D,CAAC,MACI;QACDL,SAAS,GAAGjE,OAAO,CAACY,WAAW;MACnC;IACJ;IAEA,IAAIvE,UAAU,CAACC,OAAO,CAAC2H,SAAS,CAAC,EAAEA,SAAS,GAAG,EAAE;IAEjD,OAAOA,SAAS;EACpB;EACA,OAAOG,+BAA+BA,CAACpE,OAAO,EAAE;IAC5C,IAAI3D,UAAU,CAACC,OAAO,CAAC0D,OAAO,CAAC,EAAE,OAAO,IAAI;IAC5C,OAAOA,OAAO,CAACqC,YAAY,CAACjC,gBAAgB,CAAC;EACjD;EACA,OAAOmE,gCAAgCA,CAACvE,OAAO,EAAE;IAC7C,IAAI3D,UAAU,CAACC,OAAO,CAAC0D,OAAO,CAAC,EAAE,OAAO,IAAI;IAC5C,OAAOA,OAAO,CAACqC,YAAY,CAAChC,iBAAiB,CAAC;EAClD;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,OAAOmE,eAAeA,CAAClD,MAAM,EAAEtB,OAAO,EAAE;IACpC;IACAsB,MAAM,CAACmD,SAAS,CAACnD,MAAM,CAACmD,SAAS,CAAC,CAAC,IAAIzE,OAAO,CAAC0E,MAAM,CAAC,CAAC,CAACC,GAAG,GAAGrD,MAAM,CAACoD,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC;EACvF;EACA,OAAOC,oBAAoBA,CAACd,SAAS,EAAE9D,OAAO,EAAE;IAE5C,IAAI,OAAOjC,MAAM,KAAK,UAAU,EAAE;MAC9B,IAAI+F,SAAS,YAAY/F,MAAM,EAAE+F,SAAS,GAAGA,SAAS,CAAC,CAAC,CAAC;MACzD,IAAI9D,OAAO,YAAYjC,MAAM,EAAEiC,OAAO,GAAGA,OAAO,CAAC,CAAC,CAAC;IACvD;IAEA,IAAI6E,eAAe,GAAGf,SAAS,CAACgB,qBAAqB,CAAC,CAAC;IACvD,IAAIC,aAAa,GAAG/E,OAAO,CAAC8E,qBAAqB,CAAC,CAAC;IAEnD,OACID,eAAe,CAACF,GAAG,IAAII,aAAa,CAACJ,GAAG,IACxCE,eAAe,CAACG,IAAI,IAAID,aAAa,CAACC,IAAI,IACxCD,aAAa,CAACJ,GAAG,GAAGI,aAAa,CAACE,MAAM,IAAMJ,eAAe,CAACF,GAAG,GAAGE,eAAe,CAACI,MAAQ,IAC5FF,aAAa,CAACC,IAAI,GAAGD,aAAa,CAACG,KAAK,IAAML,eAAe,CAACG,IAAI,GAAGH,eAAe,CAACK,KAAO;EAEtG;EACA,OAAOC,UAAUA,CAACC,SAAS,EAAEC,SAAS,EAAE;IACpCC,KAAK,CAACF,SAAS,GAAG,IAAI,GAAGC,SAAS,CAAC;EACvC;EACA,OAAOE,sCAAsCA,CAAA,EAAG;IAC5C,OAAO;MACH,CAACC,wBAAwB,GAAG;QACxB,CAACC,sBAAsB,GAAG,CAACC,QAAQ,CAAC;QACpC,CAACC,uBAAuB,GAAG,CAACC,0BAA0B,CAAC;QACvD,CAACF,QAAQ,GAAG,uBAAuB;QACnC,CAACE,0BAA0B,GAAG;MAClC,CAAC;MACD,CAACC,oBAAoB,GAAG;QACpB,CAACJ,sBAAsB,GAAG,CAACC,QAAQ,CAAC;QACpC,CAACC,uBAAuB,GAAG,CAACG,sBAAsB,CAAC;QACnD,CAACJ,QAAQ,GAAG,kBAAkB;QAC9B,CAACI,sBAAsB,GAAG;MAC9B;IACJ,CAAC;EACL;EACA,OAAOC,YAAYA,CAACC,UAAU,EAAE;IAC5B,IAAI3J,UAAU,CAACC,OAAO,CAAC0J,UAAU,CAAC,EAAEA,UAAU,GAAG;MAC7CC,IAAI,EAAE,QAAQ;MACdnJ,KAAK,EAAE;IACX,CAAC;IACD,IAAIoJ,MAAM,GAAGlI,QAAQ,CAACmI,aAAa,CAAC,QAAQ,CAAC;IAC7CD,MAAM,CAACpJ,KAAK,GAAGkJ,UAAU,CAAClJ,KAAK;IAC/BoJ,MAAM,CAACtF,WAAW,GAAGoF,UAAU,CAACC,IAAI;IACpCC,MAAM,CAACE,QAAQ,GAAGJ,UAAU,CAACI,QAAQ;IACrC,OAAOF,MAAM;EACjB;EAEA,OAAOG,UAAUA,CAACJ,IAAI,EAAE;IACpB,MAAMK,GAAG,GAAGtI,QAAQ,CAACmI,aAAa,CAAC,KAAK,CAAC;IACzCG,GAAG,CAAC1F,WAAW,GAAGqF,IAAI;IACtB,OAAOK,GAAG,CAAC5D,SAAS;EACxB;EACA,OAAO6D,YAAYA,CAACC,IAAI,EAAE;IACtB,MAAMF,GAAG,GAAGtI,QAAQ,CAACmI,aAAa,CAAC,KAAK,CAAC;IACzCG,GAAG,CAAC5D,SAAS,GAAG8D,IAAI;IACpB,OAAOF,GAAG,CAAC1F,WAAW,IAAI0F,GAAG,CAACG,SAAS,IAAI,EAAE;EACjD;AACJ,C;;ACtO2B;AAEZ,MAAMC,GAAG,CAAC;EAErB,OAAOC,YAAYA,CAAA,EAAG;IAClB,OAAO3I,QAAQ,CAACoE,aAAa,CAACwE,WAAW,CAAC,CAACvE,YAAY,CAAC,SAAS,CAAC;EACtE;EAEA,aAAawE,OAAOA,CAACC,YAAY,EAAEC,MAAM,GAAG,KAAK,EAAE3J,IAAI,GAAG,IAAI,EAAED,MAAM,GAAG,IAAI,EAAE;IAC3E,MAAM+B,GAAG,GAAGwH,GAAG,CAACM,cAAc,CAACF,YAAY,EAAE3J,MAAM,CAAC;IACpD,MAAM8J,SAAS,GAAGP,GAAG,CAACC,YAAY,CAAC,CAAC;IACpC,MAAMO,OAAO,GAAG;MACZH,MAAM;MACNI,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;QAClC,CAACC,aAAa,GAAGH;MACrB;IACJ,CAAC;IAED,IAAI7J,IAAI,KAAK2J,MAAM,KAAK,MAAM,IAAIA,MAAM,KAAK,KAAK,IAAIA,MAAM,KAAK,OAAO,CAAC,EAAE;MACvE3J,IAAI,GAAG;QACH,GAAGA,IAAI;QACP,CAACgK,aAAa,GAAGH;MACrB,CAAC;MACDC,OAAO,CAACrE,IAAI,GAAGvF,IAAI,CAACC,SAAS,CAACH,IAAI,CAAC;IACvC;IAEA,IAAI;MACA,MAAMiK,QAAQ,GAAG,MAAMC,KAAK,CAACpI,GAAG,EAAEgI,OAAO,CAAC;MAC1C,IAAI,CAACG,QAAQ,CAACE,EAAE,EAAE;QACd,MAAM,IAAIC,KAAK,CAAC,uBAAuBH,QAAQ,CAACI,MAAM,EAAE,CAAC;MAC7D;MACA,OAAO,MAAMJ,QAAQ,CAACK,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,OAAOC,KAAK,EAAE;MACZC,OAAO,CAACD,KAAK,CAAC,qBAAqB,EAAEA,KAAK,CAAC;MAC3C,MAAMA,KAAK;IACf;EACJ;EAEA,OAAOX,cAAcA,CAACa,IAAI,EAAE1K,MAAM,GAAG,IAAI,EAAE;IACvC,IAAI0K,IAAI,IAAI,IAAI,EAAEA,IAAI,GAAGC,YAAY;IACrC,IAAI5I,GAAG,GAAGwH,GAAG,CAACqB,eAAe,CAACC,SAAS,GAAGH,IAAI,EAAE1K,MAAM,CAAC;IACvD,OAAO+B,GAAG;EACd;EACA,OAAO6I,eAAeA,CAAC7I,GAAG,EAAE/B,MAAM,EAAE;IAChC,IAAIA,MAAM,EAAE;MACR+B,GAAG,IAAI,GAAG,GAAG,IAAI+I,eAAe,CAAC9K,MAAM,CAAC,CAAC+K,QAAQ,CAAC,CAAC;IACvD;IACA,OAAOhJ,GAAG;EACd;EACA,OAAOiJ,OAAOA,CAACjJ,GAAG,EAAE;IAChBkJ,MAAM,CAACC,QAAQ,CAACC,IAAI,GAAGpJ,GAAG;EAC9B;EACA,OAAOqJ,QAAQA,CAACV,IAAI,EAAE1K,MAAM,GAAG,IAAI,EAAE;IACjC,MAAM+B,GAAG,GAAGwH,GAAG,CAACM,cAAc,CAACa,IAAI,EAAE1K,MAAM,CAAC;IAC5CuJ,GAAG,CAACyB,OAAO,CAACjJ,GAAG,CAAC;EACpB;;EAEA;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;;EAEI;EACA;EACA,aAAasJ,SAASA,CAAA,EAAG;IACrB,IAAIrJ,QAAQ,GAAG,CAAC,CAAC;IACjBA,QAAQ,CAACsJ,YAAY,CAAC,GAAG3I,GAAG,CAAC6C,kBAAkB,CAAC,CAAC;IACjD,OAAO,MAAM+D,GAAG,CAACG,OAAO,CAAC6B,iBAAiB,EAAE,MAAM,EAAEvJ,QAAQ,CAAC;EACjE;EACA,aAAawJ,SAASA,CAACC,KAAK,EAAEC,WAAW,EAAEC,OAAO,EAAE;IAChD,IAAIC,WAAW,GAAG,CAAC,CAAC;IACpBA,WAAW,CAACC,eAAe,CAAC,GAAGlJ,GAAG,CAAC2B,gBAAgB,CAACoH,WAAW,CAAC;IAChEE,WAAW,CAACE,QAAQ,CAAC,GAAGL,KAAK;IAC7BG,WAAW,CAACG,WAAW,CAAC,GAAGJ,OAAO;IAClC,OAAO,MAAMpC,GAAG,CAACG,OAAO,CAACsC,gBAAgB,EAAE,MAAM,EAAEJ,WAAW,CAAC;EACnE;;EAEA;EACA,aAAaK,QAAQA,CAACC,IAAI,EAAER,WAAW,EAAEC,OAAO,EAAE;IAC9C,IAAIC,WAAW,GAAG,CAAC,CAAC;IACpBA,WAAW,CAACC,eAAe,CAAC,GAAGlJ,GAAG,CAAC2B,gBAAgB,CAACoH,WAAW,CAAC;IAChEE,WAAW,CAACO,QAAQ,CAAC,GAAGD,IAAI;IAC5BN,WAAW,CAACG,WAAW,CAAC,GAAGJ,OAAO;IAClC,OAAO,MAAMpC,GAAG,CAACG,OAAO,CAAC0C,YAAY,EAAE,MAAM,EAAER,WAAW,CAAC;EAC/D;EAEA,aAAaS,cAAcA,CAACC,MAAM,EAAE;IAChC,MAAMvK,GAAG,GAAG,iBAAiBuK,MAAM,UAAU;IAC7C,OAAO,MAAM/C,GAAG,CAACG,OAAO,CAAC3H,GAAG,EAAE,KAAK,CAAC;EACxC;EACA,aAAawK,eAAeA,CAACC,OAAO,EAAEd,WAAW,EAAEC,OAAO,EAAE;IACxD,IAAIC,WAAW,GAAG,CAAC,CAAC;IACpBA,WAAW,CAACC,eAAe,CAAC,GAAGlJ,GAAG,CAAC2B,gBAAgB,CAACoH,WAAW,CAAC;IAChEE,WAAW,CAACa,UAAU,CAAC,GAAGD,OAAO;IACjCZ,WAAW,CAACG,WAAW,CAAC,GAAGJ,OAAO;IAClC,OAAO,MAAMpC,GAAG,CAACG,OAAO,CAACgD,kBAAkB,EAAE,MAAM,EAAEd,WAAW,CAAC;EACrE;EAEA,aAAae,aAAaA,CAACL,MAAM,EAAE;IAC/B,MAAMvK,GAAG,GAAG,iBAAiBuK,MAAM,SAAS;IAC5C,OAAO,MAAM/C,GAAG,CAACG,OAAO,CAAC3H,GAAG,EAAE,KAAK,CAAC;EACxC;EAEA,aAAa6K,oBAAoBA,CAACN,MAAM,EAAE;IACtC,MAAMvK,GAAG,GAAG,iBAAiBuK,MAAM,iBAAiB;IACpD,OAAO,MAAM/C,GAAG,CAACG,OAAO,CAAC3H,GAAG,EAAE,KAAK,CAAC;EACxC;EACA,aAAa8K,0BAA0BA,CAACC,MAAM,EAAEC,OAAO,EAAErB,WAAW,EAAEC,OAAO,EAAE;IAC3E,IAAIC,WAAW,GAAG,CAAC,CAAC;IACpBA,WAAW,CAACC,eAAe,CAAC,GAAGlJ,GAAG,CAAC2B,gBAAgB,CAACoH,WAAW,CAAC;IAChEE,WAAW,CAACoB,UAAU,CAAC,GAAGD,OAAO;IACjCnB,WAAW,CAACqB,SAAS,CAAC,GAAGH,MAAM;IAC/BlB,WAAW,CAACG,WAAW,CAAC,GAAGJ,OAAO;IAClC,OAAO,MAAMpC,GAAG,CAACG,OAAO,CAACwD,6BAA6B,EAAE,MAAM,EAAEtB,WAAW,CAAC;EAChF;AAGJ,C;;ACzHgC;AAEjB,MAAMuB,eAAe,CAAC;EACjC,OAAOC,kCAAkCA,CAACC,UAAU,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,aAAa,GAAG,IAAI,EAAE;IAC3F,OAAO;MACH1E,IAAI,EAAEuE,UAAU,CAACC,OAAO,CAAC;MACzB3N,KAAK,EAAE0N,UAAU,CAACE,QAAQ,CAAC;MAC3BtE,QAAQ,EAAGoE,UAAU,CAACE,QAAQ,CAAC,IAAIC;IACvC,CAAC;EACL;EACA,OAAOC,2BAA2BA,CAACJ,UAAU,EAAEG,aAAa,GAAG,IAAI,EAAE;IACjE,IAAIF,OAAO,GAAGD,UAAU,CAAC/E,sBAAsB,CAAC;IAChD,IAAIiF,QAAQ,GAAGF,UAAU,CAAC7E,uBAAuB,CAAC;IAClD;IACA,OAAO2E,eAAe,CAACC,kCAAkC,CAACC,UAAU,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,aAAa,CAAC;EAC3G;EACA,OAAOE,aAAaA,CAACL,UAAU,EAAE;IAC7B,OAAOA,UAAU,IAAI,IAAI,GAAG,EAAE,GAAGA,UAAU,CAACA,UAAU,CAAC/E,sBAAsB,CAAC,CAAC;EACnF;EACA,OAAOqF,8BAA8BA,CAACC,MAAM,EAAEC,KAAK,EAAE;IACjD,IAAIC,WAAW,GAAG,EAAE;IACpB,IAAIC,GAAG,GAAGF,KAAK,CAACG,KAAK,CAAC,GAAG,CAAC;IAC1B,KAAK,IAAIC,EAAE,IAAIF,GAAG,EAAE;MAChBD,WAAW,CAACI,IAAI,CAACN,MAAM,CAACK,EAAE,CAAC,CAAC;IAChC;IACA,OAAOH,WAAW;EACtB;AACJ,C;;AC3Be,MAAMK,MAAM,CAAC;EACxB,OAAOC,sBAAsBA,CAACC,eAAe,EAAEC,gBAAgB,EAAEC,YAAY,EAAE;IAC3E1N,QAAQ,CAACC,gBAAgB,CAACuN,eAAe,CAAC,CAACG,OAAO,CAAC,UAAS3L,OAAO,EAAE;MACjE,IAAIA,OAAO,CAACyD,SAAS,CAACC,QAAQ,CAAC+H,gBAAgB,CAAC,EAAE;MAClDC,YAAY,CAAC1L,OAAO,CAAC;MACrBA,OAAO,CAACyD,SAAS,CAACE,GAAG,CAAC8H,gBAAgB,CAAC;IAC3C,CAAC,CAAC;EACN;EACA,OAAOG,kBAAkBA,CAACC,SAAS,EAAE1K,QAAQ,EAAEhC,QAAQ,EAAE;IACrDmM,MAAM,CAACC,sBAAsB,CAACpK,QAAQ,EAAE2K,eAAe,EAAG9L,OAAO,IAAK;MAClEA,OAAO,CAAC+L,gBAAgB,CAACF,SAAS,EAAGG,KAAK,IAAK;QAC3CA,KAAK,CAACC,eAAe,CAAC,CAAC;QACvB9M,QAAQ,CAAC6M,KAAK,EAAEhM,OAAO,CAAC;MAC5B,CAAC,CAAC;IACN,CAAC,CAAC;EACN;AACJ,C;;AChByC;AAE1B,MAAMkM,YAAY,CAAC;EAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAEI,OAAOC,eAAeA,CAACnN,GAAG,EAAE;IACxB,OAAO1B,IAAI,CAAC8O,KAAK,CAACC,YAAY,CAACC,OAAO,CAACtN,GAAG,CAAC,CAAC;EAChD;EAEA,OAAOuN,eAAeA,CAACvN,GAAG,EAAEwN,KAAK,EAAE;IAC/BH,YAAY,CAACI,OAAO,CAACzN,GAAG,EAAE1B,IAAI,CAACC,SAAS,CAACiP,KAAK,CAAC,CAAC;EACpD;;EAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAM3M,WAAK,CAAC;EACvB,OAAO6M,eAAeA,CAACC,IAAI,EAAE;IACzB,IAAIC,IAAI,GAAG,EAAE;IACb,KAAK,IAAI5N,GAAG,IAAI2N,IAAI,EAAE;MAClBC,IAAI,CAACvB,IAAI,CAACsB,IAAI,CAAC3N,GAAG,CAAC,CAAC;IACxB;IACA,OAAO4N,IAAI;EACf;EACA,OAAOC,oCAAoCA,CAACC,OAAO,EAAE;IACjD,IAAIC,WAAW,CAACC,aAAa,IAAI,MAAM,EAAE;MACrCpF,OAAO,CAACqF,GAAG,CAACH,OAAO,CAAC;IACxB;EACJ;AACJ,C;;ACtB4C;AAE7B,MAAMI,cAAc,CAAC;EAChC,OAAOC,MAAMA,CAACC,eAAe,EAAE;IAC3B9B,MAAM,CAACC,sBAAsB,CAAC8B,gBAAgB,GAAG,UAAU,GAAGC,UAAU,EAAExB,eAAe,EAAGyB,YAAY,IAAK;MACzGA,YAAY,CAACxB,gBAAgB,CAAC,OAAO,EAAE,MAAM;QACzC,IAAIyB,OAAO,GAAGxP,QAAQ,CAACoE,aAAa,CAACiL,gBAAgB,CAAC;QACtDG,OAAO,CAACC,KAAK,CAACC,UAAU,GAAG,QAAQ;MACvC,CAAC,CAAC;IACN,CAAC,CAAC;IACFpC,MAAM,CAACC,sBAAsB,CAAC8B,gBAAgB,GAAG,UAAU,GAAGM,UAAU,EAAE7B,eAAe,EAAG8B,aAAa,IAAK;MAC1GA,aAAa,CAAC7B,gBAAgB,CAAC,OAAO,EAAE,MAAM;QAC1C,IAAIyB,OAAO,GAAGxP,QAAQ,CAACoE,aAAa,CAACiL,gBAAgB,CAAC;QACtD,IAAIQ,QAAQ,GAAGL,OAAO,CAACpL,aAAa,CAAC,UAAU,CAAC;QAChDoL,OAAO,CAACC,KAAK,CAACC,UAAU,GAAG,QAAQ;QACnCN,eAAe,CAACS,QAAQ,CAAC/Q,KAAK,CAAC;MACnC,CAAC,CAAC;IACN,CAAC,CAAC;EACN;EACA,OAAOgR,IAAIA,CAAA,EAAG;IACV,IAAIN,OAAO,GAAGxP,QAAQ,CAACoE,aAAa,CAACiL,gBAAgB,CAAC;IACtDG,OAAO,CAAC/J,SAAS,CAACG,MAAM,CAACmK,eAAe,CAAC;IACzCP,OAAO,CAACC,KAAK,CAACC,UAAU,GAAG,SAAS;EACxC;AACJ,C;;ACxB0E;AACpC;AACa;AACvB;AACA;AACQ;AAE2C;AACJ;AAC7B;AAE/B,MAAMO,QAAQ,CAAC;EAC1BC,WAAWA,CAACC,MAAM,EAAE;IAChB,IAAI,CAACA,MAAM,EAAE;MACT,MAAM,IAAI3G,KAAK,CAAC,oBAAoB,CAAC;IACzC,CAAC,MACI;MACD3H,WAAK,CAACgN,oCAAoC,CAAC,4BAA4B,EAAEsB,MAAM,CAAC;IACpF;IACA,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,KAAK,GAAGC,gBAAgB;IAC7B,IAAI,IAAI,CAACH,WAAW,KAAKD,QAAQ,EAAE;MAC/B,MAAM,IAAIzG,KAAK,CAAC,mCAAmC,CAAC;IACxD;IAEA,IAAI,CAAC,IAAI,CAAC0G,WAAW,CAACrG,IAAI,EAAE;MACxB,MAAM,IAAIL,KAAK,CAAC,SAAS,IAAI,CAAC0G,WAAW,CAACI,IAAI,qCAAqC,CAAC;IACxF;EACJ;EAEAC,UAAUA,CAAA,EAAG;IACT,MAAM,IAAI/G,KAAK,CAAC,4CAA4C,CAAC;EACjE;EAEAgH,gBAAgBA,CAAA,EAAG;IACf,IAAI,CAACC,iBAAiB,CAAC,CAAC;IACxB,IAAI,CAACC,oBAAoB,CAAC,CAAC;EAC/B;EAEAD,iBAAiBA,CAAA,EAAG;IAChB5O,WAAK,CAACgN,oCAAoC,CAAC,eAAe,GAAG,IAAI,CAACuB,KAAK,GAAG,OAAO,CAAC;EACtF;EAEAM,oBAAoBA,CAAA,EAAG;IACnB;IACA,IAAI,CAACC,WAAW,CAAC,CAAC;IAClB,IAAI,CAACC,gBAAgB,CAAC,CAAC;IACvB,IAAI,CAACC,cAAc,CAAC,CAAC;EACzB;EACAF,WAAWA,CAAA,EAAG;IACVrD,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAE,GAAG,GAAGkD,aAAa,GAAG,GAAG,GAAG,GAAG,GAAGC,QAAQ,EAAE,CAAC/C,KAAK,EAAEhM,OAAO,KAAK;MAC/FH,WAAK,CAACgN,oCAAoC,CAAC,eAAe,CAAC;MAC3D,IAAI,CAACsB,MAAM,CAACa,cAAc,CAAClH,YAAY,CAAC;IAC5C,CAAC,CAAC;EACN;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI8G,gBAAgBA,CAAA,EAAG;IACftD,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAEqD,iBAAiB,EAAE,CAACjD,KAAK,EAAEhM,OAAO,KAAK;MACtE,IAAIkP,gBAAgB,GAAGlR,QAAQ,CAACoE,aAAa,CAAC+M,kBAAkB,CAAC;MACjE,IAAID,gBAAgB,CAACzL,SAAS,CAACC,QAAQ,CAACqK,eAAe,CAAC,EAAE;QACtDmB,gBAAgB,CAACzL,SAAS,CAACG,MAAM,CAACmK,eAAe,CAAC;QAClDmB,gBAAgB,CAACzL,SAAS,CAACE,GAAG,CAACyL,YAAY,CAAC;MAChD,CAAC,MAAM;QACHF,gBAAgB,CAACzL,SAAS,CAACG,MAAM,CAACwL,YAAY,CAAC;QAC/CF,gBAAgB,CAACzL,SAAS,CAACE,GAAG,CAACoK,eAAe,CAAC;MACnD;IACJ,CAAC,CAAC;IAEF,IAAI,CAACsB,2BAA2B,CAAC,CAAC;IAClC,IAAI,CAACC,0BAA0B,CAAC,CAAC;IACjC,IAAI,CAACC,yBAAyB,CAAC,CAAC;EACpC;EACAC,gBAAgBA,CAACC,cAAc,EAAE;IAC7BnE,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAE6D,cAAc,EAAE,CAACzD,KAAK,EAAE0D,MAAM,KAAK;MAClE,IAAIC,QAAQ,GAAGF,cAAc,CAACpN,YAAY,CAAC,MAAM,CAAC;MAClD,IAAI,CAAC8L,MAAM,CAACa,cAAc,CAACW,QAAQ,CAAC;IACxC,CAAC,CAAC;EACN;EACAN,2BAA2BA,CAAA,EAAG;IAC1B;EAAA;EAEJC,0BAA0BA,CAAA,EAAG;IACzB;EAAA;EAEJC,yBAAyBA,CAAA,EAAG;IACxBjE,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAE,GAAG,GAAGgE,gBAAgB,EAAE,CAAC5D,KAAK,EAAE6D,SAAS,KAAK;MAC7E7D,KAAK,CAAC8D,cAAc,CAAC,CAAC;MACtB9D,KAAK,CAACC,eAAe,CAAC,CAAC;MACvB,IAAI,CAAC8D,KAAK,CAAC,CAAC;MACZrJ,GAAG,CAAC8B,SAAS,CAAC,CAAC,CACVwH,IAAI,CAAE3I,QAAQ,IAAK;QACpB,IAAIA,QAAQ,CAAC4I,OAAO,EAAE;UAClB7H,MAAM,CAACC,QAAQ,CAACC,IAAI,GAAGjB,QAAQ,CAACoB,YAAY,CAAC;QACjD,CAAC,MAAM;UACH3I,GAAG,CAACqF,UAAU,CAAC,OAAO,EAAEkC,QAAQ,CAAC6I,OAAO,CAAC;QAC7C;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EACN;EAEArB,cAAcA,CAAA,EAAG;IACb,IAAI,CAACsB,mBAAmB,CAAC9C,gBAAgB,CAAC;IAC1C,IAAI,CAAC8C,mBAAmB,CAACC,cAAc,CAAC;EAC5C;EAEAD,mBAAmBA,CAACE,SAAS,EAAE;IAC3B/E,MAAM,CAACC,sBAAsB,CAAC8E,SAAS,EAAEvE,eAAe,EAAG0B,OAAO,IAAK;MACnEA,OAAO,CAACpL,aAAa,CAAC,SAAS,GAAGkL,UAAU,CAAC,CAACvB,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IAAK;QAC/EA,KAAK,CAACC,eAAe,CAAC,CAAC;QACvBuB,OAAO,CAACC,KAAK,CAAC6C,OAAO,GAAG,MAAM;MAClC,CAAC,CAAC;IACN,CAAC,CAAC;EACN;EAEAC,gBAAgBA,CAAA,EAAG;IACfjF,MAAM,CAACC,sBAAsB,CAAC,GAAG,GAAGiF,aAAa,GAAG,GAAG,GAAGC,QAAQ,GAAG,GAAG,GAAGnD,UAAU,GAAG,UAAU,GAAGmD,QAAQ,EAAE3E,eAAe,EAAG4D,MAAM,IAAK;MACxIA,MAAM,CAAC3D,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IAAK;QACxCA,KAAK,CAACC,eAAe,CAAC,CAAC;QACvByD,MAAM,GAAG1D,KAAK,CAAC0E,MAAM;QACrB,IAAIhB,MAAM,CAACjM,SAAS,CAACC,QAAQ,CAACqK,eAAe,CAAC,EAAE;QAChDlO,WAAK,CAACgN,oCAAoC,CAAC,eAAe,EAAE,IAAI,CAACuB,KAAK,CAAC;QACvElB,cAAc,CAACY,IAAI,CAAC,CAAC;MACzB,CAAC,CAAC;IACN,CAAC,CAAC;EACN;EAEAiC,KAAKA,CAAA,EAAG;IACJlQ,WAAK,CAACgN,oCAAoC,CAAC,UAAU,GAAG,IAAI,CAACuB,KAAK,GAAG,OAAO,CAAC;IAC7E,IAAI,IAAI,CAACF,WAAW,KAAKD,QAAQ,EAAE;MAC/B,MAAM,IAAIzG,KAAK,CAAC,gCAAgC,CAAC;IACrD;EACJ;EACAmJ,mBAAmBA,CAACC,QAAQ,EAAE;IAC1B1E,YAAY,CAACK,eAAe,CAAC,IAAI,CAAC1E,IAAI,EAAE+I,QAAQ,CAAC;EACrD;EACAC,mBAAmBA,CAAA,EAAG;IAClB,OAAO3E,YAAY,CAACC,eAAe,CAAC,IAAI,CAACtE,IAAI,CAAC;EAClD;EAEAiJ,2BAA2BA,CAAChD,IAAI,EAAEiD,uBAAuB,GAAG,IAAI,EAAE;IAAE;IAChE,IAAI1U,UAAU,CAACC,OAAO,CAACyU,uBAAuB,CAAC,EAAEA,uBAAuB,GAAG,GAAG,GAAGP,aAAa,GAAG,GAAG,GAAGC,QAAQ,GAAG,GAAG,GAAGnD,UAAU;IAClI,IAAI0D,UAAU,GAAGhT,QAAQ,CAACoE,aAAa,CAAC2O,uBAAuB,GAAG,GAAG,GAAGE,YAAY,CAAC;IACrF,IAAID,UAAU,IAAI,IAAI,EAAE;IACxB,IAAIzD,YAAY,GAAGvP,QAAQ,CAACoE,aAAa,CAAC2O,uBAAuB,GAAG,GAAG,GAAGG,cAAc,CAAC;IACzFrR,WAAK,CAACgN,oCAAoC,CAAC;MAAEiB,IAAI;MAAEiD,uBAAuB;MAAExD,YAAY;MAAEyD;IAAW,CAAC,CAAC;IACvG,IAAIlD,IAAI,EAAE;MACNP,YAAY,CAAC9J,SAAS,CAACG,MAAM,CAACmK,eAAe,CAAC;MAC9CiD,UAAU,CAACvN,SAAS,CAACG,MAAM,CAACmK,eAAe,CAAC;MAC5ClO,WAAK,CAACgN,oCAAoC,CAAC,iBAAiB,CAAC;IACjE,CAAC,MAAM;MACHU,YAAY,CAAC9J,SAAS,CAACE,GAAG,CAACoK,eAAe,CAAC;MAC3CiD,UAAU,CAACvN,SAAS,CAACE,GAAG,CAACoK,eAAe,CAAC;MACzClO,WAAK,CAACgN,oCAAoC,CAAC,gBAAgB,CAAC;IAChE;EACJ;EAEA,OAAOsE,aAAaA,CAACjP,MAAM,EAAE;IACzB,IAAIgB,OAAO,GAAGpD,GAAG,CAACkD,4BAA4B,CAACd,MAAM,CAAC;IACtD,IAAIgB,OAAO,EAAElF,QAAQ,CAACC,gBAAgB,CAACmT,WAAW,GAAG,WAAW,CAAC,CAACxN,MAAM,CAAC,CAAC;IAC1E,OAAOV,OAAO;EAClB;AAEJ,C;;AC3K4C;AAE7B,MAAM8K,YAAY,CAAC;EAC9B,OAAOb,MAAMA,CAAA,EAAG;IACZ7B,MAAM,CAACC,sBAAsB,CAAC6E,cAAc,GAAG,UAAU,GAAG9C,UAAU,EAAExB,eAAe,EAAGyB,YAAY,IAAK;MACvGA,YAAY,CAACxB,gBAAgB,CAAC,OAAO,EAAE,MAAM;QACzC,IAAIyB,OAAO,GAAGxP,QAAQ,CAACoE,aAAa,CAACgO,cAAc,CAAC;QACpD5C,OAAO,CAACC,KAAK,CAACC,UAAU,GAAG,QAAQ;MACvC,CAAC,CAAC;IACN,CAAC,CAAC;EACN;EACA,OAAOI,IAAIA,CAACuD,QAAQ,EAAE;IAClB,IAAI7D,OAAO,GAAGxP,QAAQ,CAACoE,aAAa,CAACgO,cAAc,CAAC;IACpD,IAAIkB,UAAU,GAAG9D,OAAO,CAACpL,aAAa,CAACmP,YAAY,CAAC;IACpDD,UAAU,CAAC7K,SAAS,GAAG4K,QAAQ;IAC/B7D,OAAO,CAACC,KAAK,CAACC,UAAU,GAAG,SAAS;EACxC;AACJ,C;;ACjB0E;AACpC;AACa;AACL;AACb;AACL;AACA;AACQ;AAE2C;AACJ;AAE5D,MAAM8D,aAAa,SAASvD,QAAQ,CAAC;EAChD;EACA;EACA;;EAEAC,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;IACb,IAAI,CAACsD,cAAc,GAAG,IAAI;IAC1B,IAAI,CAACC,UAAU,GAAG,IAAI;IACtB,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,UAAU,GAAG,IAAI;IAEtB,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACC,IAAI,CAAC,IAAI,CAAC;EAClE;EAEAxD,UAAUA,CAACyD,UAAU,GAAG,KAAK,EAAE;IAC3B,MAAM,IAAIxK,KAAK,CAAC,qCAAqC,CAAC;EAC1D;EACAgH,gBAAgBA,CAACwD,UAAU,GAAG,KAAK,EAAEC,eAAe,GAAG,KAAK,EAAE;IAC1D,IAAI,CAACD,UAAU,EAAE;MACb,KAAK,CAACxD,gBAAgB,CAAC,CAAC;MACxB,IAAI,CAAC0D,aAAa,CAAC,CAAC;MACpB,IAAI,CAACC,uBAAuB,CAAC,CAAC;MAC9B,IAAI,CAACC,eAAe,CAAC,CAAC;MACtBlF,cAAc,CAACC,MAAM,CAAC,MAAM;QACxB,IAAI8E,eAAe,EAAE;UACjB,IAAI,CAACI,kCAAkC,CAAC,CAAC;QAC7C,CAAC,MACI;UACD,IAAI,CAACC,qBAAqB,CAAC,CAAC;QAChC;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAI1B,QAAQ,GAAG,IAAI,CAACC,mBAAmB,CAAC,CAAC;MACzC,IAAI0B,OAAO,GAAG3B,QAAQ,CAAC5H,eAAe,CAAC;MACvC,IAAIH,WAAW,GAAG2I,aAAa,CAACgB,cAAc,CAAC,CAAC;MAChD,IAAIC,cAAc,GAAG3S,GAAG,CAAC2B,gBAAgB,CAACoH,WAAW,CAAC;MACtD,IAAI,CAACxM,UAAU,CAACoC,aAAa,CAAC8T,OAAO,EAAEE,cAAc,CAAC,EAAE;QACpD,IAAI,CAACC,sBAAsB,CAAC,CAAC;MACjC;IACJ;EACJ;EACAR,aAAaA,CAAA,EAAG;IACZ,IAAI,IAAI,CAAChE,WAAW,KAAKsD,aAAa,EAAE;MACpC,MAAM,IAAIhK,KAAK,CAAC,kEAAkE,CAAC;IACvF;EACJ;EACAmL,mBAAmBA,CAAA,EAAG;IAClB,IAAI,CAACC,wBAAwB,CAAC,CAAC;IAC/B,IAAI,CAACC,sBAAsB,CAAC,CAAC;EACjC;EACAC,kBAAkBA,CAAA,EAAG;IACjB,IAAIC,cAAc,GAAGC,aAAa,GAAG,IAAI,GAAGC,cAAc;IAC1D,IAAIC,eAAe,GAAGlV,QAAQ,CAACoE,aAAa,CAAC2Q,cAAc,CAAC;IAC5DG,eAAe,CAACC,eAAe,CAAC,IAAI,CAAC;IACrC,IAAIC,SAAS,GAAGF,eAAe,CAAC3R,aAAa;IAC7C,IAAI8R,SAAS,GAAIvT,GAAG,CAACyE,gCAAgC,CAAC6O,SAAS,CAAC,IAAI,MAAO;IAC3E,IAAIE,eAAe,GAAGtV,QAAQ,CAACoE,aAAa,CAAC4Q,aAAa,GAAG,OAAO,GAAGC,cAAc,GAAG,GAAG,GAAGpR,kBAAkB,GAAG,OAAO,GAAGoR,cAAc,CAAC;IAC5IK,eAAe,CAACnT,YAAY,CAAC,IAAI,EAAE8S,cAAc,CAAC;IAClD,IAAII,SAAS,EAAEC,eAAe,CAAC7P,SAAS,CAACE,GAAG,CAACW,aAAa,CAAC;IAE3DgH,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAEmH,cAAc,EAAE,CAAC/G,KAAK,EAAEuH,YAAY,KAAK;MACxE1T,WAAK,CAACgN,oCAAoC,CAAC;QAAE0G;MAAa,CAAC,CAAC;MAC5D1T,WAAK,CAACgN,oCAAoC,CAAC;QAAE,CAAC0G,YAAY,CAAC/S,OAAO,GAAG+S,YAAY,CAAC/S;MAAQ,CAAC,CAAC;MAC5F,IAAIgT,UAAU,GAAID,YAAY,CAAC/S,OAAO,CAACC,WAAW,CAAC,CAAC,IAAI,KAAK,GAAI8S,YAAY,GAAGA,YAAY,CAAChS,aAAa;MAC1G,IAAIkS,UAAU,GAAGD,UAAU,CAAC/P,SAAS,CAACC,QAAQ,CAACY,aAAa,CAAC;MAC7D,IAAImP,UAAU,EAAE;QACZD,UAAU,CAAC/P,SAAS,CAACG,MAAM,CAACU,aAAa,CAAC;MAC9C,CAAC,MACI;QACDkP,UAAU,CAAC/P,SAAS,CAACE,GAAG,CAACW,aAAa,CAAC;MAC3C;MACA,OAAO,IAAI,CAACoP,kBAAkB,CAAC1H,KAAK,EAAEuH,YAAY,CAAC;IACvD,CAAC,CAAC;IACF,IAAIrR,MAAM,GAAGlE,QAAQ,CAACoE,aAAa,CAAC2Q,cAAc,CAAC;IACnD,IAAIY,mBAAmB,GAAG7T,GAAG,CAACgB,sBAAsB,CAACoB,MAAM,CAAC;IAC5DA,MAAM,CAAC/B,YAAY,CAACC,gBAAgB,EAAEuT,mBAAmB,CAAC;IAC1DzR,MAAM,CAAC/B,YAAY,CAACE,iBAAiB,EAAEsT,mBAAmB,CAAC;EAC/D;EACAC,YAAYA,CAACC,UAAU,EAAEC,OAAO,GAAGA,CAAC9H,KAAK,EAAE9J,MAAM,KAAK;IAAE,OAAO,IAAI,CAACwR,kBAAkB,CAAC1H,KAAK,EAAE9J,MAAM,CAAC;EAAE,CAAC,EAAE;IACtG,IAAI6Q,cAAc,GAAGC,aAAa,GAAG,IAAI,GAAGa,UAAU;IACtDvI,MAAM,CAACM,kBAAkB,CAAC,QAAQ,EAAEmH,cAAc,EAAEe,OAAO,CAAC;IAC5D,IAAI5R,MAAM,GAAGlE,QAAQ,CAACoE,aAAa,CAAC2Q,cAAc,CAAC;IACnD,IAAIY,mBAAmB,GAAG7T,GAAG,CAACgB,sBAAsB,CAACoB,MAAM,CAAC;IAC5DA,MAAM,CAAC/B,YAAY,CAACC,gBAAgB,EAAEuT,mBAAmB,CAAC;IAC1DzR,MAAM,CAAC/B,YAAY,CAACE,iBAAiB,EAAEsT,mBAAmB,CAAC;EAC/D;EACAD,kBAAkBA,CAAC1H,KAAK,EAAE9J,MAAM,EAAE;IAC9B,IAAIiP,aAAa,GAAGrR,GAAG,CAACkD,4BAA4B,CAACd,MAAM,CAAC;IAC5D,IAAI2G,WAAW,GAAG2I,aAAa,CAACgB,cAAc,CAAC,CAAC;IAChD,IAAIuB,eAAe,GAAG5C,aAAa,IAAIrR,GAAG,CAAC+D,yBAAyB,CAACgF,WAAW,CAAC;IACjF,IAAImL,KAAK,GAAGhW,QAAQ,CAACoE,aAAa,CAACgP,WAAW,GAAG,QAAQ,CAAC;IAC1D,IAAI6C,IAAI,GAAGD,KAAK,CAAC/V,gBAAgB,CAAC,aAAa,CAAC;IAChDgW,IAAI,CAACtI,OAAO,CAAEuI,GAAG,IAAK;MAClB,IAAIH,eAAe,IAAI,CAACG,GAAG,CAACzQ,SAAS,CAACC,QAAQ,CAACqK,eAAe,CAAC,EAAEmG,GAAG,CAACzQ,SAAS,CAACE,GAAG,CAACoK,eAAe,CAAC;MACnG,IAAI,CAACgG,eAAe,IAAIG,GAAG,CAACzQ,SAAS,CAACC,QAAQ,CAACqK,eAAe,CAAC,EAAE;QAC7DmG,GAAG,CAACzQ,SAAS,CAACG,MAAM,CAACmK,eAAe,CAAC;QACrC,IAAIoG,WAAW,GAAGD,GAAG,CAACjW,gBAAgB,CAAC,QAAQ,GAAGoF,SAAS,CAAC;QAC5D8Q,WAAW,CAACxI,OAAO,CAAEyI,UAAU,IAAK;UAChCA,UAAU,CAACtX,KAAK,GAAGgD,GAAG,CAACsE,+BAA+B,CAACgQ,UAAU,CAAC;QACtE,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IACF,IAAIL,eAAe,EAAE;MACjB;AACZ;AACA;AACA;AACA;MACYC,KAAK,CAACtR,SAAS,GAAG,wDAAwD,GAAGsR,KAAK,CAACtR,SAAS;MAC5F,IAAI,CAACsR,KAAK,CAACvQ,SAAS,CAACC,QAAQ,CAACqK,eAAe,CAAC,EAAEiG,KAAK,CAACvQ,SAAS,CAACE,GAAG,CAACoK,eAAe,CAAC;IACxF,CAAC,MACI;MACD,IAAIsG,YAAY,GAAGL,KAAK,CAAC5R,aAAa,CAAC,cAAc,CAAC;MACtD,IAAIiS,YAAY,IAAI,IAAI,EAAEA,YAAY,CAACzQ,MAAM,CAAC,CAAC;MAC/C,IAAIoQ,KAAK,CAACvQ,SAAS,CAACC,QAAQ,CAACqK,eAAe,CAAC,EAAEiG,KAAK,CAACvQ,SAAS,CAACG,MAAM,CAACmK,eAAe,CAAC;MACtF,IAAIuG,mBAAmB,GAAGN,KAAK,CAAC/V,gBAAgB,CAAC,GAAG,GAAG6N,eAAe,CAAC;MACvEwI,mBAAmB,CAAC3I,OAAO,CAAE4I,kBAAkB,IAAK;QAChDA,kBAAkB,CAAC9Q,SAAS,CAACG,MAAM,CAACkI,eAAe,CAAC;MACxD,CAAC,CAAC;MACF,IAAI,CAACsG,eAAe,CAAC,CAAC;IAC1B;IACA,IAAI,CAACoC,oCAAoC,CAAC,CAAC;EAC/C;EACAC,sBAAsBA,CAAA,EAAG;IACrB,IAAI,CAACb,YAAY,CAACc,cAAc,CAAC;EACrC;EACA9B,wBAAwBA,CAAA,EAAG;IACvBtH,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAE+I,oBAAoB,EAAE,CAAC3I,KAAK,EAAE0D,MAAM,KAAK;MACxE1D,KAAK,CAACC,eAAe,CAAC,CAAC;MACvB,IAAI,CAACyG,sBAAsB,CAAC,CAAC;IACjC,CAAC,CAAC;EACN;EACAG,sBAAsBA,CAAA,EAAG;IACrB,IAAI,CAACe,YAAY,CAACgB,UAAU,CAAC;EACjC;EACAC,2BAA2BA,CAAA,EAAG;IAC1B,IAAI,CAACjB,YAAY,CAACkB,qBAAqB,EAAE,CAAC9I,KAAK,EAAE+I,qBAAqB,KAAK;MACvE,IAAI,CAACrB,kBAAkB,CAAC,CAAC;MACzB,IAAIvC,aAAa,GAAG4D,qBAAqB,CAACtR,SAAS,CAACC,QAAQ,CAACL,SAAS,CAAC;MACvE,IAAI2R,iBAAiB,GAAGlV,GAAG,CAACgB,sBAAsB,CAACiU,qBAAqB,CAAC;MACzEnN,OAAO,CAACqF,GAAG,CAAC,0BAA0B,CAAC;MACvCrF,OAAO,CAACqF,GAAG,CAACpN,WAAK,CAAC6M,eAAe,CAACuI,cAAc,CAAC,CAAC;MAClD,IAAIC,kBAAkB,GAAGrV,WAAK,CAAC6M,eAAe,CAACuI,cAAc,CAAC,CAAC/S,MAAM,CAACiT,OAAO,IAAIA,OAAO,CAACL,qBAAqB,CAAC,IAAIE,iBAAiB,CAAC;MACrI,IAAII,cAAc,GAAGF,kBAAkB,CAACG,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAC5P,QAAQ,CAAC,CAAC8P,aAAa,CAACD,CAAC,CAAC7P,QAAQ,CAAC,CAAC,CAAC;MAC9F,IAAI+P,aAAa,GAAGzX,QAAQ,CAACoE,aAAa,CAAC4Q,aAAa,GAAG,IAAI,GAAG0C,WAAW,CAAC;MAC9E,IAAIC,iBAAiB,GAAG7V,GAAG,CAACyE,gCAAgC,CAACkR,aAAa,CAAC;MAC3EA,aAAa,CAAC/S,SAAS,GAAG,EAAE;MAC5B,IAAIsD,UAAU,EAAEE,MAAM;MACtBA,MAAM,GAAGpG,GAAG,CAACiG,YAAY,CAAC,IAAI,CAAC;MAC/B0P,aAAa,CAACG,WAAW,CAAC1P,MAAM,CAAC;MACjCkP,cAAc,CAACzJ,OAAO,CAAEwJ,OAAO,IAAK;QAChCnP,UAAU,GAAGsE,eAAe,CAACM,2BAA2B,CAACuK,OAAO,EAAEQ,iBAAiB,CAAC;QACpFzP,MAAM,GAAGpG,GAAG,CAACiG,YAAY,CAACC,UAAU,CAAC;QACrCyP,aAAa,CAACG,WAAW,CAAC1P,MAAM,CAAC;MACrC,CAAC,CAAC;MACFuP,aAAa,CAACI,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,CAAC,CAAC;MAChD,OAAO3E,aAAa;IACxB,CAAC,CAAC;EACN;EACA4E,mBAAmBA,CAAA,EAAG;IAClB,IAAI,CAACnC,YAAY,CAACoC,aAAa,CAAC;EACpC;EACAC,oBAAoBA,CAAA,EAAG;IACnB,IAAI,CAACrC,YAAY,CAACsC,cAAc,CAAC;EACrC;EACA;AACJ;AACA;AACA;AACA;AACA;EACI,OAAO1D,cAAcA,CAAA,EAAG;IACpB,OAAOxU,QAAQ,CAACoE,aAAa,CAAC4Q,aAAa,CAAC;EAChD;EACAN,sBAAsBA,CAAA,EAAG;IACrB,IAAI7J,WAAW,GAAG2I,aAAa,CAACgB,cAAc,CAAC,CAAC;IAChD,IAAI2D,WAAW,GAAGrW,GAAG,CAAC2B,gBAAgB,CAACoH,WAAW,CAAC;IACnDhJ,WAAK,CAACgN,oCAAoC,CAAC,wBAAwB,CAAC;IACpEhN,WAAK,CAACgN,oCAAoC,CAAC,aAAa,CAAC;IACzDhN,WAAK,CAACgN,oCAAoC,CAAChE,WAAW,CAAC;IACvDhJ,WAAK,CAACgN,oCAAoC,CAAC,aAAa,CAAC;IACzDhN,WAAK,CAACgN,oCAAoC,CAACsJ,WAAW,CAAC;IACvD,IAAI,CAACpG,KAAK,CAAC,CAAC;IACZrJ,GAAG,CAAC6B,QAAQ,CAAC,IAAI,CAAC2F,WAAW,CAACrG,IAAI,EAAEsO,WAAW,CAAC;EACpD;EACAC,wBAAwBA,CAAC/O,QAAQ,EAAE;IAC/B,IAAIgP,KAAK,GAAG7E,aAAa,CAAC8E,YAAY,CAAC,CAAC;IACxC,IAAIC,SAAS,GAAGF,KAAK,CAACjU,aAAa,CAAC,OAAO,CAAC;IAC5CmU,SAAS,CAACtY,gBAAgB,CAAC,IAAI,CAAC,CAAC0N,OAAO,CAAC,UAASuI,GAAG,EAAE;MAAEA,GAAG,CAACtQ,MAAM,CAAC,CAAC;IAAE,CAAC,CAAC;IACzE,IAAI4S,QAAQ,GAAGnP,QAAQ,CAACjK,IAAI,CAACqZ,QAAQ,CAAC;IACtC,IAAI,CAACpa,UAAU,CAACC,OAAO,CAACka,QAAQ,CAAC,IAAIA,QAAQ,CAACE,KAAK,CAACxC,GAAG,IAAIA,GAAG,CAACyC,cAAc,CAAC,eAAe,CAAC,CAAC,EAAE;MAC7FH,QAAQ,GAAGA,QAAQ,CAACnB,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACsB,aAAa,GAAGrB,CAAC,CAACqB,aAAa,CAAC;IACzE;IACAJ,QAAQ,CAAC7K,OAAO,CAAC,IAAI,CAACkL,YAAY,CAAC9E,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAACK,eAAe,CAAC,CAAC;EAC1B;EACA,OAAOkE,YAAYA,CAAA,EAAG;IAClB,OAAOtY,QAAQ,CAACoE,aAAa,CAACgP,WAAW,CAAC;EAC9C;EACAyF,YAAYA,CAACC,OAAO,EAAE;IAClB,MAAM,IAAItP,KAAK,CAAC,iEAAiE,CAAC;EACtF;EACAuP,2CAA2CA,CAAA,EAAG;IAC1C,IAAI,CAACrE,sBAAsB,CAAC,CAAC,CACxB1C,IAAI,CAAC5S,IAAI,IAAI;MACVyC,WAAK,CAACgN,oCAAoC,CAAC,sBAAsB,EAAEzP,IAAI,CAAC;MACxE,IAAI,CAACgZ,wBAAwB,CAAChZ,IAAI,CAAC;IACvC,CAAC,CAAC,CACD4Z,KAAK,CAACrP,KAAK,IAAIC,OAAO,CAACD,KAAK,CAAC,QAAQ,EAAEA,KAAK,CAAC,CAAC;EACvD;EACAwK,uBAAuBA,CAAA,EAAG;IACtB,IAAI,CAAC5B,gBAAgB,CAAC,CAAC;IACvB,IAAI,CAAC0G,kBAAkB,CAAC,CAAC;IACzB,IAAI,CAACnG,2BAA2B,CAAC,KAAK,CAAC;EAC3C;EACAwB,qBAAqBA,CAAA,EAAG;IACpB,IAAI4E,OAAO,GAAG,IAAI,CAACC,eAAe,CAAC,IAAI,CAAC;IACxC,IAAID,OAAO,CAACza,MAAM,IAAI,CAAC,EAAE;MACrBuR,YAAY,CAACF,IAAI,CAAC,oBAAoB,CAAC;MACvC;IACJ;IACA,IAAIsJ,WAAW,GAAG5F,aAAa,CAACgB,cAAc,CAAC,CAAC;IAChD,IAAI1J,OAAO,GAAGhJ,GAAG,CAACgB,sBAAsB,CAAC9C,QAAQ,CAACoE,aAAa,CAACiV,iBAAiB,CAAC,CAAC;IACnF,IAAI,CAACC,oBAAoB,CAACJ,OAAO,EAAEE,WAAW,EAAEtO,OAAO,CAAC,CACnDkH,IAAI,CAAC5S,IAAI,IAAI;MACV,IAAIA,IAAI,CAACma,UAAU,CAAC,IAAIC,WAAW,EAAE;QACjC,IAAIC,QAAQ,EAAE;UACV5X,WAAK,CAACgN,oCAAoC,CAAC,gBAAgB,CAAC;UAC5DhN,WAAK,CAACgN,oCAAoC,CAAC,gBAAgB,EAAEzP,IAAI,CAAC;QACtE;QACA,IAAI,CAACsV,sBAAsB,CAAC,CAAC;MACjC,CAAC,MACI;QACD7S,WAAK,CAACgN,oCAAoC,CAAC,SAAS,EAAEzP,IAAI,CAACsa,WAAW,CAAC,CAAC;QACxE1J,YAAY,CAACF,IAAI,CAAC1Q,IAAI,CAACsa,WAAW,CAAC,CAAC;MACxC;IACJ,CAAC,CAAC,CACDV,KAAK,CAACrP,KAAK,IAAIC,OAAO,CAACD,KAAK,CAAC,QAAQ,EAAEA,KAAK,CAAC,CAAC;EACvD;EACAwP,eAAeA,CAACQ,SAAS,GAAG,KAAK,EAAE;IAC/B,IAAIT,OAAO,GAAG,EAAE;IAChB,IAAIU,MAAM;IACV5Z,QAAQ,CAACC,gBAAgB,CAACmT,WAAW,GAAG,eAAe,CAAC,CAACzF,OAAO,CAAEuI,GAAG,IAAK;MACtE,IAAIyD,SAAS,IAAI,CAAC7X,GAAG,CAAC+D,yBAAyB,CAACqQ,GAAG,CAAC,EAAE;MACtD0D,MAAM,GAAG,IAAI,CAACC,UAAU,CAAC3D,GAAG,CAAC;MAC7BgD,OAAO,CAAC7L,IAAI,CAACuM,MAAM,CAAC;IACxB,CAAC,CAAC;IACF,OAAOV,OAAO;EAClB;EACAW,UAAUA,CAAC3D,GAAG,EAAE;IACZ,MAAM,IAAI1M,KAAK,CAAC,+DAA+D,CAAC;EACpF;EACA6K,kCAAkCA,CAAA,EAAG;IACjC,IAAI6E,OAAO,GAAG,IAAI,CAACC,eAAe,CAAC,IAAI,CAAC;IACxC,IAAID,OAAO,CAACza,MAAM,IAAI,CAAC,EAAE;MACrBuR,YAAY,CAACF,IAAI,CAAC,oBAAoB,CAAC;MACvC;IACJ;IACA,IAAIsJ,WAAW,GAAG5F,aAAa,CAACgB,cAAc,CAAC,CAAC;IAChD,IAAI1J,OAAO,GAAGhJ,GAAG,CAACgB,sBAAsB,CAAC9C,QAAQ,CAACoE,aAAa,CAACiV,iBAAiB,CAAC,CAAC;IACnF,IAAI,CAACC,oBAAoB,CAACJ,OAAO,EAAEE,WAAW,EAAEtO,OAAO,CAAC,CACnDkH,IAAI,CAAC5S,IAAI,IAAI;MACV,IAAIA,IAAI,CAACma,UAAU,CAAC,IAAIC,WAAW,EAAE;QACjC,IAAIC,QAAQ,EAAE;UACV5X,WAAK,CAACgN,oCAAoC,CAAC,gBAAgB,CAAC;UAC5DhN,WAAK,CAACgN,oCAAoC,CAAC,gBAAgB,EAAEzP,IAAI,CAAC;QACtE;QACA,IAAI,CAACgZ,wBAAwB,CAAChZ,IAAI,CAAC;MACvC,CAAC,MACI;QACDyC,WAAK,CAACgN,oCAAoC,CAAC,SAAS,EAAEzP,IAAI,CAACsa,WAAW,CAAC,CAAC;QACxE1J,YAAY,CAACF,IAAI,CAAC1Q,IAAI,CAACsa,WAAW,CAAC,CAAC;MACxC;IACJ,CAAC,CAAC,CACDV,KAAK,CAACrP,KAAK,IAAIC,OAAO,CAACD,KAAK,CAAC,QAAQ,EAAEA,KAAK,CAAC,CAAC;EACvD;EACAsP,kBAAkBA,CAAA,EAAG;IACjB3L,MAAM,CAACC,sBAAsB,CAAC,GAAG,GAAGiF,aAAa,GAAG,GAAG,GAAGC,QAAQ,GAAG,GAAG,GAAGnD,UAAU,GAAG,UAAU,GAAGA,UAAU,EAAExB,eAAe,EAAG4D,MAAM,IAAK;MAC1IA,MAAM,CAAC3D,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IAAK;QACxCA,KAAK,CAACC,eAAe,CAAC,CAAC;QACvByD,MAAM,GAAG1D,KAAK,CAAC0E,MAAM;QACrB,IAAIhB,MAAM,CAACjM,SAAS,CAACC,QAAQ,CAACqK,eAAe,CAAC,EAAE;QAChD,IAAI,CAAC2E,sBAAsB,CAAC,CAAC;MACjC,CAAC,CAAC;MACFhD,MAAM,CAACjM,SAAS,CAACE,GAAG,CAACoK,eAAe,CAAC;IACzC,CAAC,CAAC;EACN;EACA+J,sBAAsBA,CAAC9L,KAAK,EAAE0D,MAAM,EAAE;IAClC1D,KAAK,CAACC,eAAe,CAAC,CAAC;IACvB8L,SAAS,CAAC5X,YAAY,CAAC,IAAI,CAAC+N,WAAW,CAAC8J,eAAe,EAAE,CAAC,CAAC,GAAGD,SAAS,CAAC1V,YAAY,CAAC,IAAI,CAAC6L,WAAW,CAAC8J,eAAe,CAAC,CAAC;IACvH,IAAIhE,KAAK,GAAGhW,QAAQ,CAACoE,aAAa,CAACgP,WAAW,GAAG,QAAQ,CAAC;IAC1D,IAAI4C,KAAK,CAACvQ,SAAS,CAACC,QAAQ,CAACqK,eAAe,CAAC,EAAE;IAC/C,IAAImG,GAAG,GAAG6D,SAAS,CAACE,SAAS,CAAC,IAAI,CAAC;IACnC/D,GAAG,CAACzQ,SAAS,CAACG,MAAM,CAACkI,eAAe,CAAC;IACrCoI,GAAG,CAACjW,gBAAgB,CAAC,GAAG,GAAG6N,eAAe,CAAC,CAACH,OAAO,CAAC,UAAS3L,OAAO,EAAE;MAClEA,OAAO,CAACyD,SAAS,CAACG,MAAM,CAACkI,eAAe,CAAC;IAC7C,CAAC,CAAC;IACF,IAAIoM,SAAS,GAAGla,QAAQ,CAACC,gBAAgB,CAACmT,WAAW,GAAG,eAAe,CAAC,CAAC3U,MAAM;IAC/EyX,GAAG,CAAC/T,YAAY,CAAC,IAAI,CAAC+N,WAAW,CAAC8J,eAAe,EAAE,CAAC,CAAC,GAAGE,SAAS,CAAC;IAClE,IAAI,CAACC,gBAAgB,CAACnE,KAAK,EAAEE,GAAG,CAAC;IACjCF,KAAK,CAACoE,OAAO,CAAClE,GAAG,CAAC;IAClBF,KAAK,CAACvP,SAAS,GAAG,CAAC;IACnB,IAAI,CAAC2N,eAAe,CAAC,CAAC;IACtB,IAAI,CAACiG,4BAA4B,CAACrE,KAAK,CAAC;EAC5C;EACAmE,gBAAgBA,CAACnE,KAAK,EAAEE,GAAG,EAAE;IACzB,IAAI,IAAI,CAAChG,WAAW,KAAKsD,aAAa,EAAE;MACpC,MAAM,IAAIhK,KAAK,CAAC,qEAAqE,CAAC;IAC1F;IACA;EACJ;EACA4K,eAAeA,CAAA,EAAG;IACd,IAAI,IAAI,CAAClE,WAAW,KAAKsD,aAAa,EAAE;MACpC,MAAM,IAAIhK,KAAK,CAAC,0CAA0C,CAAC;IAC/D;IACA8D,MAAM,CAACC,sBAAsB,CAAC6F,WAAW,EAAEtF,eAAe,EAAGuK,KAAK,IAAK;MACnE,IAAI,CAACiC,aAAa,CAAC,CAAC;IACxB,CAAC,CAAC;EACN;EACAA,aAAaA,CAAA,EAAG;IACZ,IAAIC,cAAc,GAAGnH,WAAW,GAAG,YAAY,GAAGoH,UAAU;IAC5D,IAAIC,YAAY,GAAGza,QAAQ,CAACoE,aAAa,CAACmW,cAAc,CAAC;IACzD,IAAIE,YAAY,IAAI,IAAI,EAAE;IAC1B5Y,WAAK,CAACgN,oCAAoC,CAAC,kBAAkB,EAAE4L,YAAY,CAAC;IAC5E,IAAIP,SAAS,GAAGla,QAAQ,CAACC,gBAAgB,CAACmT,WAAW,GAAG,eAAe,CAAC,CAAC3U,MAAM;IAC/Esb,SAAS,GAAGU,YAAY,CAACR,SAAS,CAAC,IAAI,CAAC;IACxCja,QAAQ,CAACC,gBAAgB,CAACsa,cAAc,CAAC,CAAC5M,OAAO,CAAC,UAASuI,GAAG,EAAE;MAC5DA,GAAG,CAACtQ,MAAM,CAAC,CAAC;IAChB,CAAC,CAAC;IACFmU,SAAS,CAAC5X,YAAY,CAAC,IAAI,CAAC+N,WAAW,CAAC8J,eAAe,EAAE,CAAC,CAAC,GAAGE,SAAS,CAAC;EAC5E;EACAG,4BAA4BA,CAACrE,KAAK,EAAE;IAChC,IAAI,IAAI,CAAC9F,WAAW,KAAKsD,aAAa,EAAE;MACpC,MAAM,IAAIhK,KAAK,CAAC,sFAAsF,CAAC;IAC3G;EACJ;EACAkR,kCAAkCA,CAAC1E,KAAK,EAAEE,GAAG,EAAE;IAC3C;IACA;IACA,IAAIyE,mBAAmB,GAAG3E,KAAK,CAAC/V,gBAAgB,CAAC,mBAAmB,GAAG2a,gBAAgB,GAAG,SAAS,GAAGC,UAAU,CAAC;IACjH,IAAIC,eAAe,GAAG,CAAC;IACvBH,mBAAmB,CAAChN,OAAO,CAAEoN,MAAM,IAAK;MACpCD,eAAe,GAAGE,IAAI,CAACC,GAAG,CAACH,eAAe,EAAE7b,UAAU,CAAC6C,GAAG,CAACgB,sBAAsB,CAACiY,MAAM,CAAC,CAAC,CAAC;IAC/F,CAAC,CAAC;IACF,IAAIG,kBAAkB,GAAGhF,GAAG,CAAC9R,aAAa,CAAC,KAAK,GAAGwW,gBAAgB,GAAG,IAAI,GAAGC,UAAU,CAAC;IACxF/Y,GAAG,CAACQ,kCAAkC,CAAC4Y,kBAAkB,EAAEJ,eAAe,GAAG,CAAC,CAAC;EACnF;EACAK,8BAA8BA,CAAA,EAAG;IAC7B,IAAIC,oBAAoB,GAAGhI,WAAW,GAAG,eAAe,GAAGwH,gBAAgB,GAAG,SAAS,GAAGC,UAAU,GAAG,GAAG,GAAGD,gBAAgB;IAC7H,IAAI,CAACS,6BAA6B,CAACD,oBAAoB,CAAC;EAC5D;EACAC,6BAA6BA,CAACC,aAAa,EAAExF,OAAO,GAAGA,CAAC9H,KAAK,EAAEhM,OAAO,KAAK;IAAE,IAAI,CAACuZ,kCAAkC,CAACvN,KAAK,EAAEhM,OAAO,CAAC;EAAE,CAAC,EAAE;IACrIsL,MAAM,CAACC,sBAAsB,CAAC+N,aAAa,EAAExN,eAAe,EAAG0N,KAAK,IAAK;MACrEA,KAAK,CAACzN,gBAAgB,CAAC,QAAQ,EAAGC,KAAK,IAAK;QACxC8H,OAAO,CAAC9H,KAAK,EAAEwN,KAAK,CAAC;MACzB,CAAC,CAAC;MACF1F,OAAO,CAAC,IAAI,EAAE0F,KAAK,CAAC;IACxB,CAAC,CAAC;EACN;EACAD,kCAAkCA,CAACvN,KAAK,EAAEhM,OAAO,EAAE;IAC/C,IAAIyZ,kBAAkB,GAAG,IAAI,CAACC,6BAA6B,CAAC1Z,OAAO,CAAC;IACpE,IAAI2Z,eAAe,GAAG3Z,OAAO,CAACyD,SAAS,CAACC,QAAQ,CAACL,SAAS,CAAC;IAC3D,IAAIuW,cAAc,GAAG9Z,GAAG,CAACkD,4BAA4B,CAAChD,OAAO,CAAC;IAC9D;IACA;IACA;IACA,IAAI4Z,cAAc,IAAID,eAAe,EAAE;MACnC;MACA,IAAI,CAACnF,oCAAoC,CAAC,CAAC;MAC3C,IAAI,CAACqF,2CAA2C,CAAC7Z,OAAO,EAAE4Z,cAAc,EAAEH,kBAAkB,CAAC;IACjG;EACJ;EACAC,6BAA6BA,CAAC1Z,OAAO,EAAE;IACnC,IAAIiU,IAAI,GAAG,EAAE;IACb,IAAI3S,MAAM,GAAGtB,OAAO;IACpB,IAAIkD,OAAO;IACX,OAAO5B,MAAM,EAAE;MACX,IAAIA,MAAM,CAACd,OAAO,CAACC,WAAW,CAAC,CAAC,IAAI,IAAI,EAAE;QACtCyC,OAAO,GAAG5B,MAAM,CAACmC,SAAS,CAACC,QAAQ,CAACL,SAAS,CAAC;QAC9C4Q,IAAI,CAAC5I,IAAI,CAACnI,OAAO,CAAC;MACtB;MACA5B,MAAM,GAAGA,MAAM,CAACC,aAAa;IACjC;IACA,OAAO0S,IAAI;EACf;EACA4F,2CAA2CA,CAAC7Z,OAAO,EAAE4Z,cAAc,EAAEH,kBAAkB,EAAE;IACrF,IAAIpd,UAAU,CAACC,OAAO,CAACmd,kBAAkB,CAAC,EAAE;IAC5C,IAAIK,EAAE,GAAGha,GAAG,CAACmB,iBAAiB,CAACjB,OAAO,CAAC;IACvC,IAAI+Z,UAAU,GAAGH,cAAc,IAAI9Z,GAAG,CAAC+D,yBAAyB,CAACiW,EAAE,CAAC;IACpE,IAAIE,WAAW,GAAGP,kBAAkB,CAACQ,KAAK,CAAC,CAAC;IAC5Cpa,WAAK,CAACgN,oCAAoC,CAAC;MAACkN,UAAU;MAAEC;IAAW,CAAC,CAAC;IACrE,IAAID,UAAU,IAAIC,WAAW,EAAE;MAC3Bla,GAAG,CAACqD,kBAAkB,CAAC2W,EAAE,EAAEC,UAAU,CAAC;MACtC,IAAI,CAACvF,oCAAoC,CAAC,CAAC;MAC3C,IAAI,CAACqF,2CAA2C,CAACC,EAAE,CAACvY,aAAa,EAAEwY,UAAU,EAAEN,kBAAkB,CAAC;IACtG;EACJ;EACAS,6CAA6CA,CAACZ,aAAa,EAAExF,OAAO,GAAGA,CAAC9H,KAAK,EAAEhM,OAAO,KAAK;IACvF,IAAI,CAACA,OAAO,CAACyD,SAAS,CAACC,QAAQ,CAACqK,eAAe,CAAC,EAAE,IAAI,CAACwL,kCAAkC,CAACvN,KAAK,EAAEhM,OAAO,CAAC;EAC7G,CAAC,EAAE;IACCsL,MAAM,CAACM,kBAAkB,CAAC,QAAQ,EAAE0N,aAAa,EAAExF,OAAO,CAAC;EAC/D;EACAqG,qBAAqBA,CAAA,EAAG;IACpB,IAAI,CAACd,6BAA6B,CAACjI,WAAW,GAAG,qBAAqB,GAAGgJ,QAAQ,GAAG,MAAM,GAAGA,QAAQ,CAAC;EAC1G;EACAC,qBAAqBA,CAAA,EAAG;IACpB,IAAI,CAAChB,6BAA6B,CAACjI,WAAW,GAAG,qBAAqB,GAAG1L,QAAQ,GAAG,MAAM,GAAGA,QAAQ,CAAC;EAC1G;EACA4U,4BAA4BA,CAAA,EAAG;IAC3B,IAAI,CAACjB,6BAA6B,CAACjI,WAAW,GAAG,qBAAqB,GAAGmJ,eAAe,GAAG,MAAM,GAAGA,eAAe,CAAC;EACxH;EACAC,sBAAsBA,CAAA,EAAG;IACrB,IAAI,CAACnB,6BAA6B,CAACjI,WAAW,GAAG,qBAAqB,GAAGqJ,SAAS,GAAG,MAAM,GAAGA,SAAS,CAAC;EAC5G;EACAC,kBAAkBA,CAACC,SAAS,GAAG,EAAE,EAAEC,iBAAiB,GAAGA,CAAC5O,KAAK,EAAEhM,OAAO,KAAK;IAAE,IAAI,CAAC8X,sBAAsB,CAAC9L,KAAK,EAAEhM,OAAO,CAAC;EAAE,CAAC,EAAE;IACzH,IAAI6a,cAAc,GAAG,kBAAkB,IAAIxe,UAAU,CAACC,OAAO,CAACqe,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,GAAGA,SAAS,CAAC,GAAG,qBAAqB,GAAGxW,UAAU,GAAG,IAAI,GAAGD,UAAU,GAAG,GAAG,GAAGC,UAAU;IAC5K,IAAI2W,oBAAoB,GAAGD,cAAc,GAAG,GAAG,GAAG7W,UAAU;IAC5D,IAAI+W,sBAAsB,GAAGF,cAAc,GAAG,QAAQ,GAAG7W,UAAU,GAAG,GAAG;IACzEnE,WAAK,CAACgN,oCAAoC,CAAC,sBAAsB,EAAEiO,oBAAoB,EAAEC,sBAAsB,CAAC;IAChH,IAAI,CAACC,sBAAsB,CAACF,oBAAoB,EAAEC,sBAAsB,CAAC;IACzE,IAAI,CAACE,wBAAwB,CAACH,oBAAoB,EAAEC,sBAAsB,CAAC;IAC3EzP,MAAM,CAACM,kBAAkB,CACrB,OAAO,EACL,kBAAkB,IAAIvP,UAAU,CAACC,OAAO,CAACqe,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,GAAGA,SAAS,CAAC,GAAG,qBAAqB,GAAGxW,UAAU,GAAG,IAAI,GAAGD,UAAU,GAAG,GAAG,GAAGC,UAAU,EACvJ,CAAC6H,KAAK,EAAE0D,MAAM,KAAK;MAAEkL,iBAAiB,CAAC5O,KAAK,EAAE0D,MAAM,CAAC;IAAE,CAC7D,CAAC;EACL;EACAsL,sBAAsBA,CAACF,oBAAoB,EAAEC,sBAAsB,EAAEG,aAAa,GAAGA,CAAClP,KAAK,EAAEhM,OAAO,KAAK;IAAE,IAAI,CAACuZ,kCAAkC,CAACvN,KAAK,EAAEhM,OAAO,CAAC;EAAE,CAAC,EAAE;IACnKsL,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAEkP,oBAAoB,EAAE,CAAC9O,KAAK,EAAEhM,OAAO,KAAK;MACzE,IAAI,CAACmb,0BAA0B,CAACnP,KAAK,EAAEhM,OAAO,EAAE8a,oBAAoB,EAAEC,sBAAsB,EAAE,CAACK,WAAW,EAAEC,aAAa,KAAK;QAAEH,aAAa,CAACE,WAAW,EAAEC,aAAa,CAAC;MAAE,CAAC,CAAC;IACjL,CAAC,CAAC;EACN;EACAF,0BAA0BA,CAACnP,KAAK,EAAEhM,OAAO,EAAE8a,oBAAoB,EAAEC,sBAAsB,EAAEG,aAAa,GAAGA,CAAClP,KAAK,EAAEhM,OAAO,KAAK;IAAE,IAAI,CAACuZ,kCAAkC,CAACvN,KAAK,EAAEhM,OAAO,CAAC;EAAE,CAAC,EAAE;IACvL,IAAIA,OAAO,CAACQ,OAAO,CAACC,WAAW,CAAC,CAAC,IAAI,KAAK,EAAET,OAAO,GAAGA,OAAO,CAACuB,aAAa;IAC3E,IAAI+Z,aAAa,GAAGxb,GAAG,CAACyE,gCAAgC,CAACvE,OAAO,CAAC;IACjE,IAAIub,QAAQ,GAAGvb,OAAO,CAACyD,SAAS,CAACC,QAAQ,CAACL,SAAS,CAAC;IACpD,IAAI6Q,GAAG,GAAGpU,GAAG,CAACmB,iBAAiB,CAACjB,OAAO,CAAC;IACxC,IAAIkU,GAAG,CAACzQ,SAAS,CAACC,QAAQ,CAAC8U,UAAU,CAAC,IAAI,CAAC1Y,GAAG,CAAC+D,yBAAyB,CAACqQ,GAAG,CAAC,EAAE;MAC3EA,GAAG,CAACsH,UAAU,CAACC,WAAW,CAACvH,GAAG,CAAC;IACnC,CAAC,MACI;MACD,IAAIwH,iBAAiB,GAAG1d,QAAQ,CAACoE,aAAa,CAACuZ,2BAA2B,GAAG,IAAI,GAAGzX,UAAU,GAAG,GAAG,GAAGC,UAAU,GAAG,GAAG,GAAGyX,OAAO,CAAC;MAClI,IAAIC,SAAS,GAAGH,iBAAiB,CAACzD,SAAS,CAAC,IAAI,CAAC;MACjDnY,GAAG,CAACI,gCAAgC,CAAC2b,SAAS,EAAEP,aAAa,CAAC;MAC9Dxb,GAAG,CAACG,+BAA+B,CAAC4b,SAAS,EAAE,KAAK,CAAC;MACrD,IAAIN,QAAQ,EAAEM,SAAS,CAACpY,SAAS,CAACE,GAAG,CAACN,SAAS,CAAC;MAChDrD,OAAO,CAAC8b,WAAW,CAACD,SAAS,CAAC;MAC9BX,aAAa,CAAC,IAAI,EAAEW,SAAS,CAAC;MAC9B,IAAI,CAACZ,wBAAwB,CAACH,oBAAoB,EAAEC,sBAAsB,EAAE,CAACK,WAAW,EAAEC,aAAa,KAAK;QAAEH,aAAa,CAACE,WAAW,EAAEC,aAAa,CAAC;MAAE,CAAC,CAAC;IAC/J;IACA,IAAI,CAAC7G,oCAAoC,CAAC,CAAC;EAC/C;EACAyG,wBAAwBA,CAACH,oBAAoB,EAAEC,sBAAsB,EAAEG,aAAa,GAAGA,CAAClP,KAAK,EAAEhM,OAAO,KAAK;IAAE,IAAI,CAACuZ,kCAAkC,CAACvN,KAAK,EAAEhM,OAAO,CAAC;EAAE,CAAC,EAAE;IACrKsL,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAEmP,sBAAsB,EAAE,CAAC/O,KAAK,EAAEhM,OAAO,KAAK;MAC3E,IAAI,CAAC+b,4BAA4B,CAAC/P,KAAK,EAAEhM,OAAO,EAAE8a,oBAAoB,EAAEC,sBAAsB,EAAE,CAACK,WAAW,EAAEC,aAAa,KAAK;QAAEH,aAAa,CAACE,WAAW,EAAEC,aAAa,CAAC;MAAE,CAAC,CAAC;IACnL,CAAC,CAAC;EACN;EACAU,4BAA4BA,CAAC/P,KAAK,EAAEhM,OAAO,EAAE8a,oBAAoB,EAAEC,sBAAsB,EAAEG,aAAa,GAAGA,CAAClP,KAAK,EAAEhM,OAAO,KAAK;IAAE,IAAI,CAACuZ,kCAAkC,CAACvN,KAAK,EAAEhM,OAAO,CAAC;EAAE,CAAC,EAAE;IACzL,IAAIA,OAAO,CAACQ,OAAO,CAACC,WAAW,CAAC,CAAC,IAAI,KAAK,EAAET,OAAO,GAAGA,OAAO,CAACuB,aAAa;IAC3E,IAAI+Z,aAAa,GAAGxb,GAAG,CAACyE,gCAAgC,CAACvE,OAAO,CAAC;IACjE,IAAIub,QAAQ,GAAGzb,GAAG,CAACmD,cAAc,CAACjD,OAAO,CAAC;IAC1C,IAAIgc,oBAAoB,GAAGhe,QAAQ,CAACoE,aAAa,CAACuZ,2BAA2B,GAAG,IAAI,GAAGzX,UAAU,GAAG,GAAG,GAAGC,UAAU,GAAG,GAAG,GAAGH,UAAU,CAAC;IACxI,IAAIiY,YAAY,GAAGD,oBAAoB,CAAC/D,SAAS,CAAC,IAAI,CAAC;IACvDnY,GAAG,CAACI,gCAAgC,CAAC+b,YAAY,EAAEX,aAAa,CAAC;IACjExb,GAAG,CAACG,+BAA+B,CAACgc,YAAY,EAAE,IAAI,CAAC;IACvD,IAAIV,QAAQ,EAAEU,YAAY,CAACxY,SAAS,CAACE,GAAG,CAACN,SAAS,CAAC;IACnDrD,OAAO,CAAC8b,WAAW,CAACG,YAAY,CAAC;IACjCf,aAAa,CAAC,IAAI,EAAEe,YAAY,CAAC;IACjC,IAAI,CAACjB,sBAAsB,CAACF,oBAAoB,EAAEC,sBAAsB,EAAE,CAACK,WAAW,EAAEC,aAAa,KAAK;MAAEH,aAAa,CAACE,WAAW,EAAEC,aAAa,CAAC;IAAE,CAAC,CAAC;IACzJ,IAAI,CAAC7G,oCAAoC,CAAC,CAAC;EAC/C;EACA0H,oBAAoBA,CAAA,EAAG;IACnB,IAAI,CAACC,0BAA0B,CAACC,eAAe,EAAEvc,WAAK,CAAC6M,eAAe,CAAC2P,YAAY,CAAC,CAAC;EACzF;EACAF,0BAA0BA,CACtBG,SAAS,EACPC,UAAU,EACVC,YAAY,GAAG,IAAI,EACnBC,SAAS,GAAIC,WAAW,IAAK;IAAE,IAAI,CAAC5K,mBAAmB,CAAC4K,WAAW,CAAC;EAAE,CAAC,EACvExB,aAAa,GAAGA,CAAClP,KAAK,EAAEhM,OAAO,KAAK;IAAE,IAAI,CAACuZ,kCAAkC,CAACvN,KAAK,EAAEhM,OAAO,CAAC;EAAE,CAAC,EACpG;IACE,IAAIwc,YAAY,IAAI,IAAI,EAAEA,YAAY,GAAGpL,WAAW,GAAG,qBAAqB,GAAGkL,SAAS;IACxFhR,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAE4Q,YAAY,GAAG,OAAO,GAAGF,SAAS,EAAE,CAACtQ,KAAK,EAAE1F,GAAG,KAAK;MACnF,IAAI,CAACqW,8BAA8B,CAC/B3Q,KAAK,EACH1F,GAAG,EACHgW,SAAS,EACTC,UAAU,EACVC,YAAY,EACXE,WAAW,IAAK;QAAED,SAAS,CAC1BC,WAAW,EACT,CAAC1Q,KAAK,EAAEhM,OAAO,KAAK;UAAEkb,aAAa,CAAClP,KAAK,EAAEhM,OAAO,CAAC;QAAE,CAC3D,CAAC;MAAE,CACP,CAAC;IACL,CAAC,CAAC;IACFyc,SAAS,CAACD,YAAY,GAAG,UAAU,GAAGF,SAAS,CAAC;EACpD;EACAxK,mBAAmBA,CAAC4K,WAAW,EAAExB,aAAa,GAAGA,CAAClP,KAAK,EAAEhM,OAAO,KAAK;IAAE,IAAI,CAACuZ,kCAAkC,CAACvN,KAAK,EAAEhM,OAAO,CAAC;EAAE,CAAC,EAAE;IAC/H,IAAI,CAACqZ,6BAA6B,CAACqD,WAAW,EAAE,CAAC1Q,KAAK,EAAEhM,OAAO,KAAK;MAAEkb,aAAa,CAAClP,KAAK,EAAEhM,OAAO,CAAC;IAAE,CAAC,CAAC;EAC3G;EACA2c,8BAA8BA,CAAC3Q,KAAK,EAAE1F,GAAG,EAAEgW,SAAS,EAAEM,gBAAgB,EAAEJ,YAAY,GAAG,IAAI,EAAEC,SAAS,GAAID,YAAY,IAAK;IAAE,IAAI,CAAC1K,mBAAmB,CAAC0K,YAAY,CAAC;EAAE,CAAC,EAAE;IACpK,IAAIngB,UAAU,CAACC,OAAO,CAACkgB,YAAY,CAAC,EAAEA,YAAY,GAAGpL,WAAW,GAAG,qBAAqB,GAAGkL,SAAS;IACpG,IAAIO,UAAU,GAAG/c,GAAG,CAACsE,+BAA+B,CAACkC,GAAG,CAAC;IACzD,IAAIwW,EAAE,GAAGhd,GAAG,CAACiB,kBAAkB,CAACuF,GAAG,CAAC;IACpCwW,EAAE,CAACpa,SAAS,GAAG,EAAE;IACjB,IAAIqa,GAAG,GAAG/e,QAAQ,CAACmI,aAAa,CAAC,QAAQ,CAAC;IAC1C4W,GAAG,CAACtZ,SAAS,CAACE,GAAG,CAAC2Y,SAAS,CAAC;IAC5Bxc,GAAG,CAACQ,kCAAkC,CAACyc,GAAG,EAAEF,UAAU,CAAC;IACvD,IAAI7W,UAAU,EAAEE,MAAM;IACtB,IAAIuR,QAAQ,EAAE;MACV5X,WAAK,CAACgN,oCAAoC,CAAC,8BAA8B,CAAC;MAC1EhN,WAAK,CAACgN,oCAAoC,CAAC;QAAC+P,gBAAgB;QAAEJ;MAAY,CAAC,CAAC;IAChF;IACAtW,MAAM,GAAGpG,GAAG,CAACiG,YAAY,CAAC,IAAI,CAAC;IAC/BgX,GAAG,CAACnH,WAAW,CAAC1P,MAAM,CAAC;IACvB0W,gBAAgB,CAACjR,OAAO,CAAEqR,gBAAgB,IAAK;MAC3ChX,UAAU,GAAGsE,eAAe,CAACM,2BAA2B,CAACoS,gBAAgB,EAAEH,UAAU,CAAC;MACtF3W,MAAM,GAAGpG,GAAG,CAACiG,YAAY,CAACC,UAAU,CAAC;MACrC+W,GAAG,CAACnH,WAAW,CAAC1P,MAAM,CAAC;IAC3B,CAAC,CAAC;IACF4W,EAAE,CAAClH,WAAW,CAACmH,GAAG,CAAC;IACnB,IAAIL,WAAW,GAAGF,YAAY,GAAG,UAAU,GAAGF,SAAS;IACvDG,SAAS,CAACC,WAAW,CAAC;EAC1B;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;EACIO,qBAAqBA,CAACC,UAAU,EAAEC,WAAW,EAAE;IAC3C,IAAI,CAACC,4BAA4B,CAACF,UAAU,EAAEC,WAAW,EAAEpP,eAAe,CAAC;EAC/E;EACAsP,2BAA2BA,CAACH,UAAU,EAAEC,WAAW,EAAE;IACjD,IAAI,CAACC,4BAA4B,CAACF,UAAU,EAAEC,WAAW,EAAEpP,eAAe,CAAC;EAC/E;EAEAuP,2BAA2BA,CAACC,OAAO,GAAG,IAAI,EAAE;IACxC,IAAIA,OAAO,IAAI,IAAI,EAAEA,OAAO,GAAGnM,WAAW;IAC1C,IAAI,CAAC+K,0BAA0B,CAC3BqB,mBAAmB,EACjB3d,WAAK,CAAC6M,eAAe,CAAC+Q,uBAAuB,CAAC,CAACpI,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAC5P,QAAQ,CAAC,CAAC8P,aAAa,CAACD,CAAC,CAAC7P,QAAQ,CAAC,CAAC,CAAC,EACrG6X,OAAO,GAAG,qBAAqB,GAAGC,mBAAmB,CAAC;IAAA,EACrDhB,YAAY,IAAK;MAAE,IAAI,CAACkB,yBAAyB,CAAClB,YAAY,CAAC;IAAE,CACxE,CAAC;EACL;EACAkB,yBAAyBA,CAAChB,WAAW,EAAE;IACnC,IAAI,CAACrD,6BAA6B,CAACqD,WAAW,EAAE,CAAC1Q,KAAK,EAAEhM,OAAO,KAAK;MAAE,IAAI,CAAC2d,8BAA8B,CAAC3R,KAAK,EAAEhM,OAAO,CAAC;IAAE,CAAC,CAAC;EACjI;EACA2d,8BAA8BA,CAAC3R,KAAK,EAAE4R,WAAW,EAAE;IAC/C,IAAI1J,GAAG,GAAGpU,GAAG,CAACmB,iBAAiB,CAAC2c,WAAW,CAAC;IAC5C,IAAIC,uBAAuB,GAAG,IAAI,CAACC,uBAAuB,CAAC5J,GAAG,CAAC,CAAC,CAAC;IACjE,IAAI,CAACqF,kCAAkC,CAACvN,KAAK,EAAE4R,WAAW,CAAC;IAC3D,IAAIG,uBAAuB,GAAG,IAAI,CAACD,uBAAuB,CAAC5J,GAAG,CAAC,CAAC,CAAC;IACjE,IACI2J,uBAAuB,IAAIE,uBAAuB,IAC/CA,uBAAuB,IAAI,CAAC,EACjC;IACFnW,OAAO,CAACqF,GAAG,CAAC;MAAE8Q,uBAAuB;MAAEF;IAAwB,CAAC,CAAC;IACjE,IAAIG,uBAAuB,GAAG,IAAI,CAACC,0BAA0B,CAAC,CAAC;IAC/D,IAAIC,SAAS,GAAGhK,GAAG,CAAC9R,aAAa,CAAC,KAAK,GAAGsT,WAAW,CAAC;IACtDwI,SAAS,CAACrI,aAAa,CAAC,IAAIC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAIqI,UAAU,GAAGjK,GAAG,CAAC9R,aAAa,CAAC,KAAK,GAAGsT,WAAW,GAAG,UAAU,GAAGA,WAAW,CAAC;IAClFyI,UAAU,CAACzb,SAAS,GAAG,EAAE;IACzByb,UAAU,CAACvI,WAAW,CAAC9V,GAAG,CAACiG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAIC,UAAU,EAAEE,MAAM;IACtB,IAAIgP,kBAAkB,GAAGrV,WAAK,CAAC6M,eAAe,CAACuI,cAAc,CAAC,CAAC/S,MAAM,CAACiT,OAAO,IACzE,CACIA,OAAO,CAACL,qBAAqB,CAAC,IAAIiJ,uBAAuB,IACtDA,uBAAuB,IAAI,CAAC,MAG5B5I,OAAO,CAACL,qBAAqB,CAAC,IAAIkJ,uBAAuB,IACzDA,uBAAuB,IAAI,CAAC,CAEvC,CAAC;IACD,IAAI5I,cAAc,GAAGF,kBAAkB,CAACG,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAC5P,QAAQ,CAAC,CAAC8P,aAAa,CAACD,CAAC,CAAC7P,QAAQ,CAAC,CAAC,CAAC;IAC9F0P,cAAc,CAACzJ,OAAO,CAAEwJ,OAAO,IAAK;MAChCnP,UAAU,GAAGsE,eAAe,CAACM,2BAA2B,CAACuK,OAAO,CAAC;MACjEjP,MAAM,GAAGpG,GAAG,CAACiG,YAAY,CAACC,UAAU,CAAC;MACrCmY,UAAU,CAACvI,WAAW,CAAC1P,MAAM,CAAC;IAClC,CAAC,CAAC;IACF,IAAI,CAACqT,kCAAkC,CAACvN,KAAK,EAAEmS,UAAU,CAAC;EAC9D;EACAC,mBAAmBA,CAACb,OAAO,GAAG,IAAI,EAAE;IAChC,IAAIA,OAAO,IAAI,IAAI,EAAEA,OAAO,GAAGnM,WAAW;IAC1C9F,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAE2R,OAAO,GAAG,qBAAqB,GAAG7H,WAAW,GAAG,OAAO,GAAGA,WAAW,EAAE,CAAC1J,KAAK,EAAE1F,GAAG,KAAK;MACtHzG,WAAK,CAACgN,oCAAoC,CAACvG,GAAG,CAAC;MAC/C,IAAI+X,QAAQ,GAAGve,GAAG,CAACmB,iBAAiB,CAACqF,GAAG,CAAC;MACzCzG,WAAK,CAACgN,oCAAoC,CAAC;QAAEvG,GAAG;QAAE+X;MAAS,CAAC,CAAC;MAC7D,IAAIC,iBAAiB,GAAGD,QAAQ,CAACjc,aAAa,CAAC,KAAK,GAAGob,mBAAmB,CAAC;MAC3E,IAAIe,oBAAoB,GAAG,IAAI,CAACT,uBAAuB,CAACO,QAAQ,CAAC,CAAC,CAAC;MACnE,IAAIL,uBAAuB,GAAG,IAAI,CAACC,0BAA0B,CAAC,CAAC;MAC/D,IAAIO,iBAAiB,GAAG3e,WAAK,CAAC6M,eAAe,CAACuI,cAAc,CAAC;MAC7D,IAAIC,kBAAkB,GAAGsJ,iBAAiB,CAACtc,MAAM,CAACiT,OAAO,IACrD,CACIA,OAAO,CAACL,qBAAqB,CAAC,IAAIyJ,oBAAoB,IACnDA,oBAAoB,IAAI,CAAC,MAGzBpJ,OAAO,CAACL,qBAAqB,CAAC,IAAIkJ,uBAAuB,IACzDA,uBAAuB,IAAI,CAAC,CAEvC,CAAC;MACD,IAAI5I,cAAc,GAAGF,kBAAkB,CAACG,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAC5P,QAAQ,CAAC,CAAC8P,aAAa,CAACD,CAAC,CAAC7P,QAAQ,CAAC,CAAC,CAAC;MAC9F7F,WAAK,CAACgN,oCAAoC,CAAC;QAAEyR,iBAAiB;QAAEC,oBAAoB;QAAEP,uBAAuB;QAAEQ,iBAAiB;QAAEtJ;MAAmB,CAAC,CAAC;MACvJrV,WAAK,CAACgN,oCAAoC,CAAC2R,iBAAiB,CAAC;MAC7D,IAAI,CAAC7B,8BAA8B,CAC/B3Q,KAAK,EACH1F,GAAG,EACHoP,WAAW,CAAC;MAAA,EACZN,cAAc,CAAC;MAAA,EACfmI,OAAO,GAAG,qBAAqB,GAAG7H,WAAW,CAAC;MAAA,EAC7C8G,YAAY,IAAK;QAAE,IAAI,CAAC1K,mBAAmB,CAC1C0K,YAAY,EACV,CAACxQ,KAAK,EAAEhM,OAAO,KAAK;UAAE,IAAI,CAACye,sBAAsB,CAACzS,KAAK,EAAEhM,OAAO,CAAC;QAAE,CACzE,CAAC;MAAE,CACP,CAAC;IACL,CAAC,CAAC;IACF,IAAI,CAAC8R,mBAAmB,CACpByL,OAAO,GAAG,qBAAqB,GAAG7H,WAAW,GAAG,UAAU,GAAGA,WAAW,EACtE,CAAC1J,KAAK,EAAEhM,OAAO,KAAK;MAAE,IAAI,CAACye,sBAAsB,CAACzS,KAAK,EAAEhM,OAAO,CAAC;IAAE,CACzE,CAAC;EACL;EACAye,sBAAsBA,CAACzS,KAAK,EAAEmS,UAAU,EAAE;IACtC;IACA,IAAIjK,GAAG,GAAGpU,GAAG,CAACmB,iBAAiB,CAACkd,UAAU,CAAC;IAC3C,IAAI,CAAC5E,kCAAkC,CAACvN,KAAK,EAAEmS,UAAU,CAAC;IAC1D,IAAIN,uBAAuB,GAAG,IAAI,CAACC,uBAAuB,CAAC5J,GAAG,CAAC;IAC/D,IAAIwK,YAAY,GAAG,IAAI,CAACC,eAAe,CAACzK,GAAG,CAAC;IAC5C,IAAI0K,UAAU,GAAG3J,cAAc,CAACyJ,YAAY,CAAC;IAC7C;IACA,IAAIE,UAAU,IAAI,IAAI,IAAIf,uBAAuB,IAAIe,UAAU,CAAC9J,qBAAqB,CAAC,EAAE;IACxF,IAAI+J,kBAAkB,GAAG3K,GAAG,CAAC9R,aAAa,CAAC,KAAK,GAAGob,mBAAmB,GAAG,MAAM,CAAC;IAChF,IAAIqB,kBAAkB,EAAEA,kBAAkB,CAAChJ,aAAa,CAAC,IAAIC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAIgJ,kBAAkB,GAAG5K,GAAG,CAAC9R,aAAa,CAAC,KAAK,GAAGob,mBAAmB,GAAG,UAAU,GAAGA,mBAAmB,CAAC;IAC1G1d,GAAG,CAACS,sBAAsB,CAACue,kBAAkB,EAAEF,UAAU,CAAC9J,qBAAqB,CAAC,CAAC;IACjF;IACA,IAAI,CAACyE,kCAAkC,CAACvN,KAAK,EAAE8S,kBAAkB,CAAC;EACtE;EACAhB,uBAAuBA,CAAChE,EAAE,EAAE;IACxB,IAAIiF,sBAAsB,GAAGjF,EAAE,CAAC1X,aAAa,CAAC,KAAK,GAAGob,mBAAmB,GAAG,IAAI,GAAGA,mBAAmB,CAAC;IACvG,OAAO1d,GAAG,CAACsE,+BAA+B,CAAC2a,sBAAsB,CAAC;EACtE;EACAd,0BAA0BA,CAAA,EAAG;IACzB,IAAIpV,WAAW,GAAG2I,aAAa,CAACgB,cAAc,CAAC,CAAC;IAChD,IAAIwC,iBAAiB,GAAG,CAAC;IACzB,IAAInM,WAAW,IAAI,IAAI,EAAE,OAAOmM,iBAAiB;IACjD,IAAIgK,qBAAqB,GAAGnW,WAAW,CAACzG,aAAa,CAAC,GAAG,GAAG0S,qBAAqB,CAAC;IAClF,IAAImK,aAAa,GAAGpW,WAAW,CAACzG,aAAa,CAAC,GAAG,GAAG4T,aAAa,CAAC;IAClE,IAAIkJ,iCAAiC,GAAGpf,GAAG,CAACsE,+BAA+B,CAAC4a,qBAAqB,CAAC;IAClGnf,WAAK,CAACgN,oCAAoC,CAAC;MAAEqS;IAAkC,CAAC,CAAC;IACjF,IAAIA,iCAAiC,IAAI,EAAE,EAAE;MACzC,IAAIC,yBAAyB,GAAGrf,GAAG,CAACsE,+BAA+B,CAAC6a,aAAa,CAAC;MAClFpf,WAAK,CAACgN,oCAAoC,CAAC;QAAEsS;MAA0B,CAAC,CAAC;MACzE,IAAIA,yBAAyB,IAAI,EAAE,EAAE;QACjC,IAAIhK,OAAO,GAAGF,cAAc,CAACkK,yBAAyB,CAAC;QACvDnK,iBAAiB,GAAGG,OAAO,CAACL,qBAAqB,CAAC;MACtD;IACJ,CAAC,MAAM;MACHE,iBAAiB,GAAGoK,QAAQ,CAACF,iCAAiC,CAAC;IACnE;IACA,OAAOlK,iBAAiB;EAC5B;EACAqK,2BAA2BA,CAAA,EAAG;IAC1B,IAAIrB,uBAAuB,GAAG,IAAI,CAACC,0BAA0B,CAAC,CAAC;IAC/D,OAAO,EAAE5hB,UAAU,CAACC,OAAO,CAAC0hB,uBAAuB,CAAC,IAAIA,uBAAuB,IAAI,CAAC,CAAC;EACzF;EACAW,eAAeA,CAAC7E,EAAE,EAAE;IAChB,IAAIwF,cAAc,GAAGxF,EAAE,CAAC1X,aAAa,CAAC,KAAK,GAAGsT,WAAW,GAAG,IAAI,GAAGA,WAAW,CAAC;IAC/E,OAAO5V,GAAG,CAACsE,+BAA+B,CAACkb,cAAc,CAAC;EAC9D;EACAC,kBAAkBA,CAAA,EAAG;IACjB,IAAI1W,WAAW,GAAG2I,aAAa,CAACgB,cAAc,CAAC,CAAC;IAChD,IAAIyM,aAAa,GAAGpW,WAAW,CAACzG,aAAa,CAAC,GAAG,GAAG4T,aAAa,CAAC;IAClE,IAAImJ,yBAAyB,GAAGrf,GAAG,CAACsE,+BAA+B,CAAC6a,aAAa,CAAC;IAClF,IAAIO,SAAS,GAAGJ,QAAQ,CAACD,yBAAyB,CAAC;IACnD,OAAOK,SAAS;EACpB;EACAC,mBAAmBA,CAAA,EAAG;IAClB,IAAIC,eAAe,GAAG,IAAI,CAACH,kBAAkB,CAAC,CAAC;IAC/C,OAAO,EAAEljB,UAAU,CAACC,OAAO,CAACojB,eAAe,CAAC,IAAIA,eAAe,IAAI,CAAC,CAAC;EACzE;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI3P,KAAKA,CAAA,EAAG;IACJ,IAAI,IAAI,CAAC7B,WAAW,KAAKsD,aAAa,EAAE;MACpC,MAAM,IAAIhK,KAAK,CAAC,gCAAgC,CAAC;IACrD;IACA,KAAK,CAACuI,KAAK,CAAC,CAAC;IACb,IAAIlH,WAAW,GAAG2I,aAAa,CAACgB,cAAc,CAAC,CAAC;IAChD,IAAI5B,QAAQ,GAAG,CAAC,CAAC;IACjBA,QAAQ,CAAC5H,eAAe,CAAC,GAAGlJ,GAAG,CAAC2B,gBAAgB,CAACoH,WAAW,CAAC;IAC7D,IAAI,CAAC8H,mBAAmB,CAACC,QAAQ,CAAC;EACtC;EAEAwM,4BAA4BA,CAACuC,UAAU,EAAEC,cAAc,EAAEC,aAAa,EAAE;IACpE,IAAIxJ,KAAK,GAAG7E,aAAa,CAAC8E,YAAY,CAAC,CAAC;IACxC,IAAIwJ,QAAQ,GAAGzJ,KAAK,CAACjU,aAAa,CAAC,KAAK,GAAGud,UAAU,CAAC;IACtD,IAAII,eAAe,GAAGD,QAAQ,CAACrc,SAAS,CAACC,QAAQ,CAACmc,aAAa,CAAC;IAChE,IAAID,cAAc,IAAIG,eAAe,EAAE;IACvCjgB,GAAG,CAACsD,6BAA6B,CAAC0c,QAAQ,EAAEF,cAAc,EAAEC,aAAa,CAAC;EAC9E;EACAG,kCAAkCA,CAACL,UAAU,EAAEC,cAAc,EAAEC,aAAa,EAAE;IAC1E,IAAIxJ,KAAK,GAAG7E,aAAa,CAAC8E,YAAY,CAAC,CAAC;IACxC,IAAIwJ,QAAQ,GAAGzJ,KAAK,CAACjU,aAAa,CAAC,KAAK,GAAGud,UAAU,CAAC;IACtD7f,GAAG,CAACsD,6BAA6B,CAAC0c,QAAQ,EAAEF,cAAc,EAAEC,aAAa,CAAC;EAC9E;EAEArL,oCAAoCA,CAAA,EAAG;IACnC;IACA,IAAItR,OAAO,GAAGpD,GAAG,CAAC+D,yBAAyB,CAACrB,QAAQ,CAAC;IAErD,IAAIuO,uBAAuB,GAAG,GAAG,GAAGP,aAAa,GAAG,GAAG,GAAGC,QAAQ,GAAG,GAAG,GAAGnD,UAAU;IACrF,IAAI0D,UAAU,GAAGhT,QAAQ,CAACoE,aAAa,CAAC2O,uBAAuB,GAAG,GAAG,GAAGE,YAAY,CAAC;IACrF,IAAIgP,2BAA2B,GAAG,CAACjP,UAAU,CAACvN,SAAS,CAACC,QAAQ,CAACqK,eAAe,CAAC;IAEjFnG,OAAO,CAACqF,GAAG,CAAC;MAAEzK,QAAQ;MAAEU,OAAO;MAAE+c;IAA4B,CAAC,CAAC;IAE/D,IAAI,CAACnP,2BAA2B,CAAC5N,OAAO,IAAI+c,2BAA2B,CAAC;EAC5E;AACJ,C;;AC3uB+B;AACU;AACI;AACN;AAExB,MAAMC,YAAY,SAAS1O,aAAa,CAAC;EACpD,OAAO3J,IAAI,GAAGsY,gBAAgB;EAC9B,OAAOnI,eAAe,GAAGoI,UAAU;EACnC9I,oBAAoB,GAAG5Q,GAAG,CAAC2Z,QAAQ;EAEnCnS,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;EACjB;EAEAI,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;EAC3B;EACA0D,aAAaA,CAAA,EAAG;IACZ;AACR;AACA;AACA;EAHQ;EAMJ2E,YAAYA,CAACC,OAAO,EAAE;IAClB,IAAIA,OAAO,IAAI,IAAI,EAAE;IACrB,IAAIW,QAAQ,EAAE;MAAE5X,WAAK,CAACgN,oCAAoC,CAAC,qBAAqB,EAAEiK,OAAO,CAAC;IAAE;EAChG;EACAe,UAAUA,CAAC3D,GAAG,EAAE;IACZ;EACJ;EACAiE,gBAAgBA,CAACnE,KAAK,EAAEE,GAAG,EAAE,CAC7B;EACAmE,4BAA4BA,CAACrE,KAAK,EAAE;IAChC,IAAIsM,OAAO,GAAGtM,KAAK,CAAC/V,gBAAgB,CAAC,KAAK,GAAGua,UAAU,CAAC;IACxD,IAAI+H,SAAS,GAAGD,OAAO,CAAC,CAAC,CAAC;IAC1B,IAAIE,yBAAyB,GAAG,CAC5B,KAAK,GAAGC,sBAAsB,GAAG,OAAO,GAAGA,sBAAsB,CACpE,CAACC,IAAI,CAAC,EAAE,CAAC;IACVH,SAAS,CAACtiB,gBAAgB,CAACuiB,yBAAyB,CAAC,CAAC7U,OAAO,CAAEgV,gBAAgB,IAAK;MAChFA,gBAAgB,CAACC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;EACN;EAEAxO,eAAeA,CAAA,EAAG;IACd,KAAK,CAACA,eAAe,CAAC,CAAC;IACvB,IAAI,CAACyO,mBAAmB,CAAC,CAAC;IAC1B,IAAI,CAACxG,qBAAqB,CAAC,CAAC;IAC5B,IAAI,CAACyG,oCAAoC,CAAC,CAAC;IAC3C,IAAI,CAACC,uCAAuC,CAAC,CAAC;IAC9C,IAAI,CAACrG,kBAAkB,CAAC,CAAC;EAC7B;EACAmG,mBAAmBA,CAAA,EAAG;IAClB;IACA;AAAyD;IACzDvV;AA6BG;EACP;EACA,OAAO8V,+BAA+BA,CAACD,WAAW,EAAE;IAChD,IAAIG,0BAA0B,GAAGtjB,QAAQ,CAACoE,aAAa,CAAC,QAAQ,GAAGmf,cAAc,GAAG,QAAQ,CAAC;IAC7F,IAAIJ,WAAW,EAAE;MACbG,0BAA0B,CAAC7d,SAAS,CAACG,MAAM,CAACmK,eAAe,CAAC;IAChE,CAAC,MACI;MACDuT,0BAA0B,CAAC7d,SAAS,CAACE,GAAG,CAACoK,eAAe,CAAC;IAC7D;EACJ;EACA+S,oCAAoCA,CAAA,EAAG;IACnC,IAAI,CAACzH,6BAA6B,CAACjI,WAAW,GAAG,MAAM,GAAG0Q,eAAe,GAAG,IAAI,GAAGA,eAAe,CAAC;EACvG;EACAf,uCAAuCA,CAAA,EAAG;IACtC,IAAI,CAAC5E,0BAA0B,CACzBsE,sBAAsB,EACtB5gB,WAAK,CAAC6M,eAAe,CAACqV,iBAAiB,CAC7C,CAAC;EACL;EAEAhS,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ,C;;AC3G+B;AACc;AACd;AACU;AAE1B,MAAMiS,WAAW,SAASxQ,aAAa,CAAC;EACnD,OAAO3J,IAAI,GAAGoa,eAAe;EAC7B,OAAOjK,eAAe,GAAGkK,UAAU;EACnC5K,oBAAoB,GAAG5Q,GAAG,CAAC0C,QAAQ;EAEnC8E,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;EACjB;EAEAI,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;IACvB,IAAI,CAAC2T,aAAa,CAAC,CAAC;EACxB;EACAjQ,aAAaA,CAAA,EAAG;IACZ;EAAA;EAEJ2E,YAAYA,CAACC,OAAO,EAAE;IAClB;EACJ;EACAe,UAAUA,CAAC3D,GAAG,EAAE;IACZ;EACJ;EACAiE,gBAAgBA,CAACnE,KAAK,EAAEE,GAAG,EAAE,CAE7B;EACAmE,4BAA4BA,CAACrE,KAAK,EAAE,CAEpC;EAEA5B,eAAeA,CAAA,EAAG;IACd,KAAK,CAACA,eAAe,CAAC,CAAC;EAC3B;EACA+P,aAAaA,CAAA,EAAG;IACZ,IAAI,CAACC,YAAY,CAAC,CAAC;IACnB,IAAIC,WAAW,GAAGrkB,QAAQ,CAACoE,aAAa,CAAC,iDAAiD,CAAC;IAC3FigB,WAAW,CAAC5b,SAAS,GAAG,aAAagD,MAAM,EAAE;EACjD;EAEA2Y,YAAYA,CAAA,EAAG;IACX;IACAJ,WAAW,CAACM,iBAAiB,CAAC,CAAC;IAC/B,IAAI,OAAO7Y,MAAM,KAAK,WAAW,IAAIA,MAAM,EAAE;MACzC,IAAI,CAAC8Y,kBAAkB,CAAC,CAAC;IAC7B;IACA;AACR;AACA;AACA;AACA;;IAEQP,WAAW,CAACQ,iBAAiB,CAAC,CAAC;IAC/BR,WAAW,CAACS,sBAAsB,CAAC,CAAC;IACpC,IAAI,CAACC,qBAAqB,CAAC,CAAC;IAC5B;AACR;AACA;AACA;AACA;AACA;EACI;EACA,OAAOF,iBAAiBA,CAAA,EAAG;IACvB,MAAMG,eAAe,GAAG3kB,QAAQ,CAACoE,aAAa,CAAC,6DAA6D,CAAC;IAC7G,IAAIugB,eAAe,EAAE;MACjBA,eAAe,CAAC5W,gBAAgB,CAAC,OAAO,EAAEiW,WAAW,CAACY,SAAS,CAAC;IACpE;EACJ;EACA,OAAOH,sBAAsBA,CAAA,EAAG;IAC5B,MAAMI,gBAAgB,GAAG7kB,QAAQ,CAAC8kB,cAAc,CAAC,aAAa,CAAC;IAC/D,IAAID,gBAAgB,EAAE;MAClBA,gBAAgB,CAAC9W,gBAAgB,CAAC,QAAQ,EAAEiW,WAAW,CAACM,iBAAiB,CAAC;IAC9E;EACJ;EACAI,qBAAqBA,CAAA,EAAG;IACpB,MAAMK,eAAe,GAAG/kB,QAAQ,CAACoE,aAAa,CAAC,wCAAwC,CAAC;IACxF,IAAI2gB,eAAe,EAAE;MACjBA,eAAe,CAAChX,gBAAgB,CAAC,OAAO,EAAE,MAAM;QAAE,IAAI,CAACiX,SAAS,CAAC,CAAC;MAAE,CAAC,CAAC;IAC1E;EACJ;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAEI,MAAMT,kBAAkBA,CAAA,EAAG;IACvB3a,OAAO,CAACqF,GAAG,CAAC,0BAA0B,CAAC;IACvC,IAAI;MACA;MACA,MAAM,CAACgW,eAAe,EAAEC,cAAc,EAAEC,cAAc,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CACtE3c,GAAG,CAAC8C,cAAc,CAACC,MAAM,CAAC,EAC1B/C,GAAG,CAACoD,aAAa,CAACL,MAAM,CAAC,EACzB/C,GAAG,CAACqD,oBAAoB,CAACN,MAAM,CAAC,CACrC,CAAC;MACF7B,OAAO,CAACqF,GAAG,CAAC;QAAEgW,eAAe;QAAEE;MAAe,CAAC,CAAC;MAEhD,IAAIG,YAAY,GAAGtlB,QAAQ,CAAC8kB,cAAc,CAAC,cAAc,CAAC;MAC1D,IAAIS,WAAW,GAAGvlB,QAAQ,CAAC8kB,cAAc,CAAC,aAAa,CAAC;MACxDQ,YAAY,CAAC7f,SAAS,CAACG,MAAM,CAAC,QAAQ,CAAC;MACvC2f,WAAW,CAAC9f,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;MAEnC,IAAIsf,eAAe,CAACxb,MAAM,KAAK,SAAS,EAAE;QACtCG,OAAO,CAACD,KAAK,CAAC,yBAAyB,EAAEsb,eAAe,CAACnW,OAAO,CAAC;QACjE;MACJ;MAEA,MAAM0W,YAAY,GAAGP,eAAe,CAAC7lB,IAAI,IAAI,EAAE;MAC/C,MAAMqmB,WAAW,GAAGP,cAAc,CAACzb,MAAM,KAAK,SAAS,GAAIyb,cAAc,CAAC9lB,IAAI,IAAI,EAAE,GAAI,EAAE;MAC1F,MAAMsmB,kBAAkB,GAAGP,cAAc,CAAC1b,MAAM,KAAK,SAAS,GAAI0b,cAAc,CAAC/lB,IAAI,IAAI,EAAE,GAAI,EAAE;MAEjGuM,OAAO,GAAG6Z,YAAY;MACtBvZ,MAAM,GAAGwZ,WAAW;MACpBE,aAAa,GAAGD,kBAAkB;MAElC,IAAIF,YAAY,CAAC/mB,MAAM,KAAK,CAAC,EAAE;QAC3B;QACA;MACJ;;MAEA;MACA6mB,YAAY,CAAC7f,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;MACpC4f,WAAW,CAAC9f,SAAS,CAACG,MAAM,CAAC,QAAQ,CAAC;MAEtCgE,OAAO,CAACqF,GAAG,CAAC;QAAEuW,YAAY;QAAEG;MAAc,CAAC,CAAC;;MAE5C;MACA,MAAMC,aAAa,GAAG5B,WAAW,CAAC6B,gBAAgB,CAAC,CAAC;MACpD,MAAMC,WAAW,GAAG7Z,MAAM,CAAC/H,MAAM,CAAC6hB,KAAK,IAAIA,KAAK,CAACC,WAAW,CAAC,IAAIJ,aAAa,CAAC,CAAC,CAAC,CAAC;MAClF,MAAMK,sBAAsB,GAAGjC,WAAW,CAACkC,yBAAyB,CAAC,CAAC;MACtEpkB,GAAG,CAACQ,kCAAkC,CAAC2jB,sBAAsB,EAAEH,WAAW,CAAClL,gBAAgB,CAAC,CAAC;MAE7F,IAAI,CAACuL,aAAa,CAAC,CAAC;IAExB,CAAC,CAAC,OAAOxc,KAAK,EAAE;MACZC,OAAO,CAACD,KAAK,CAAC,iCAAiC,EAAEA,KAAK,CAAC;IAC3D;EACJ;EACA,OAAOuc,yBAAyBA,CAAA,EAAG;IAC/B,OAAOlmB,QAAQ,CAACoE,aAAa,CAAC,CACxB,cAAc,EACd,MAAM,EACNlB,OAAO,EACP,GAAG,EACHkJ,SAAS,EACT,MAAM,EACNlJ,OAAO,EACP,GAAG,EACHkJ,SAAS,EACT,MAAM,EACNA,SAAS,EACT,GAAG,EACHwO,gBAAgB,EAChB,UAAU,EACVxO,SAAS,EACT,GAAG,EACHwO,gBAAgB,CACrB,CAAC8H,IAAI,CAAC,EAAE,CAAC,CAAC;EACf;EAEAyD,aAAaA,CAAA,EAAG;IACZ,MAAMC,IAAI,GAAGpmB,QAAQ,CAAC8kB,cAAc,CAAC,aAAa,CAAC;IACnDsB,IAAI,CAAC1hB,SAAS,GAAG,EAAE;;IAEnB;IACA,MAAMuhB,sBAAsB,GAAGjC,WAAW,CAACkC,yBAAyB,CAAC,CAAC;IACtE,MAAMG,wBAAwB,GAAGjF,QAAQ,CAACtf,GAAG,CAACgB,sBAAsB,CAACmjB,sBAAsB,CAAC,CAAC;IAC7F,IAAIK,WAAW,GAAGra,MAAM,CAAC/H,MAAM,CAAC6hB,KAAK,IAAIA,KAAK,CAACnL,gBAAgB,CAAC,IAAIyL,wBAAwB,CAAC,CAAC,CAAC,CAAC;IAChG,IAAIC,WAAW,IAAI,IAAI,EAAE;MACrBA,WAAW,GAAGtC,WAAW,CAACuC,oBAAoB,CAACF,wBAAwB,CAAC;MACxEpa,MAAM,CAACoB,IAAI,CAACiZ,WAAW,CAAC;IAC5B;IACAxkB,GAAG,CAACS,sBAAsB,CAAC0jB,sBAAsB,EAAEK,WAAW,CAAC1L,gBAAgB,CAAC,CAAC;IAEjF,MAAM4L,gBAAgB,GAAGva,MAAM,CAAC/H,MAAM,CAAC6hB,KAAK,IAAIA,KAAK,CAACnL,gBAAgB,CAAC,IAAIyL,wBAAwB,CAAC,CAC/FI,GAAG,CAACV,KAAK,IAAIA,KAAK,CAACC,WAAW,CAAC,CAAC;IACrCra,OAAO,CAACgC,OAAO,CAAC,CAAC+Y,MAAM,EAAEC,KAAK,KAAK;MAC/B;MACA,MAAMC,QAAQ,GAAGF,MAAM,CAACG,YAAY,CAAC;MACrC,IAAIC,WAAW,GAAG9C,WAAW,CAAC+C,qBAAqB,CAACH,QAAQ,EAAED,KAAK,CAAC;MACpE,IAAIK,iBAAiB,GAAG,CAAC,GAAGrb,OAAO,EAAE;QAAE,CAACkb,YAAY,GAAG;MAAK,CAAC,CAAC;MAC9D,IAAII,0BAA0B,GAAG,CAAC;MAClCD,iBAAiB,CAACrZ,OAAO,CAACuZ,gBAAgB,IAAI;QAC1C,MAAMC,QAAQ,GAAGD,gBAAgB,CAACL,YAAY,CAAC;QAC/C,MAAMO,qBAAqB,GAAGzB,aAAa,CAACzhB,MAAM,CAACmjB,MAAM,IACjDA,MAAM,CAACrB,WAAW,CAAC,IAAIM,WAAW,CAACN,WAAW;QAClD;QAAA,GACIqB,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCS,MAAM,CAACC,iCAAiC,CAAC,IAAIH,QACpD,CAAC,CAAC,CAAC;QACJ,IAAIC,qBAAqB,CAAC3oB,MAAM,IAAI,CAAC,EAAE;UACnCknB,aAAa,CAACtY,IAAI,CAAC2W,WAAW,CAACuD,gCAAgC,CAACX,QAAQ,EAAEO,QAAQ,CAAC,CAAC;QACxF;QACAF,0BAA0B,GAAGjM,IAAI,CAACC,GAAG,CAC/BgM,0BAA0B,EAC1BtB,aAAa,CAACzhB,MAAM,CAACmjB,MAAM,IACrBA,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCS,MAAM,CAACC,iCAAiC,CAAC,IAAIH,QAAQ,IACrDE,MAAM,CAACC,iCAAiC,CAAC,IAAI,IAAI,IACjDd,gBAAgB,CAACgB,QAAQ,CAACH,MAAM,CAACrB,WAAW,CAAC,CACpD,CAAC,CACGS,GAAG,CAACY,MAAM,IAAIA,MAAM,CAACI,YAAY,CAAC,CAAC,CACnCC,MAAM,CAAC,CAACpQ,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAClC,CAAC;MACL,CAAC,CAAC;MAEF,MAAMoQ,WAAW,GAAGhC,aAAa,CAACzhB,MAAM,CAACmjB,MAAM,IACvCA,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCJ,gBAAgB,CAACgB,QAAQ,CAACH,MAAM,CAACrB,WAAW,CAAC,CACpD,CAAC,CACGS,GAAG,CAACY,MAAM,IAAIA,MAAM,CAACI,YAAY,CAAC,GAAGJ,MAAM,CAACO,YAAY,CAAC,CAAC,CAC1DF,MAAM,CAAC,CAACpQ,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAAC;MAC/B,IAAIsQ,IAAI,GAAGC,YAAY,GAAGH,WAAW;MAErC,IAAII,mBAAmB,GAAGpC,aAAa,CAACzhB,MAAM,CAACmjB,MAAM,IAC7CA,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCJ,gBAAgB,CAACgB,QAAQ,CAACH,MAAM,CAACrB,WAAW,CAAC,CACpD,CAAC,CACGS,GAAG,CAACY,MAAM,IAAIA,MAAM,CAACW,gBAAgB,CAAC,CAAC,CACvCC,IAAI,CAACC,OAAO,CAAC;MAClBte,OAAO,CAACqF,GAAG,CAAC,eAAe,CAAC;MAC5BrF,OAAO,CAACqF,GAAG,CAAC;QAAC8Y,mBAAmB;QAAErB,MAAM;QAAEmB,IAAI;QAAEZ;MAA0B,CAAC,CAAC;MAC5E,MAAMkB,YAAY,GACVJ,mBAAmB,IACnB,CAACrB,MAAM,CAACvgB,UAAU,CAAC,IACnB0hB,IAAI,GAAG,CAAC,IACRZ,0BAA0B,IAAI,EACrC;MAED,MAAMmB,oBAAoB,GAAGzC,aAAa,CAACzhB,MAAM,CAACmjB,MAAM,IAChDA,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCS,MAAM,CAACC,iCAAiC,CAAC,IAAI,IAAI,IACjDD,MAAM,CAACrB,WAAW,CAAC,IAAIM,WAAW,CAACN,WAAW,CACrD,CAAC,CACGS,GAAG,CAACY,MAAM,IAAIA,MAAM,CAACgB,mBAAmB,CAAC,CAAC,CAC1CX,MAAM,CAAC,CAACpQ,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAAC;MAC/B,MAAM+Q,IAAI,GAAGtoB,QAAQ,CAACmI,aAAa,CAAC,KAAK,CAAC;MAC1CmgB,IAAI,CAACC,SAAS,GAAG,eAAeJ,YAAY,GAAG,YAAY,GAAG,EAAE,EAAE;MAClEG,IAAI,CAAC7Y,KAAK,CAAC+Y,cAAc,GAAG,GAAG7B,KAAK,GAAG,GAAG,GAAG;MAC7C2B,IAAI,CAACxjB,OAAO,CAAC8hB,QAAQ,GAAGA,QAAQ;MAChC0B,IAAI,CAACxjB,OAAO,CAAC2jB,QAAQ,GAAG/B,MAAM,CAACgC,SAAS,IAAI,EAAE;MAC9CJ,IAAI,CAACxjB,OAAO,CAAC6jB,QAAQ,GAAGjC,MAAM,CAACkC,SAAS,IAAI,EAAE;MAE9CN,IAAI,CAAC5jB,SAAS,GAAG;AAC7B;AACA;AACA,mDAAmDoiB,WAAW;AAC9D;AACA;AACA;AACA,wFAAwFF,QAAQ;AAChG,8EAA8EA,QAAQ,KAAKvkB,iBAAiB,KAAK+lB,oBAAoB,KAAKA,oBAAoB;AAC9J,uFAAuFxB,QAAQ;AAC/F;AACA;AACA;AACA,oEAAoEA,QAAQ,KAAKvkB,iBAAiB,KAAK8lB,YAAY;AACnH,0BAA0BA,YAAY,GAAG,QAAQ,GAAG,WAAW;AAC/D;AACA;AACA;AACA;AACA,8EAA8EvB,QAAQ,YAAYiB,IAAI;AACtG,gEAAgEjB,QAAQ,KAAKvkB,iBAAiB,KAAKwlB,IAAI,KAAKA,IAAI;AAChH;AACA;AACA,wEAAwEjB,QAAQ;AAChF,wEAAwEA,QAAQ;AAChF,wEAAwEA,QAAQ;AAChF,wEAAwEA,QAAQ;AAChF;AACA;AACA;AACA,wEAAwEA,QAAQ;AAChF,wEAAwEA,QAAQ;AAChF,wEAAwEA,QAAQ;AAChF,wEAAwEA,QAAQ;AAChF;AACA;AACA;AACA;AACA;AACA,+DAA+DA,QAAQ;AACvE,0BAA0B5C,WAAW,CAAC6E,yBAAyB,CACjCjC,QAAQ,CAAC;MAAA,EACTF,MAAM,CAACtE,UAAU,CAAC,CAAC;MACzB,CAAC;AACzB;AACA;AACA,aAAa;MAEDgE,IAAI,CAACxO,WAAW,CAAC0Q,IAAI,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAI,CAACQ,kBAAkB,CAAC,CAAC;IAEzB9E,WAAW,CAAC+E,wBAAwB,CAAC,CAAC;;IAEtC;IACA,IAAI,CAACC,qBAAqB,CAAC,CAAC;IAC5B,IAAI,CAACC,sBAAsB,CAAC,CAAC;EACjC;EACA,OAAOF,wBAAwBA,CAAA,EAAG;IAC9B,MAAM1C,wBAAwB,GAAGrC,WAAW,CAACkF,0BAA0B,CAAC,CAAC;IAEzE,MAAMC,eAAe,GAAGnpB,QAAQ,CAACoE,aAAa,CAAC,GAAG,GAAGglB,aAAa,GAAG,GAAG,GAAG5W,aAAa,GAAG,cAAc,CAAC;IAC1G2W,eAAe,CAACzkB,SAAS,GAAG,EAAE;IAE9B,MAAM8hB,gBAAgB,GAAGva,MAAM,CAAC/H,MAAM,CAAC6hB,KAAK,IAAIA,KAAK,CAACnL,gBAAgB,CAAC,IAAIyL,wBAAwB,CAAC,CAC/FI,GAAG,CAACV,KAAK,IAAIA,KAAK,CAACC,WAAW,CAAC,CAAC;IACrC,IAAIqD,gBAAgB,GAAG,EAAE;IACzB1D,aAAa,CAAChY,OAAO,CAAE0Z,MAAM,IAAK;MAC9B,IACQA,MAAM,CAAClhB,UAAU,CAAC,KAEdkhB,MAAM,CAACgB,mBAAmB,CAAC,GAAG,CAAC,IAC/BhB,MAAM,CAACO,YAAY,CAAC,IAAI,CAAC,IACzBP,MAAM,CAACI,YAAY,CAAC,IAAI,CAAC,IACzBJ,MAAM,CAACW,gBAAgB,CAAC;MAEhC;MAAA,GACIxB,gBAAgB,CAACgB,QAAQ,CAACH,MAAM,CAACrB,WAAW,CAAC,CAAC,EACpD;QACE;QACA,IAAID,KAAK,GAAG9Z,MAAM,CAAC/H,MAAM,CAAColB,CAAC,IAAIA,CAAC,CAACtD,WAAW,CAAC,IAAIqB,MAAM,CAACrB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,IAAIU,MAAM,GAAG/a,OAAO,CAACzH,MAAM,CAACqlB,CAAC,IAAIA,CAAC,CAAC1C,YAAY,CAAC,IAAIQ,MAAM,CAACR,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI2C,kBAAkB,GAAInC,MAAM,CAACC,iCAAiC,CAAC,IAAI,IAAI,GAAI;UAAE,CAAC5f,QAAQ,GAAG;QAAE,CAAC,GAAGiE,OAAO,CAACzH,MAAM,CAACqlB,CAAC,IAAIA,CAAC,CAAC1C,YAAY,CAAC,IAAIQ,MAAM,CAACC,iCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvL+B,gBAAgB,IAAI;AACpC,0BAA0BI,YAAY,KAAKpC,MAAM,CAACoC,YAAY,CAAC;AAC/D,qCAAqCzD,WAAW,KAAKD,KAAK,CAACnL,gBAAgB,CAAC;AAC5E,qCAAqCiM,YAAY,KAAKH,MAAM,CAAChf,QAAQ,CAAC;AACtE,qCAAqC4f,iCAAiC,KAAKkC,kBAAkB,CAAC9hB,QAAQ,CAAC;AACvG,qCAAqCkgB,YAAY,KAAKP,MAAM,CAACO,YAAY,CAAC;AAC1E,qCAAqCH,YAAY,KAAKJ,MAAM,CAACI,YAAY,CAAC;AAC1E,qCAAqCY,mBAAmB,KAAKhB,MAAM,CAACgB,mBAAmB,CAAC;AACxF,qCAAqCL,gBAAgB,KAAKX,MAAM,CAACW,gBAAgB,CAAC;AAClF;AACA,iBAAiB;MACL;IACJ,CAAC,CAAC;IACFmB,eAAe,CAACzkB,SAAS,GAAG2kB,gBAAgB;EAChD;EACA,OAAO9B,gCAAgCA,CAACX,QAAQ,EAAE8C,6BAA6B,EAAE;IAC7E,IAAIC,OAAO,GAAG3F,WAAW,CAAC4F,gBAAgB,CAAC,CAAC;IAC5C,OAAO;MACD,CAACH,YAAY,GAAG,CAAC,CAAC,GAAG9D,aAAa,CAAClnB,MAAM;MACzC,CAACunB,WAAW,GAAG2D,OAAO;MACtB,CAAC9C,YAAY,GAAGD,QAAQ;MACxB,CAACU,iCAAiC,GAAGoC,6BAA6B;MAClE,CAAC9B,YAAY,GAAG,CAAC;MACjB,CAACH,YAAY,GAAG,CAAC;MACjB,CAACY,mBAAmB,GAAG,CAAC;MACxB,CAACL,gBAAgB,GAAG,KAAK;MACzB,CAAC7hB,UAAU,GAAG;IACpB,CAAC;EACL;EACA,OAAO0f,gBAAgBA,CAAA,EAAG;IACtB,IAAI8D,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI1d,MAAM,CAACxN,MAAM,GAAG,CAAC,EAAE;MACnB,MAAMorB,wBAAwB,GAAG5d,MAAM,CAACwa,GAAG,CAACV,KAAK,IAAI;QAAE,OAAOA,KAAK,CAACnL,gBAAgB,CAAC;MAAE,CAAC,CAAC,CACpF8M,MAAM,CAAC,CAACoC,GAAG,EAAEC,GAAG,KAAK/O,IAAI,CAACC,GAAG,CAAC6O,GAAG,EAAEC,GAAG,CAAC,EAAE,CAAC,CAAC;MAChD,MAAMC,cAAc,GAAG/d,MAAM,CAAC/H,MAAM,CAAC6hB,KAAK,IAAIA,KAAK,CAACnL,gBAAgB,CAAC,IAAIiP,wBAAwB,CAAC;MAClG,IAAIG,cAAc,CAACvrB,MAAM,GAAG,CAAC,EAAE;QAC3BkrB,OAAO,GAAGK,cAAc,CAAC,CAAC,CAAC,CAAChE,WAAW,CAAC;MAC5C;MACApc,OAAO,CAACqF,GAAG,CAAC;QAAE,QAAQ,EAAE,kBAAkB;QAAE4a,wBAAwB;QAAEG,cAAc;QAAEL;MAAQ,CAAC,CAAC;IACpG;IACA,OAAOA,OAAO;EAClB;EACA,OAAOT,0BAA0BA,CAAA,EAAG;IAChC,MAAMjD,sBAAsB,GAAGjC,WAAW,CAACkC,yBAAyB,CAAC,CAAC;IACtE,OAAO9E,QAAQ,CAACtf,GAAG,CAACgB,sBAAsB,CAACmjB,sBAAsB,CAAC,CAAC;EACvE;EACA,OAAO2D,gBAAgBA,CAAA,EAAG;IACtB,MAAMvD,wBAAwB,GAAGrC,WAAW,CAACkF,0BAA0B,CAAC,CAAC;IACzE,IAAIS,OAAO,GAAG,CAAC;IACf,IAAI1d,MAAM,CAACxN,MAAM,GAAG,CAAC,EAAE;MACnB,IAAIurB,cAAc,GAAG/d,MAAM,CAAC/H,MAAM,CAAC6hB,KAAK,IAAIA,KAAK,CAACnL,gBAAgB,CAAC,IAAIyL,wBAAwB,CAAC;MAChG,IAAI2D,cAAc,CAACvrB,MAAM,GAAG,CAAC,EAAEkrB,OAAO,GAAGK,cAAc,CAAC,CAAC,CAAC,CAAChE,WAAW,CAAC;MACvEpc,OAAO,CAACqF,GAAG,CAAC;QAAE,QAAQ,EAAE,kBAAkB;QAAE+a,cAAc;QAAEL;MAAQ,CAAC,CAAC;IAC1E;IACA,OAAOA,OAAO;EAClB;EACA,OAAO5C,qBAAqBA,CAACH,QAAQ,EAAED,KAAK,EAAE;IAC1C,IAAIC,QAAQ,IAAI,IAAI,EAAE;MAClB,OAAO,UAAUD,KAAK,GAAG,CAAC,EAAE;IAChC;IACA,MAAMD,MAAM,GAAG/a,OAAO,CAACzH,MAAM,CAACwiB,MAAM,IAAIA,MAAM,CAACG,YAAY,CAAC,IAAID,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAMvD,MAAM,GAAGqD,MAAM,CAACtE,UAAU,CAAC;IACjC,MAAMoB,IAAI,GAAIH,MAAM,IAAI,IAAI,GAAI,IAAI,GAAGI,KAAK,CAACvf,MAAM,CAACsf,IAAI,IAAIA,IAAI,CAACpB,UAAU,CAAC,IAAIiB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM4G,IAAI,GAAIrD,QAAQ,IAAI,IAAI,GAAI,IAAI,GAAGhc,KAAK,CAAC8b,MAAM,CAACwD,UAAU,CAAC,CAAC;IAClE,OAAOxD,MAAM,CAAChf,QAAQ,CAAC,IAAI,GAAIuiB,IAAI,IAAI,IAAI,GAAI,OAAO,GAAGA,IAAI,CAACviB,QAAQ,CAAC,MAAO8b,IAAI,IAAI,IAAI,GAAI,OAAO,GAAGA,IAAI,CAAC9b,QAAQ,CAAC,EAAE;EAC5H;EACA,OAAOmhB,yBAAyBA,CAACjC,QAAQ,EAAE;IACvC,MAAMuD,uBAAuB,GAAGnG,WAAW,CAACkF,0BAA0B,CAAC,CAAC;IACxE,MAAM1C,gBAAgB,GAAGva,MAAM,CAAC/H,MAAM,CAAC6hB,KAAK,IAAIA,KAAK,CAACnL,gBAAgB,CAAC,IAAIuP,uBAAuB,CAAC,CAC9F1D,GAAG,CAACV,KAAK,IAAIA,KAAK,CAACC,WAAW,CAAC,CAAC;IACrC,OAAOra,OAAO,CACTzH,MAAM,CAACkmB,WAAW,IAAIA,WAAW,CAACvD,YAAY,CAAC,KAAKD,QAAQ,CAAC,CAC7DH,GAAG,CAAC2D,WAAW,IAAI;MAChB,MAAMjD,QAAQ,GAAGiD,WAAW,CAACvD,YAAY,CAAC;MAC1C,IAAIwD,sBAAsB,GAAGrG,WAAW,CAAC+C,qBAAqB,CAACI,QAAQ,CAAC;MACxE,MAAMQ,WAAW,GAAGhC,aAAa,CAACzhB,MAAM,CAACmjB,MAAM,IACvCA,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCS,MAAM,CAACC,iCAAiC,CAAC,IAAIH;MACjD;MAAA,GACIX,gBAAgB,CAACgB,QAAQ,CAACH,MAAM,CAACrB,WAAW,CAAC,CACpD,CAAC,CACGS,GAAG,CAACY,MAAM,IAAIA,MAAM,CAACI,YAAY,CAAC,CAAC,CACnCC,MAAM,CAAC,CAACoC,GAAG,EAAEQ,IAAI,KAAKR,GAAG,GAAGQ,IAAI,EAAE,CAAC,CAAC;MACzC,MAAMC,QAAQ,GAAI5C,WAAW,IAAI,EAAG;MAEpC,OAAO;AACvB,8DAA8Df,QAAQ,qBAAqBO,QAAQ;AACnG,2DAA2DkD,sBAAsB;AACjF;AACA,sFAAsFzD,QAAQ,qBAAqBO,QAAQ;AAC3H,wFAAwFP,QAAQ,qBAAqBO,QAAQ,YAAYQ,WAAW;AACpJ,0DAA0D4C,QAAQ,GAAG,QAAQ,GAAG,EAAE,qBAAqB3D,QAAQ,qBAAqBO,QAAQ,KAAK9kB,iBAAiB,KAAKslB,WAAW,KAAKA,WAAW;AAClM,qFAAqFf,QAAQ,qBAAqBO,QAAQ;AAC1H;AACA;AACA,iBAAiB;IACL,CAAC,CAAC,CACDzE,IAAI,CAAC,EAAE,CAAC;EACjB;EAEAsG,qBAAqBA,CAAA,EAAG;IACpB,IAAIwB,4BAA4B,GAAG,gBAAgB,GAAGtnB,OAAO,GAAG,GAAG,GAAGkJ,SAAS,GAAG,UAAU,GAAGqe,2BAA2B;IAC1Hnd,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAE4c,4BAA4B,EAAE,CAACxc,KAAK,EAAE0D,MAAM,KAAK;MAChF,MAAMgZ,MAAM,GAAGhZ,MAAM,CAACjM,SAAS,CAACC,QAAQ,CAACilB,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MAC5E,MAAMC,gCAAgC,GAAGlZ,MAAM,CAACnO,aAAa;MAC7D,MAAM0iB,sBAAsB,GAAG2E,gCAAgC,CAACxmB,aAAa,CAAC,OAAO,GAAGgI,SAAS,GAAG,GAAG,GAAGwO,gBAAgB,CAAC;MAC3H,MAAMyL,wBAAwB,GAAGjF,QAAQ,CAACtf,GAAG,CAACgB,sBAAsB,CAACmjB,sBAAsB,CAAC,CAAC;MAC7F,MAAM4E,eAAe,GAAGxE,wBAAwB,GAAGqE,MAAM;MACzD5oB,GAAG,CAACS,sBAAsB,CAAC0jB,sBAAsB,EAAE4E,eAAe,CAAC;MACnE/oB,GAAG,CAACmD,cAAc,CAACghB,sBAAsB,CAAC;MAC1C,IAAI,CAACzP,oCAAoC,CAAC,CAAC;MAC3C,IAAI,CAAC2P,aAAa,CAAC,CAAC;IACxB,CAAC,CAAC;EACN;EACA,OAAOI,oBAAoBA,CAACuE,YAAY,EAAE;IACtC,MAAMD,eAAe,GAAIC,YAAY,IAAI,IAAI,GAAIA,YAAY,GAAG,CAAC,GAAG9P,IAAI,CAACC,GAAG,CAAChP,MAAM,CAACwa,GAAG,CAACV,KAAK,IAAIA,KAAK,CAACnL,gBAAgB,CAAC,CAAC,CAAC;IAC1H,OAAO;MACD,CAACoL,WAAW,GAAG,CAAC6E,eAAe;MAC/B,CAAC3G,UAAU,GAAGzY,MAAM;MACpB,CAACgR,SAAS,GAAG,IAAI;MACjB,CAAC7B,gBAAgB,GAAGiQ,eAAe;MACnC,CAAC1kB,UAAU,GAAG;IACpB,CAAC;EACL;EACA8iB,sBAAsBA,CAAA,EAAG;IACrB;IACA,IAAI8B,sBAAsB,GAAG,gBAAgB;IAC7Czd,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAEmd,sBAAsB,EAAE,CAAC/c,KAAK,EAAE0D,MAAM,KAAK;MAC1E;MACA,MAAMkV,QAAQ,GAAGxF,QAAQ,CAAC1P,MAAM,CAAC5M,OAAO,CAAC8hB,QAAQ,CAAC;MAClD,MAAM8D,MAAM,GAAGtJ,QAAQ,CAAC1P,MAAM,CAAC5M,OAAO,CAAC4lB,MAAM,CAAC;MAC9C,MAAMM,aAAa,GAAGhH,WAAW,CAAC4F,gBAAgB,CAAC,CAAC;MACpD,MAAMqB,WAAW,GAAGtF,aAAa,CAACuF,SAAS,CAAC7D,MAAM,IAC1CA,MAAM,CAACrB,WAAW,CAAC,IAAIgF,aAAa,IACpC3D,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCS,MAAM,CAACC,iCAAiC,CAAC,IAAI,IACpD,CAAC;MACF,IAAI,CAAC6D,UAAU,CACXvE,QAAQ,CAAC;MAAA,EACP8D,MAAM,CAAC;MAAA,EACP,IAAI,CAAC;MAAA,EACL,IAAI,CAAC;MAAA,EACLO,WAAW,CAAC;MAClB,CAAC;IACL,CAAC,CAAC;;IAEF;IACA,IAAIG,sBAAsB,GAAG,gBAAgB;IAC7C9d,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAEwd,sBAAsB,EAAE,CAACpd,KAAK,EAAE0D,MAAM,KAAK;MAC1E,MAAMkV,QAAQ,GAAGxF,QAAQ,CAAC1P,MAAM,CAAC5M,OAAO,CAAC8hB,QAAQ,CAAC;MAClD,MAAM8D,MAAM,GAAGtJ,QAAQ,CAAC1P,MAAM,CAAC5M,OAAO,CAAC4lB,MAAM,CAAC;MAC9C,MAAMM,aAAa,GAAGhH,WAAW,CAAC4F,gBAAgB,CAAC,CAAC;MACpD,MAAMqB,WAAW,GAAGtF,aAAa,CAACuF,SAAS,CAAC7D,MAAM,IAC1CA,MAAM,CAACrB,WAAW,CAAC,IAAIgF,aAAa,IACpC3D,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCS,MAAM,CAACC,iCAAiC,CAAC,IAAI,IACpD,CAAC;MACF,IAAI,CAAC6D,UAAU,CACXvE,QAAQ,CAAC;MAAA,EACP8D,MAAM,CAAC;MAAA,EACP,KAAK,CAAC;MAAA,EACN,IAAI,CAAC;MAAA,EACLO,WAAW,CAAC;MAClB,CAAC;IACL,CAAC,CAAC;;IAEF;IACA,IAAII,4BAA4B,GAAG,YAAY;IAC/C/d,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAEyd,4BAA4B,EAAE,CAACrd,KAAK,EAAE0D,MAAM,KAAK;MAChF,MAAMkV,QAAQ,GAAGxF,QAAQ,CAAC1P,MAAM,CAAC5M,OAAO,CAAC8hB,QAAQ,CAAC;MAClD,MAAM0E,aAAa,GAAG5Z,MAAM,CAACjM,SAAS,CAACC,QAAQ,CAAC,aAAa,CAAC;MAC9D,MAAMglB,MAAM,GAAIY,aAAa,GAAI,CAAC,CAAC,GAAG,CAAC;MACvC,IAAI,CAACC,qBAAqB,CAAC3E,QAAQ,EAAE8D,MAAM,CAAC;IAChD,CAAC,CAAC;;IAEF;IACA,IAAIc,8BAA8B,GAAG,aAAa;IAClDle,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAE4d,8BAA8B,EAAE,CAACxd,KAAK,EAAE0D,MAAM,KAAK;MAClF,MAAMkV,QAAQ,GAAGxF,QAAQ,CAAC1P,MAAM,CAAC5M,OAAO,CAAC8hB,QAAQ,CAAC;MAClD,MAAMO,QAAQ,GAAG/F,QAAQ,CAAC1P,MAAM,CAAC5M,OAAO,CAACqiB,QAAQ,CAAC;MAClD,MAAMmE,aAAa,GAAG5Z,MAAM,CAACjM,SAAS,CAACC,QAAQ,CAAC,cAAc,CAAC;MAC/D,MAAMglB,MAAM,GAAIY,aAAa,GAAI,CAAC,CAAC,GAAG,CAAC;MACvC,IAAI,CAACG,qBAAqB,CAAC7E,QAAQ,EAAEO,QAAQ,EAAEuD,MAAM,CAAC;IAC1D,CAAC,CAAC;;IAEF;IACA,IAAIgB,6BAA6B,GAAG,gBAAgB;IACpDpe,MAAM,CAACM,kBAAkB,CAAC,OAAO,EAAE8d,6BAA6B,EAAE,CAAC1d,KAAK,EAAE0D,MAAM,KAAK;MACjF,MAAMkV,QAAQ,GAAGxF,QAAQ,CAAC1P,MAAM,CAAC5M,OAAO,CAAC8hB,QAAQ,CAAC;MAClD,IAAI,CAAC+E,eAAe,CAAC/E,QAAQ,CAAC;IAClC,CAAC,CAAC;EACN;EAEAuE,UAAUA,CAACvE,QAAQ,EAAE8D,MAAM,EAAEkB,iBAAiB,GAAG,KAAK,EAAEC,YAAY,GAAG,KAAK,EAAEZ,WAAW,GAAG,IAAI,EAAE;IAC9F,MAAM3C,IAAI,GAAGtoB,QAAQ,CAACoE,aAAa,CAAC,gCAAgCwiB,QAAQ,IAAI,CAAC;IACjF;;IAEA,MAAMkF,SAAS,GAAGxD,IAAI,CAAClkB,aAAa,CAAC,+BAA+BwiB,QAAQ,IAAI,CAAC;IACjF,MAAMmF,WAAW,GAAGzD,IAAI,CAAClkB,aAAa,CAAC,iCAAiCwiB,QAAQ,IAAI,CAAC;IAErF,MAAMoF,WAAW,GAAG5K,QAAQ,CAAC0K,SAAS,CAAChtB,KAAK,CAAC,IAAI,CAAC;IAClD,MAAMmtB,OAAO,GAAGD,WAAW,GAAGtB,MAAM,IAAKkB,iBAAiB,GAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAErE9pB,GAAG,CAACG,+BAA+B,CAAC8pB,WAAW,EAAEE,OAAO,CAAC;IACzDnqB,GAAG,CAACmD,cAAc,CAAC8mB,WAAW,CAAC;IAC/BD,SAAS,CAAChtB,KAAK,GAAGmtB,OAAO;IACzBF,WAAW,CAACnpB,WAAW,GAAGqpB,OAAO;IAEjC,IAAIJ,YAAY,EAAE;MACd,IAAIvN,SAAS,GAAIsN,iBAAiB,GAAIhE,YAAY,GAAGH,YAAY;MACjE9B,aAAa,CAACsF,WAAW,CAAC,CAAC3M,SAAS,CAAC,IAAIoM,MAAM;IACnD;IAEA1G,WAAW,CAAC+E,wBAAwB,CAAC,CAAC;;IAEtC;IACA,IAAI,CAACvS,oCAAoC,CAAC,CAAC;EAC/C;EAEAiV,qBAAqBA,CAAC7E,QAAQ,EAAEO,QAAQ,EAAEuD,MAAM,EAAE;IAC9C,MAAMpC,IAAI,GAAGtoB,QAAQ,CAACoE,aAAa,CAAC,gCAAgCwiB,QAAQ,IAAI,CAAC;IACjF;;IAEA,MAAMsF,WAAW,GAAG5D,IAAI,CAAClkB,aAAa,CAAC,iCAAiCwiB,QAAQ,sBAAsBO,QAAQ,IAAI,CAAC;IACnH,MAAMgF,aAAa,GAAG7D,IAAI,CAAClkB,aAAa,CAAC,mCAAmCwiB,QAAQ,sBAAsBO,QAAQ,IAAI,CAAC;IAEvH,MAAMiF,aAAa,GAAGhL,QAAQ,CAAC8K,WAAW,CAACptB,KAAK,CAAC,IAAI,CAAC;IACtD,MAAMutB,SAAS,GAAGrR,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEmR,aAAa,GAAG1B,MAAM,CAAC;IACrDA,MAAM,GAAG2B,SAAS,GAAGD,aAAa;IAClCtqB,GAAG,CAACG,+BAA+B,CAACkqB,aAAa,EAAEE,SAAS,CAAC;IAC7DvqB,GAAG,CAACmD,cAAc,CAACknB,aAAa,CAAC;IACjCD,WAAW,CAACptB,KAAK,GAAGutB,SAAS;IAC7BF,aAAa,CAACvpB,WAAW,GAAGypB,SAAS;;IAErC;IACA,IAAIA,SAAS,IAAI,EAAE,EAAE;MACjBF,aAAa,CAAC1mB,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;IACzC,CAAC,MAAM;MACHwmB,aAAa,CAAC1mB,SAAS,CAACG,MAAM,CAAC,QAAQ,CAAC;IAC5C;IAEA,MAAMolB,aAAa,GAAGhH,WAAW,CAAC4F,gBAAgB,CAAC,CAAC;IACpD,MAAMqB,WAAW,GAAGtF,aAAa,CAACuF,SAAS,CAACoB,YAAY,IAChDA,YAAY,CAACtG,WAAW,CAAC,IAAIgF,aAAa,IAC1CsB,YAAY,CAACzF,YAAY,CAAC,IAAID,QAAQ,IACtC0F,YAAY,CAAChF,iCAAiC,CAAC,IAAIH,QAC1D,CAAC;IACFxB,aAAa,CAACsF,WAAW,CAAC,CAACxD,YAAY,CAAC,IAAIiD,MAAM;IAElD,IAAIkB,iBAAiB,GAAG,KAAK;IAC7B,IAAI,CAACT,UAAU,CACTvE,QAAQ,CAAC;IAAA,EACT,CAAC8D,MAAM,CAAC;IAAA,EACRkB,iBAAiB,CAAC;IAAA,EAClB,KAAK,CAAC;IAAA,EACNX,WAAW,CAAC;IAClB,CAAC;IACD;EACJ;EAEAM,qBAAqBA,CAAC3E,QAAQ,EAAE8D,MAAM,EAAE;IACpC,MAAMpC,IAAI,GAAGtoB,QAAQ,CAACoE,aAAa,CAAC,gCAAgCwiB,QAAQ,IAAI,CAAC;IACjF;;IAEA,MAAM2F,YAAY,GAAGjE,IAAI,CAAClkB,aAAa,CAAC,kCAAkCwiB,QAAQ,IAAI,CAAC;IACvF,MAAM4F,aAAa,GAAGpL,QAAQ,CAACmL,YAAY,CAAC3pB,WAAW,CAAC,IAAI,CAAC;IAC7D,MAAM6pB,SAAS,GAAGzR,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEuR,aAAa,GAAG9B,MAAM,CAAC;IAErD6B,YAAY,CAAC3pB,WAAW,GAAG6pB,SAAS;IACpC3qB,GAAG,CAACG,+BAA+B,CAACsqB,YAAY,EAAEE,SAAS,CAAC;IAC5D3qB,GAAG,CAACmD,cAAc,CAACsnB,YAAY,CAAC;IAEhC,MAAMvB,aAAa,GAAGhH,WAAW,CAAC4F,gBAAgB,CAAC,CAAC;IACpD,MAAMqB,WAAW,GAAGtF,aAAa,CAACuF,SAAS,CAAC7D,MAAM,IAC1CA,MAAM,CAACrB,WAAW,CAAC,IAAIgF,aAAa,IACpC3D,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCS,MAAM,CAACC,iCAAiC,CAAC,IAAI,IACpD,CAAC;IACF3B,aAAa,CAACsF,WAAW,CAAC,CAAC5C,mBAAmB,CAAC,GAAGoE,SAAS;IAE3DzI,WAAW,CAAC+E,wBAAwB,CAAC,CAAC;;IAEtC;IACA,IAAI,CAACvS,oCAAoC,CAAC,CAAC;EAC/C;EAEAmV,eAAeA,CAAC/E,QAAQ,EAAE;IACtB,MAAM0B,IAAI,GAAGtoB,QAAQ,CAACoE,aAAa,CAAC,gCAAgCwiB,QAAQ,IAAI,CAAC;IACjF,IAAI,CAAC0B,IAAI,EAAE;IAEX,MAAMoE,YAAY,GAAGpE,IAAI,CAAClkB,aAAa,CAAC,kCAAkCwiB,QAAQ,IAAI,CAAC;IACvF,MAAM+F,aAAa,GAAGrE,IAAI,CAAC7iB,SAAS,CAACC,QAAQ,CAAC,YAAY,CAAC;IAE3D,IAAIinB,aAAa,EAAE;MACfrE,IAAI,CAAC7iB,SAAS,CAACG,MAAM,CAAC,YAAY,CAAC;MACnC8mB,YAAY,CAAC9pB,WAAW,GAAG,WAAW;IAC1C,CAAC,MAAM;MACH0lB,IAAI,CAAC7iB,SAAS,CAACE,GAAG,CAAC,YAAY,CAAC;MAChC+mB,YAAY,CAAC9pB,WAAW,GAAG,QAAQ;IACvC;IACA,MAAMulB,YAAY,GAAGG,IAAI,CAAC7iB,SAAS,CAACC,QAAQ,CAAC,YAAY,CAAC;IAE1D,MAAMslB,aAAa,GAAGhH,WAAW,CAAC4F,gBAAgB,CAAC,CAAC;IACpD,MAAMqB,WAAW,GAAGtF,aAAa,CAACuF,SAAS,CAAC7D,MAAM,IAC1CA,MAAM,CAACrB,WAAW,CAAC,IAAIgF,aAAa,IACpC3D,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCS,MAAM,CAACC,iCAAiC,CAAC,IAAI,IACpD,CAAC;IACF3B,aAAa,CAACsF,WAAW,CAAC,CAACjD,gBAAgB,CAAC,GAAGG,YAAY;IAE3DrmB,GAAG,CAACG,+BAA+B,CAACyqB,YAAY,EAAEvE,YAAY,CAAC;IAC/DrmB,GAAG,CAACmD,cAAc,CAACynB,YAAY,CAAC;IAEhC,IAAI,CAAC5D,kBAAkB,CAAC,CAAC;IACzB9E,WAAW,CAAC+E,wBAAwB,CAAC,CAAC;;IAEtC;IACA,IAAI,CAACvS,oCAAoC,CAAC,CAAC;EAC/C;EACAsS,kBAAkBA,CAAA,EAAG;IACjB,IAAI8D,UAAU,GAAG5sB,QAAQ,CAAC8kB,cAAc,CAAC,aAAa,CAAC;IACvD,IAAI+H,kBAAkB,GAAGD,UAAU,CAAC3sB,gBAAgB,CAAC,cAAc,CAAC;IACpE,IAAI6sB,cAAc,GAAG,EAAE;IACvB,IAAIC,eAAe,GAAG,EAAE;IACxBF,kBAAkB,CAAClf,OAAO,CAAC,CAACqf,UAAU,EAAErG,KAAK,KAAK;MAC9CmG,cAAc,CAACzf,IAAI,CAAC2f,UAAU,CAAC/S,SAAS,CAAC,IAAI,CAAC,CAAC;MAC/C8S,eAAe,CAAC1f,IAAI,CAAC;QACf,CAAC2a,gBAAgB,GAAGgF,UAAU,CAACvnB,SAAS,CAACC,QAAQ,CAACsiB,gBAAgB,CAAC;QACnE,CAACnB,YAAY,GAAGmG,UAAU,CAACloB,OAAO,CAAC,UAAU,CAAC;QAC9C,CAAC8V,gBAAgB,GAAG+L;MAC1B,CAAC,CAAC;IACN,CAAC,CAAC;IACF,IAAIwD,uBAAuB,GAAGnG,WAAW,CAACkF,0BAA0B,CAAC,CAAC;IACtE,IAAI+D,sBAAsB,GAAG,EAAE;IAC/B,IAAIC,SAAS,EAAEC,SAAS,EAAEC,kBAAkB,EAAEC,kBAAkB,EAAEC,OAAO,EAAEC,OAAO,EAAEC,eAAe;IACnGT,eAAe,CAAC1V,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;MAC3B2V,SAAS,GAAG5V,CAAC,CAACuP,YAAY,CAAC;MAC3BsG,SAAS,GAAG5V,CAAC,CAACsP,YAAY,CAAC;MAC3BuG,kBAAkB,GAAGpJ,WAAW,CAACyJ,kBAAkB,CAACP,SAAS,EAAE/C,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC;MAC/FkD,kBAAkB,GAAGrJ,WAAW,CAACyJ,kBAAkB,CAACN,SAAS,EAAEhD,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC;MAC/FmD,OAAO,GAAG3hB,OAAO,CAACzH,MAAM,CAACqlB,CAAC,IAAIA,CAAC,CAAC1C,YAAY,CAAC,IAAIqG,SAAS,CAAC,CAAC,CAAC,CAAC;MAC9DK,OAAO,GAAG5hB,OAAO,CAACzH,MAAM,CAACqlB,CAAC,IAAIA,CAAC,CAAC1C,YAAY,CAAC,IAAIsG,SAAS,CAAC,CAAC,CAAC,CAAC;MAC9D,OACMxhB,OAAO,CAAClN,MAAM,GAAG2uB,kBAAkB,GACnCE,OAAO,CAAC1S,gBAAgB,CAAC,IAEzBjP,OAAO,CAAClN,MAAM,GAAG4uB,kBAAkB,GACnCE,OAAO,CAAC3S,gBAAgB,CAAC,CAC9B;IACL,CAAC,CAAC,CAACjN,OAAO,CAAE+f,cAAc,IAAK;MAC3BF,eAAe,GAAGE,cAAc,CAAC9S,gBAAgB,CAAC;MAClDqS,sBAAsB,IAAIH,cAAc,CAACU,eAAe,CAAC,CAACG,SAAS;IACvE,CAAC,CAAC;IAEFf,UAAU,CAACloB,SAAS,GAAGuoB,sBAAsB;IAE7CL,UAAU,CAAC3sB,gBAAgB,CAAC,GAAG,GAAG6N,eAAe,CAAC,CAACH,OAAO,CAAE4I,kBAAkB,IAAK;MAC/EA,kBAAkB,CAAC9Q,SAAS,CAACG,MAAM,CAACkI,eAAe,CAAC;IACxD,CAAC,CAAC;IAEF,IAAI,CAACmb,sBAAsB,CAAC,CAAC;EACjC;EACA,OAAOwE,kBAAkBA,CAAC7G,QAAQ,EAAEgH,iBAAiB,GAAG,IAAI,EAAE;IAC1D,IAAIA,iBAAiB,IAAI,IAAI,EAAEA,iBAAiB,GAAG5J,WAAW,CAACkF,0BAA0B,CAAC,CAAC;IAC3F,MAAM2E,gBAAgB,GAAG5hB,MAAM,CAAC/H,MAAM,CAAC6hB,KAAK,IAAIA,KAAK,CAACnL,gBAAgB,CAAC,IAAIgT,iBAAiB,CAAC,CACxFnH,GAAG,CAACV,KAAK,IAAIA,KAAK,CAACC,WAAW,CAAC,CAAC;IACrC,IAAI8H,yBAAyB,GAAGnI,aAAa,CAACzhB,MAAM,CAACmjB,MAAM;IACvD;IACIwG,gBAAgB,CAACrG,QAAQ,CAACH,MAAM,CAACrB,WAAW,CAAC,CAAC,IAC9CqB,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCS,MAAM,CAACW,gBAAgB,CAC9B,CAAC,CAACvpB,MAAM,GAAG,CAAC;IACb,IAAIsvB,sBAAsB,GAAG,CAAC,CAAC;IAC/B,IAAIC,aAAa;IACjBrI,aAAa,CAACzhB,MAAM,CAACmjB,MAAM;IACvB;IACIwG,gBAAgB,CAACrG,QAAQ,CAACH,MAAM,CAACrB,WAAW,CAAC,CAAC,IAC9CqB,MAAM,CAACR,YAAY,CAAC,IAAID,QAAQ,IAChCS,MAAM,CAACC,iCAAiC,CAAC,IAAI,IACpD,CAAC,CACG3Z,OAAO,CAAE0Z,MAAM,IAAK;MACjB2G,aAAa,GAAG3G,MAAM,CAACC,iCAAiC,CAAC;MACzDyG,sBAAsB,CAACC,aAAa,CAAC,GAC/B3G,MAAM,CAACI,YAAY,CAAC,IAClBsG,sBAAsB,CAACC,aAAa,CAAC,IAAI,IAAI,GAAI,CAAC,GAAGD,sBAAsB,CAACC,aAAa,CAAC,CAAC;IACvG,CAAC,CAAC;IACN,IAAIC,2BAA2B,GAAGptB,MAAM,CAACC,IAAI,CAACitB,sBAAsB,CAAC,CAChEtH,GAAG,CAAEG,QAAQ,IAAKmH,sBAAsB,CAACnH,QAAQ,CAAC,CAAC,CACnDc,MAAM,CAAC,CAACoC,GAAG,EAAEC,GAAG,KAAK/O,IAAI,CAACC,GAAG,CAAC6O,GAAG,EAAEC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChD,IAAImE,gBAAgB,GAAGvI,aAAa,CAACzhB,MAAM,CAACmjB,MAAM;IAC9C;IACIwG,gBAAgB,CAACrG,QAAQ,CAACH,MAAM,CAACrB,WAAW,CAAC,CAAC,IAC9CqB,MAAM,CAACR,YAAY,CAAC,IAAID,QAC/B,CAAC,CACGH,GAAG,CAAEY,MAAM,IAAKA,MAAM,CAACI,YAAY,CAAC,GAAGJ,MAAM,CAACO,YAAY,CAAC,CAAC,CAC5DF,MAAM,CAAC,CAACpQ,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAAC;IAC/B3N,OAAO,CAACqF,GAAG,CAAC;MAAE2e,iBAAiB;MAAEC,gBAAgB;MAAEC,yBAAyB;MAAEG,2BAA2B;MAAEC;IAAiB,CAAC,CAAC;IAC9H,OACQJ,yBAAyB,IACzBG,2BAA2B,IAAI,EAAE,IACjCC,gBAAgB,IAAIpG,YAAY;EAE5C;EAEA,OAAOxD,iBAAiBA,CAAA,EAAG;IACvB,MAAMO,gBAAgB,GAAG7kB,QAAQ,CAAC8kB,cAAc,CAAC,aAAa,CAAC;IAC/D,IAAI,CAACD,gBAAgB,EAAE;IAEvB,MAAMsJ,WAAW,GAAG/M,QAAQ,CAACyD,gBAAgB,CAAC/lB,KAAK,CAAC;IACpD,MAAMsnB,IAAI,GAAGpmB,QAAQ,CAAC8kB,cAAc,CAAC,iBAAiB,CAAC;IACvD,IAAI,CAACsB,IAAI,EAAE;IAEXA,IAAI,CAAC1hB,SAAS,GAAG,EAAE;IACnB,MAAM0pB,eAAe,GAAGpuB,QAAQ,CAAC8kB,cAAc,CAACuJ,4BAA4B,CAAC;IAC7E,IAAI3H,MAAM,EAAE4H,OAAO,EAAEC,cAAc,EAAEC,OAAO,EAAEC,OAAO,EAAEC,SAAS;IAChE,KAAK,IAAI9vB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuvB,WAAW,EAAEvvB,CAAC,EAAE,EAAE;MAClC,IAAIA,CAAC,GAAG+M,OAAO,CAAClN,MAAM,EAAE;QACpBioB,MAAM,GAAG/a,OAAO,CAAC/M,CAAC,CAAC;MACvB,CAAC,MACI;QACD8nB,MAAM,GAAG1C,WAAW,CAAC2K,qBAAqB,CAAC,CAAC;QAC5ChjB,OAAO,CAAC0B,IAAI,CAACqZ,MAAM,CAAC;MACxB;MACA4H,OAAO,GAAGF,eAAe,CAACnU,SAAS,CAAC,IAAI,CAAC;MACzCqU,OAAO,CAACnZ,eAAe,CAAC,IAAI,CAAC;MAC7BmZ,OAAO,CAACnsB,YAAY,CAACyY,gBAAgB,EAAEhc,CAAC,GAAG,CAAC,CAAC;MAC7C0vB,OAAO,CAAC7oB,SAAS,CAACG,MAAM,CAACmK,eAAe,CAAC;MACzCwe,cAAc,GAAGD,OAAO,CAAClqB,aAAa,CAAC,OAAO,CAAC;MAC/CmqB,cAAc,CAAC9lB,SAAS,GAAG,SAAS,IAAI7J,CAAC,GAAG,CAAC,CAAC;MAC9C4vB,OAAO,GAAGF,OAAO,CAAClqB,aAAa,CAAC,oBAAoB,CAAC;MACrDtC,GAAG,CAACQ,kCAAkC,CAACksB,OAAO,EAAE9H,MAAM,CAACwD,UAAU,CAAC,CAAC;MACnEuE,OAAO,GAAGH,OAAO,CAAClqB,aAAa,CAAC,oBAAoB,CAAC;MACrDtC,GAAG,CAACQ,kCAAkC,CAACmsB,OAAO,EAAE/H,MAAM,CAACtE,UAAU,CAAC,CAAC;MACnEsM,SAAS,GAAGJ,OAAO,CAAClqB,aAAa,CAAC,mBAAmB,CAAC;MACtDtC,GAAG,CAACQ,kCAAkC,CAACosB,SAAS,EAAEhI,MAAM,CAAChf,QAAQ,CAAC,CAAC;MACnEkC,OAAO,CAACqF,GAAG,CAAC,UAAU,EAAEyX,MAAM,CAAC;MAC/BN,IAAI,CAACxO,WAAW,CAAC0W,OAAO,CAAC;IAC7B;EACJ;EACA,OAAOK,qBAAqBA,CAAA,EAAG;IAC3B,OAAO;MACD,CAAC9H,YAAY,GAAG,CAAClb,OAAO,CAAClN,MAAM;MAC/B,CAACylB,UAAU,GAAGzY,MAAM;MACpB,CAACye,UAAU,GAAGD,IAAI,CAACC,UAAU,CAAC;MAC9B,CAAC9H,UAAU,GAAG,CAAC;MACf,CAAC1a,QAAQ,GAAG,EAAE;MACd,CAAC+U,SAAS,GAAG,IAAI;MACjB,CAAC7B,gBAAgB,GAAGjP,OAAO,CAAClN,MAAM;MAClC,CAAC0H,UAAU,GAAG;IACpB,CAAC;EACL;EAEA,MAAM6e,SAASA,CAAA,EAAG;IACd,MAAMH,gBAAgB,GAAG7kB,QAAQ,CAAC8kB,cAAc,CAAC,aAAa,CAAC;IAC/D,IAAI,CAACD,gBAAgB,EAAE;IAEvB,MAAMsJ,WAAW,GAAG/M,QAAQ,CAACyD,gBAAgB,CAAC/lB,KAAK,CAAC;IACpD,MAAM8vB,aAAa,GAAG,EAAE;IAExB,IAAIC,kBAAkB,EAAEjI,QAAQ,EAAEF,MAAM,EAAE8H,OAAO,EAAEM,MAAM,EAAEL,OAAO,EAAEpL,MAAM,EAAEqL,SAAS,EAAEpe,IAAI;IAC3F,KAAK,IAAI1R,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuvB,WAAW,EAAEvvB,CAAC,EAAE,EAAE;MAClCiwB,kBAAkB,GAAG7uB,QAAQ,CAACoE,aAAa,CAAC,6BAA6B,GAAGwW,gBAAgB,GAAG,IAAI,IAAIhc,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;MACrH4vB,OAAO,GAAGK,kBAAkB,CAACzqB,aAAa,CAAC,oBAAoB,CAAC;MAChEqqB,OAAO,GAAGI,kBAAkB,CAACzqB,aAAa,CAAC,oBAAoB,CAAC;MAChEsqB,SAAS,GAAGG,kBAAkB,CAACzqB,aAAa,CAAC,mBAAmB,CAAC;MAEjE0qB,MAAM,GAAGhtB,GAAG,CAACgB,sBAAsB,CAAC0rB,OAAO,CAAC;MAC5CnL,MAAM,GAAGvhB,GAAG,CAACgB,sBAAsB,CAAC2rB,OAAO,CAAC;MAC5Cne,IAAI,GAAGoe,SAAS,GAAGA,SAAS,CAAC5vB,KAAK,CAACH,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;;MAE1DioB,QAAQ,GAAGiI,kBAAkB,CAACxqB,YAAY,CAACwiB,YAAY,CAAC;MACxDH,MAAM,GAAG/a,OAAO,CAACzH,MAAM,CAACqlB,CAAC,IAAIA,CAAC,CAAC1C,YAAY,CAAC,IAAID,QAAQ,CAAC,CAAC,CAAC,CAAC;MAC5DgI,aAAa,CAACvhB,IAAI,CAAC;QACb,GAAGqZ,MAAM;QACT,CAACxC,UAAU,GAAGzY,MAAM;QACpB,CAACye,UAAU,GAAG4E,MAAM;QACpB,CAAC1M,UAAU,GAAGiB,MAAM;QACpB,CAAC3b,QAAQ,GAAG4I,IAAI;QAChB,CAACsK,gBAAgB,GAAGhc,CAAC,GAAG,CAAC;QACzB,CAACuH,UAAU,GAAG;MACpB,CAAC,CAAC;IACN;;IAEA;IACA,MAAM2E,OAAO,GAAG,cAAc;IAC9B,MAAMikB,IAAI,GAAG,IAAI;IACjBrmB,GAAG,CAACgD,eAAe,CAACkjB,aAAa,EAAE,IAAI,EAAE9jB,OAAO,CAAC,CAC5CkH,IAAI,CAAC5S,IAAI,IAAI;MACV,IAAIA,IAAI,CAACma,UAAU,CAAC,IAAIC,WAAW,EAAE;QACjCuV,IAAI,CAAChd,KAAK,CAAC,CAAC;QACZ3H,MAAM,CAACC,QAAQ,CAAC2kB,MAAM,CAAC,CAAC;MAC5B,CAAC,MACI;QACDplB,OAAO,CAACD,KAAK,CAAC,yBAAyB,EAAEvK,IAAI,CAACsa,WAAW,CAAC,CAAC;QAC3DsK,WAAW,CAACiL,SAAS,CAAC,2CAA2C,CAAC;MACtE;IACJ,CAAC,CAAC,CACDjW,KAAK,CAACrP,KAAK,IAAI;MACZC,OAAO,CAACD,KAAK,CAAC,sBAAsB,EAAEA,KAAK,CAAC;MAC5Cqa,WAAW,CAACiL,SAAS,CAAC,2CAA2C,CAAC;IACtE,CAAC,CAAC,CACDC,OAAO,CAAC,MAAM,CACf,CAAC,CAAC;EACV;EAEA,OAAOtK,SAASA,CAAA,EAAG;IACf,IAAIuK,OAAO,CAAC,uEAAuE,CAAC,EAAE;MAClF9gB,YAAY,CAAC+gB,UAAU,CAAC,WAAW3jB,MAAM,EAAE,CAAC;MAC5CrB,MAAM,CAACC,QAAQ,CAACC,IAAI,GAAG+kB,aAAa;IACxC;EACJ;EAEA,MAAMjkB,QAAQA,CAAA,EAAG;IACb;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACQ,MAAMN,OAAO,GAAG,oBAAoB;IACpC,MAAMikB,IAAI,GAAG,IAAI;IACjBrmB,GAAG,CAACsD,0BAA0B,CAACC,MAAM,EAAE0Z,aAAa,EAAE,IAAI,EAAE7a,OAAO,CAAC,CAC/DkH,IAAI,CAAC5S,IAAI,IAAI;MACV,IAAIA,IAAI,CAACma,UAAU,CAAC,IAAIC,WAAW,EAAE;QACjCuV,IAAI,CAAChd,KAAK,CAAC,CAAC;QACZ3H,MAAM,CAACC,QAAQ,CAAC2kB,MAAM,CAAC,CAAC;MAC5B,CAAC,MACI;QACDplB,OAAO,CAACD,KAAK,CAAC,gCAAgC,EAAEvK,IAAI,CAACsa,WAAW,CAAC,CAAC;QAClEsK,WAAW,CAACiL,SAAS,CAAC,+CAA+C,CAAC;MAC1E;IACJ,CAAC,CAAC,CACDjW,KAAK,CAACrP,KAAK,IAAI;MACZC,OAAO,CAACD,KAAK,CAAC,8BAA8B,EAAEA,KAAK,CAAC;MACpDqa,WAAW,CAACiL,SAAS,CAAC,+CAA+C,CAAC;IAC1E,CAAC,CAAC,CACDC,OAAO,CAAC,MAAM,CACf,CAAC,CAAC;EACV;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAEI5a,qBAAqBA,CAAA,EAAG;IACpB,IAAI,CAAClJ,QAAQ,CAAC,CAAC;EACnB;EACA,OAAO6jB,SAASA,CAACngB,OAAO,EAAE;IACtB;IACA,MAAMwgB,YAAY,GAAGtvB,QAAQ,CAAC8kB,cAAc,CAAC,cAAc,CAAC;IAC5D,IAAIwK,YAAY,EAAE;MACd,MAAMC,UAAU,GAAGD,YAAY,CAAClrB,aAAa,CAAC,6BAA6B,CAAC;MAC5E,IAAImrB,UAAU,EAAE;QACZA,UAAU,CAAC3sB,WAAW,GAAGkM,OAAO;MACpC;MACAwgB,YAAY,CAAC7pB,SAAS,CAACG,MAAM,CAAC,QAAQ,CAAC;MACvC0pB,YAAY,CAAC7f,KAAK,CAAC6C,OAAO,GAAG,MAAM;IACvC,CAAC,MAAM;MACH;MACAhL,KAAK,CAACwH,OAAO,CAAC;IAClB;EACJ;EAEAiD,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ;;AAEA;AACAiS,WAAW,CAACwL,YAAY,GAAG,IAAI,C;;ACj7BA;AACc;AACN;AAExB,MAAMC,YAAY,SAASjc,aAAa,CAAC;EACpD,OAAO3J,IAAI,GAAG6lB,gBAAgB;EAC9B,OAAO1V,eAAe,GAAGkK,UAAU;EACnC5K,oBAAoB,GAAG5Q,GAAG,CAAC0C,QAAQ;EAEnC8E,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;EACjB;EAEAI,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;EAC3B;EACA0D,aAAaA,CAAA,EAAG;IACZ;AACR;AACA;AACA;EAHQ;EAMJ2E,YAAYA,CAACC,OAAO,EAAE;IAClB,IAAIA,OAAO,IAAI,IAAI,EAAE;IACrB,IAAIW,QAAQ,EAAE;MAAE5X,WAAK,CAACgN,oCAAoC,CAAC,qBAAqB,EAAEiK,OAAO,CAAC;IAAE;EAChG;EACAe,UAAUA,CAAC3D,GAAG,EAAE;IACZ;EACJ;EACAiE,gBAAgBA,CAACnE,KAAK,EAAEE,GAAG,EAAE,CAC7B;EACAmE,4BAA4BA,CAACrE,KAAK,EAAE,CACpC;EAEA5B,eAAeA,CAAA,EAAG;IACd,KAAK,CAACA,eAAe,CAAC,CAAC;IACvB;IACA,IAAI,CAACub,cAAc,CAAC,CAAC;IACrB;EACJ;EACAA,cAAcA,CAAA,EAAG;IACb/lB,OAAO,CAACqF,GAAG,CAAC,8BAA8B,CAAC;IAC3C;IACA,MAAM2gB,WAAW,GAAG5vB,QAAQ,CAAC8kB,cAAc,CAAC,aAAa,CAAC;IAC1D,IAAI8K,WAAW,EAAE;MACbA,WAAW,CAAC7hB,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC8hB,mBAAmB,CAAC9b,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjF;;IAEA;IACA,MAAM+b,UAAU,GAAG9vB,QAAQ,CAAC8kB,cAAc,CAAC,aAAa,CAAC;IACzD,IAAIgL,UAAU,EAAE;MACZA,UAAU,CAAC/hB,gBAAgB,CAAC,QAAQ,EAAE0hB,YAAY,CAACM,kBAAkB,CAAC;IAC1E;;IAEA;IACA/vB,QAAQ,CAAC+N,gBAAgB,CAAC,SAAS,EAAE,UAASiiB,CAAC,EAAE;MAC7C,IAAIA,CAAC,CAAChvB,GAAG,KAAK,QAAQ,EAAE;QACpByuB,YAAY,CAACQ,eAAe,CAAC,CAAC;MAClC;IACJ,CAAC,CAAC;;IAEF;IACA,MAAMC,KAAK,GAAGlwB,QAAQ,CAAC8kB,cAAc,CAAC,cAAc,CAAC;IACrD,IAAIoL,KAAK,EAAE;MACPA,KAAK,CAACniB,gBAAgB,CAAC,OAAO,EAAE,UAASiiB,CAAC,EAAE;QACxC,IAAIA,CAAC,CAACtd,MAAM,KAAKwd,KAAK,EAAE;UACpBT,YAAY,CAACQ,eAAe,CAAC,CAAC;QAClC;MACJ,CAAC,CAAC;IACN;;IAEA;IACA,MAAME,aAAa,GAAGnwB,QAAQ,CAAC8kB,cAAc,CAAC,YAAY,CAAC;IAC3D,IAAIqL,aAAa,EAAE;MACfA,aAAa,CAACpiB,gBAAgB,CAAC,OAAO,EAAE0hB,YAAY,CAACW,eAAe,CAAC;IACzE;IACA,MAAMC,oBAAoB,GAAGrwB,QAAQ,CAACC,gBAAgB,CAChD,uDAAuD,GACvD,GAAG,GACH,yDACN,CAAC;IACD,IAAIowB,oBAAoB,CAAC5xB,MAAM,GAAG,CAAC,EAAE;MACjC4xB,oBAAoB,CAAC1iB,OAAO,CAAE+D,MAAM,IAAK;QACrCA,MAAM,CAAC3D,gBAAgB,CAAC,OAAO,EAAE0hB,YAAY,CAACQ,eAAe,CAAC;MAClE,CAAC,CAAC;IACN;EAEJ;EACA,OAAOG,eAAeA,CAAA,EAAG;IACrB,MAAMF,KAAK,GAAGlwB,QAAQ,CAAC8kB,cAAc,CAAC,cAAc,CAAC;IACrD,IAAIoL,KAAK,EAAE;MACPA,KAAK,CAACzqB,SAAS,CAACG,MAAM,CAACmK,eAAe,CAAC;MACvC/P,QAAQ,CAAC6E,IAAI,CAAC4K,KAAK,CAAC6gB,QAAQ,GAAG,QAAQ;;MAEvC;MACA,MAAMC,UAAU,GAAGL,KAAK,CAAC9rB,aAAa,CAAC,eAAe,CAAC;MACvD,IAAImsB,UAAU,EAAE;QACZA,UAAU,CAACC,KAAK,CAAC,CAAC;MACtB;IACJ;EACJ;EACA,OAAOP,eAAeA,CAAA,EAAG;IACrB,MAAMC,KAAK,GAAGlwB,QAAQ,CAAC8kB,cAAc,CAAC,cAAc,CAAC;IACrD,IAAIoL,KAAK,EAAE;MACPA,KAAK,CAACzqB,SAAS,CAACE,GAAG,CAACoK,eAAe,CAAC;MACpC/P,QAAQ,CAAC6E,IAAI,CAAC4K,KAAK,CAAC6gB,QAAQ,GAAG,EAAE;;MAEjC;MACA,MAAMG,IAAI,GAAGzwB,QAAQ,CAAC8kB,cAAc,CAAC,aAAa,CAAC;MACnD,IAAI2L,IAAI,EAAE;QACNA,IAAI,CAACC,KAAK,CAAC,CAAC;MAChB;IACJ;EACJ;EACA,MAAMb,mBAAmBA,CAACG,CAAC,EAAE;IACzBA,CAAC,CAACle,cAAc,CAAC,CAAC;IAElB,MAAM2e,IAAI,GAAGT,CAAC,CAACtd,MAAM;IACrB,MAAMie,QAAQ,GAAG,IAAIC,QAAQ,CAACH,IAAI,CAAC;IAEnC,MAAMI,QAAQ,GAAGF,QAAQ,CAACG,GAAG,CAAC,WAAW,CAAC;IAC1C,MAAMC,QAAQ,GAAG;MACX,CAAC7M,UAAU,GAAG,CAAC,CAAC;MAChB,CAACJ,eAAe,GAAG+M,QAAQ,KAAK,WAAW;MAC3C,CAACG,WAAW,GAAGH,QAAQ,KAAK,OAAO;MACnC,CAACI,YAAY,GAAGJ,QAAQ,KAAK,QAAQ;MACrC,CAACK,gBAAgB,GAAGP,QAAQ,CAACG,GAAG,CAACI,gBAAgB,CAAC,IAAI,IAAI;MAC1D,CAACzU,SAAS,GAAGkU,QAAQ,CAACG,GAAG,CAACrU,SAAS,CAAC,IAAI,IAAI;MAC5C,CAAC0U,WAAW,GAAG,IAAI/wB,IAAI,CAAC,CAAC,CAACgxB,WAAW,CAAC,CAAC;MACvC,CAACC,gBAAgB,GAAGV,QAAQ,CAACG,GAAG,CAACO,gBAAgB,CAAC,IAAI,EAAE;MACxD,CAAClrB,UAAU,GAAG;IACpB,CAAC;IAED,MAAMmrB,SAAS,GAAGb,IAAI,CAACrsB,aAAa,CAAC,uBAAuB,CAAC;IAC7D,MAAMmtB,YAAY,GAAGD,SAAS,CAAC1uB,WAAW;IAC1C0uB,SAAS,CAAC1uB,WAAW,GAAG,aAAa;IACrC0uB,SAAS,CAACE,QAAQ,GAAG,IAAI;IAEzB,MAAMC,KAAK,GAAG,CAACV,QAAQ,CAAC;IACxB,MAAMjmB,OAAO,GAAG,iBAAiB;IACjCpC,GAAG,CAAC0C,QAAQ,CAACqmB,KAAK,EAAEhB,IAAI,EAAE3lB,OAAO,CAAC,CAC7BkH,IAAI,CAAC5S,IAAI,IAAI;MACV,IAAIA,IAAI,CAACma,UAAU,CAAC,IAAIC,WAAW,EAAE;QACjC,IAAIC,QAAQ,EAAE;UACV5X,WAAK,CAACgN,oCAAoC,CAAC,gBAAgB,CAAC;UAC5DhN,WAAK,CAACgN,oCAAoC,CAAC,gBAAgB,EAAEzP,IAAI,CAAC;QACtE;QACA,MAAMsyB,YAAY,GAAG,GAAGC,YAAY,IAAIvyB,IAAI,CAAC8kB,UAAU,CAAC,EAAE;QAC1D,IAAI/L,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,CAACpG,KAAK,CAAC,CAAC;QACZrJ,GAAG,CAAC6B,QAAQ,CAACmnB,YAAY,EAAEvZ,WAAW,CAAC;MAC3C,CAAC,MACI;QACDtW,WAAK,CAACgN,oCAAoC,CAAC,SAAS,GAAGzP,IAAI,CAACsa,WAAW,CAAC,CAAC;QACzE;QACAtP,MAAM,CAACC,QAAQ,CAAC2kB,MAAM,CAAC,CAAC;MAC5B;IACJ,CAAC,CAAC,CACDhW,KAAK,CAACrP,KAAK,IAAI;MACZC,OAAO,CAACD,KAAK,CAAC,sBAAsB,EAAEA,KAAK,CAAC;MAC5C8lB,YAAY,CAACR,SAAS,CAAC,2CAA2C,CAAC;IACvE,CAAC,CAAC,CACDC,OAAO,CAAC,MAAM;MACXoC,SAAS,CAAC1uB,WAAW,GAAG2uB,YAAY;MACpCD,SAAS,CAACE,QAAQ,GAAG,KAAK;IAC9B,CAAC,CAAC;EAEV;EACA,OAAOzB,kBAAkBA,CAACC,CAAC,EAAE;IACzB;IACA;EAAA;EAEJ,OAAO4B,YAAYA,CAAA,EAAG;IAClB;IACA,MAAMC,OAAO,GAAG7xB,QAAQ,CAACoE,aAAa,CAAC,yBAAyB,CAAC;IACjE,IAAIytB,OAAO,EAAE;MACT,OAAOA,OAAO,CAACxtB,YAAY,CAAC,SAAS,CAAC;IAC1C;;IAEA;IACA,MAAMytB,WAAW,GAAG9xB,QAAQ,CAACoE,aAAa,CAAC,0BAA0B,CAAC;IACtE,IAAI0tB,WAAW,EAAE;MACb,OAAOA,WAAW,CAAChzB,KAAK;IAC5B;;IAEA;IACA,MAAMizB,OAAO,GAAG/xB,QAAQ,CAACgyB,MAAM,CAAC7kB,KAAK,CAAC,GAAG,CAAC;IAC1C,KAAK,IAAI6kB,MAAM,IAAID,OAAO,EAAE;MACxB,MAAM,CAACzhB,IAAI,EAAExR,KAAK,CAAC,GAAGkzB,MAAM,CAACrzB,IAAI,CAAC,CAAC,CAACwO,KAAK,CAAC,GAAG,CAAC;MAC9C,IAAImD,IAAI,KAAK,YAAY,EAAE;QACvB,OAAOxR,KAAK;MAChB;IACJ;IAEA,OAAO,EAAE;EACb;EACA,OAAOmwB,SAASA,CAACngB,OAAO,EAAE;IACtB;IACA,MAAMwgB,YAAY,GAAGtvB,QAAQ,CAAC8kB,cAAc,CAAC,cAAc,CAAC;IAC5D,IAAIwK,YAAY,EAAE;MACd,MAAMC,UAAU,GAAGD,YAAY,CAAClrB,aAAa,CAAC,6BAA6B,CAAC;MAC5E,IAAImrB,UAAU,EAAE;QACZA,UAAU,CAAC3sB,WAAW,GAAGkM,OAAO;MACpC;MACAwgB,YAAY,CAAC7pB,SAAS,CAACG,MAAM,CAACmK,eAAe,CAAC;MAC9Cuf,YAAY,CAAC7f,KAAK,CAAC6C,OAAO,GAAG,MAAM;IACvC,CAAC,MAAM;MACH;MACAhL,KAAK,CAACwH,OAAO,CAAC;IAClB;EACJ;EACA,OAAOmjB,WAAWA,CAACnjB,OAAO,EAAE;IACxB;IACAlF,OAAO,CAACqF,GAAG,CAAC,UAAU,EAAEH,OAAO,CAAC;EACpC;EACA,OAAOojB,QAAQA,CAACzmB,MAAM,EAAE;IACpBrB,MAAM,CAACC,QAAQ,CAACC,IAAI,GAAG,GAAGqnB,YAAY,IAAIlmB,MAAM,EAAE;EACtD;EACA,aAAa0mB,UAAUA,CAAC1mB,MAAM,EAAE;IAC5B,IAAI,CAAC0jB,OAAO,CAAC,0EAA0E,CAAC,EAAE;MACtF;IACJ;IAEA,IAAI;MACA,MAAM4B,QAAQ,GAAG;QACb,SAAS,EAAEtlB,MAAM;QACjB,QAAQ,EAAE;MACd,CAAC;MAED,MAAMpC,QAAQ,GAAG,MAAMC,KAAK,CAACiC,YAAY,EAAE;QACvCxC,MAAM,EAAE,MAAM;QACdI,OAAO,EAAE;UACL,cAAc,EAAE,kBAAkB;UAClC,aAAa,EAAEsmB,YAAY,CAACmC,YAAY,CAAC;QAC7C,CAAC;QACD/sB,IAAI,EAAEvF,IAAI,CAACC,SAAS,CAAC;UACjB,CAAC+L,QAAQ,GAAG,CAACylB,QAAQ,CAAC;UACtB,cAAc,EAAE,CAAC,CAAC;UAClB,SAAS,EAAE;QACf,CAAC;MACL,CAAC,CAAC;MAEF,MAAMqB,MAAM,GAAG,MAAM/oB,QAAQ,CAACK,IAAI,CAAC,CAAC;MAEpC,IAAI0oB,MAAM,CAAC3oB,MAAM,KAAK,SAAS,EAAE;QAC7B;QACA,MAAMyM,GAAG,GAAGlW,QAAQ,CAACoE,aAAa,CAAC,oBAAoBqH,MAAM,IAAI,CAAC;QAClE,IAAIyK,GAAG,EAAE;UACLA,GAAG,CAACzG,KAAK,CAAC4iB,SAAS,GAAG,oCAAoC;UAC1DC,UAAU,CAAC,MAAMpc,GAAG,CAACtQ,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;QACvC;MACJ,CAAC,MAAM;QACH6pB,YAAY,CAACR,SAAS,CAACmD,MAAM,CAACtjB,OAAO,IAAI,uBAAuB,CAAC;MACrE;IACJ,CAAC,CAAC,OAAOnF,KAAK,EAAE;MACZC,OAAO,CAACD,KAAK,CAAC,sBAAsB,EAAEA,KAAK,CAAC;MAC5C8lB,YAAY,CAACR,SAAS,CAAC,2CAA2C,CAAC;IACvE;EACJ;EAEAnc,2BAA2BA,CAAA,EAAG,CAAC;EAC/Bf,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ,C;;ACxQ+B;AACG;AACH;AACU;AAE1B,MAAMwgB,WAAW,SAAStiB,QAAQ,CAAC;EAC9C,OAAOpG,IAAI,GAAG2oB,eAAe;EAE7BtiB,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;EACjB;EAEAI,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;IACvB,IAAI,CAACiiB,aAAa,CAAC,CAAC;EACxB;EAEAA,aAAaA,CAAA,EAAG,CAChB;EAEA1gB,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ,C;;ACzBkC;AAEnB,MAAM2gB,uBAAuB,SAASziB,QAAQ,CAAC;EAC1D,OAAOpG,IAAI,GAAG8oB,2BAA2B;EAEzCziB,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;EACjB;EAEAI,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;EAC3B;EAEAuB,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ,C;;AChBkC;AAEnB,MAAM6gB,0BAA0B,SAAS3iB,QAAQ,CAAC;EAC7D,OAAOpG,IAAI,GAAGgpB,8BAA8B;EAE5C3iB,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;EACjB;EAEAI,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;EAC3B;EAEAuB,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ,C;;ACfkC;AAEnB,MAAM+gB,WAAW,SAAS7iB,QAAQ,CAAC;EAC9C,OAAOpG,IAAI,GAAGkpB,eAAe;EAE7B7iB,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;EACjB;EAEAI,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;EAC3B;EAEAuB,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ,C;;AChBkC;AAEnB,MAAMihB,iBAAiB,SAAS/iB,QAAQ,CAAC;EACpD,OAAOpG,IAAI,GAAGopB,qBAAqB;EAEnC/iB,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;EACjB;EAEAI,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;EAC3B;EAEAuB,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ,C;;ACjBkC;AAEnB,MAAMmhB,qBAAqB,SAASjjB,QAAQ,CAAC;EACxD,OAAOpG,IAAI,GAAGspB,6BAA6B;EAE3CjjB,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;EACjB;EAEAI,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;EAC3B;EAEAuB,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ,C;;ACde,MAAMqhB,SAAS,CAAC;EAC3BljB,WAAWA,CAACmjB,WAAW,EAAE;IACrB,IAAI,CAACtuB,IAAI,GAAGsuB,WAAW;EAC3B;EAEA9iB,UAAUA,CAAA,EAAG;IACT1O,KAAK,CAACgN,oCAAoC,CAAC,mBAAmB,EAAE,IAAI,CAAC9J,IAAI,CAAC8E,IAAI,CAAC;IAC/E,IAAI,CAACqK,aAAa,CAAC,CAAC;IACpB,IAAI,CAACof,kBAAkB,CAAC,CAAC;EAC7B;EACApf,aAAaA,CAAA,EAAG,CAChB;EACAof,kBAAkBA,CAAA,EAAG,CAErB;EAEAvhB,KAAKA,CAAA,EAAG,CAAC;AACb,C;;AClBmC;AAEpB,MAAMwhB,cAAc,SAASH,SAAS,CAAC;EAClDljB,WAAWA,CAACmjB,WAAW,EAAE;IACrB,KAAK,CAACA,WAAW,CAAC;EACtB;EACA9iB,UAAUA,CAAA,EAAG;IACT,KAAK,CAACA,UAAU,CAAC,CAAC;IAClB,IAAI,CAAC2D,aAAa,CAAC,CAAC;IACpB,IAAI,CAACsf,WAAW,CAAC,CAAC;EACtB;EACAtf,aAAaA,CAAA,EAAG;IACZ;EAAA;EAEJsf,WAAWA,CAAA,EAAG;IACV;EAAA;AAER,C;;ACjB+B;AACgB;AAChB;AACc;AAE9B,MAAMC,QAAQ,SAASjgB,aAAa,CAAC;EAChD,OAAO3J,IAAI,GAAG6pB,mBAAmB;EACjC,OAAO1Z,eAAe,GAAGkQ,UAAU;EACnC5Q,oBAAoB,GAAG5Q,GAAG,CAACiC,SAAS;EAEpCuF,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;IACb,IAAI,CAACwjB,KAAK,GAAG,IAAIJ,cAAc,CAAC,IAAI,CAAC;EACzC;EAEAhjB,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;IACvB,IAAI,CAAC4D,eAAe,CAAC,CAAC;EAC1B;EAGAF,aAAaA,CAAA,EAAG,CAChB;EAEA2E,YAAYA,CAACC,OAAO,EAAE;IAClB,IAAIA,OAAO,IAAI,IAAI,EAAE;IACrB,IAAIW,QAAQ,EAAE;MAAE5X,KAAK,CAACgN,oCAAoC,CAAC,qBAAqB,EAAEiK,OAAO,CAAC;IAAE;EAChG;EACAK,eAAeA,CAACQ,SAAS,GAAG,KAAK,EAAE;IAC/BA,SAAS,GAAG,IAAI;IAChB,IAAI7T,SAAS,GAAG9F,QAAQ,CAACoE,aAAa,CAAC,GAAG,GAAGwvB,QAAQ,GAAG,GAAG,GAAG3oB,QAAQ,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC4O,UAAU,CAAC/T,SAAS,CAAC,CAAC;EACvC;EACA+T,UAAUA,CAAC/T,SAAS,EAAE;IAClB8D,OAAO,CAACqF,GAAG,CAAC,cAAc,EAAEnJ,SAAS,CAAC;IACtC,IAAIA,SAAS,IAAI,IAAI,EAAE;IACvB,IAAI+tB,cAAc,GAAG/tB,SAAS,CAAC1B,aAAa,CAAC,IAAI,GAAG0vB,aAAa,CAAC;IAClE,IAAIC,YAAY,GAAGjuB,SAAS,CAAC1B,aAAa,CAAC,IAAI,GAAG4vB,WAAW,CAAC;IAC9D,IAAIC,UAAU,GAAGnuB,SAAS,CAAC1B,aAAa,CAAC,IAAI,GAAG8vB,SAAS,CAAC;IAE1D,IAAIC,MAAM,GAAGruB,SAAS,CAACzB,YAAY,CAAC6lB,UAAU,CAAC;IAE/C,IAAIkK,OAAO,GAAG;MACV,CAACC,eAAe,GAAG,IAAI;MACrB,CAACH,SAAS,GAAG,IAAI;MACjB,CAACI,mBAAmB,GAAG,IAAI;MAC3B,CAACC,eAAe,GAAG,IAAI;MACvB,CAACC,gBAAgB,GAAG;IAC1B,CAAC;IAEDJ,OAAO,CAAClK,UAAU,CAAC,GAAGiK,MAAM;IAC5BC,OAAO,CAACN,aAAa,CAAC,GAAGhyB,GAAG,CAACsE,+BAA+B,CAACytB,cAAc,CAAC;IAC5EO,OAAO,CAACJ,WAAW,CAAC,GAAGlyB,GAAG,CAACsE,+BAA+B,CAAC2tB,YAAY,CAAC;IACxEK,OAAO,CAACF,SAAS,CAAC,GAAGpyB,GAAG,CAACsE,+BAA+B,CAAC6tB,UAAU,CAAC;IACpE,OAAOG,OAAO;EAClB;EAEAja,gBAAgBA,CAACnE,KAAK,EAAEE,GAAG,EAAE,CAC7B;EACAmE,4BAA4BA,CAACrE,KAAK,EAAE,CACpC;EAEA5B,eAAeA,CAAA,EAAG;IACd,KAAK,CAACA,eAAe,CAAC,CAAC;IACvB,IAAI,CAACqgB,qBAAqB,CAAC,CAAC;IAC5B,IAAI,CAACC,mBAAmB,CAAC,CAAC;IAC1B,IAAI,CAACC,iBAAiB,CAAC,CAAC;EAC5B;EACAF,qBAAqBA,CAAA,EAAG;IACpB,IAAI,CAACpZ,6BAA6B,CAAC,GAAG,GAAGuY,QAAQ,GAAG,GAAG,GAAG3oB,QAAQ,GAAG,IAAI,GAAG6oB,aAAa,CAAC;EAC9F;EACAY,mBAAmBA,CAAA,EAAG;IAClB,IAAI,CAACrZ,6BAA6B,CAAC,GAAG,GAAGuY,QAAQ,GAAG,GAAG,GAAG3oB,QAAQ,GAAG,IAAI,GAAG+oB,WAAW,CAAC;EAC5F;EACAW,iBAAiBA,CAAA,EAAG;IAChB,IAAI,CAACtZ,6BAA6B,CAAC,GAAG,GAAGuY,QAAQ,GAAG,GAAG,GAAG3oB,QAAQ,GAAG,IAAI,GAAGipB,SAAS,CAAC;EAC1F;EAEAniB,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ,C;;ACjF4B;AACgB;AAChB;AACc;AACN;AAErB,MAAM6iB,SAAS,SAASphB,aAAa,CAAC;EACjD,OAAO3J,IAAI,GAAGgrB,oBAAoB;EAClC,OAAO7a,eAAe,GAAGkQ,UAAU;EACnC5Q,oBAAoB,GAAG5Q,GAAG,CAACiC,SAAS;EAEpCuF,WAAWA,CAACC,MAAM,EAAE;IAChB,KAAK,CAACA,MAAM,CAAC;IACb,IAAI,CAACwjB,KAAK,GAAG,IAAIJ,cAAc,CAAC,IAAI,CAAC;EACzC;EAEAhjB,UAAUA,CAAA,EAAG;IACT,IAAI,CAACC,gBAAgB,CAAC,CAAC;EAC3B;EAEA0D,aAAaA,CAAA,EAAG;IACZ,IAAI,CAACS,mBAAmB,CAAC,CAAC;IAC1B,IAAI,CAACG,kBAAkB,CAAC,CAAC;EAC7B;EAEA+D,YAAYA,CAACC,OAAO,EAAE;IAClB,IAAIA,OAAO,IAAI,IAAI,EAAE;IACrB,IAAIW,QAAQ,EAAE;MAAE5X,WAAK,CAACgN,oCAAoC,CAAC,qBAAqB,EAAEiK,OAAO,CAAC;IAAE;EAChG;EACAe,UAAUA,CAAC3D,GAAG,EAAE;IACZ,IAAIA,GAAG,IAAI,IAAI,EAAE;IACjB,IAAI2d,cAAc,GAAG3d,GAAG,CAAC9R,aAAa,CAAC,KAAK,GAAG0vB,aAAa,GAAG,IAAI,GAAGA,aAAa,CAAC;IACpF,IAAIC,YAAY,GAAG7d,GAAG,CAAC9R,aAAa,CAAC,KAAK,GAAG4vB,WAAW,GAAG,IAAI,GAAGA,WAAW,CAAC;IAC9E,IAAIc,UAAU,GAAG5e,GAAG,CAAC9R,aAAa,CAAC,KAAK,GAAGqY,SAAS,GAAG,IAAI,GAAGA,SAAS,CAAC;IACxE,IAAIsY,YAAY,GAAG7e,GAAG,CAAC9R,aAAa,CAAC,KAAK,GAAG+B,UAAU,GAAG,IAAI,GAAGA,UAAU,CAAC;IAE5E,IAAIiuB,OAAO,GAAG;MACV,CAACC,eAAe,GAAG,IAAI;MACrB,CAACH,SAAS,GAAG,IAAI;MACjB,CAACI,mBAAmB,GAAG,IAAI;MAC3B,CAACC,eAAe,GAAG,IAAI;MACvB,CAACC,gBAAgB,GAAG;IAC1B,CAAC;IACDJ,OAAO,CAAClK,UAAU,CAAC,GAAGhU,GAAG,CAAC7R,YAAY,CAAC6lB,UAAU,CAAC;IAClDkK,OAAO,CAACN,aAAa,CAAC,GAAGhyB,GAAG,CAACsE,+BAA+B,CAACytB,cAAc,CAAC;IAC5EO,OAAO,CAACJ,WAAW,CAAC,GAAGlyB,GAAG,CAACsE,+BAA+B,CAAC2tB,YAAY,CAAC;IACxEK,OAAO,CAAC3X,SAAS,CAAC,GAAG3a,GAAG,CAACsE,+BAA+B,CAAC0uB,UAAU,CAAC;IACpEV,OAAO,CAACjuB,UAAU,CAAC,GAAG4uB,YAAY,CAACtvB,SAAS,CAACC,QAAQ,CAACM,UAAU,CAAC;IAEjE4D,OAAO,CAACqF,GAAG,CAAC,SAAS,CAAC;IACtBrF,OAAO,CAACqF,GAAG,CAACmlB,OAAO,CAAC;IAEpB,OAAOA,OAAO;EAClB;EAEAja,gBAAgBA,CAACnE,KAAK,EAAEE,GAAG,EAAE,CAE7B;EACAmE,4BAA4BA,CAACrE,KAAK,EAAE;IAChC,IAAIsM,OAAO,GAAGtM,KAAK,CAAC/V,gBAAgB,CAAC,KAAK,GAAGua,UAAU,CAAC;IACxD,IAAI+H,SAAS,GAAGD,OAAO,CAAC,CAAC,CAAC;IAC1B,IAAIE,yBAAyB,GAAG,EAAE,CAACE,IAAI,CAAC,EAAE,CAAC;IAC3CH,SAAS,CAACtiB,gBAAgB,CAACuiB,yBAAyB,CAAC,CAAC7U,OAAO,CAAEgV,gBAAgB,IAAK;MAChFA,gBAAgB,CAACC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;EACN;EAEAxO,eAAeA,CAAA,EAAG;IACd,KAAK,CAACA,eAAe,CAAC,CAAC;IACvB,IAAI,CAACqgB,qBAAqB,CAAC,CAAC;IAC5B,IAAI,CAACC,mBAAmB,CAAC,CAAC;IAC1B,IAAI,CAAClY,sBAAsB,CAAC,CAAC;IAC7B,IAAI,CAACE,kBAAkB,CAAC,CAAC;EAC7B;EACA+X,qBAAqBA,CAAA,EAAG;IACpB,IAAI,CAACpZ,6BAA6B,CAACyY,aAAa,CAAC;EACrD;EACAY,mBAAmBA,CAAA,EAAG;IAClB,IAAI,CAACrZ,6BAA6B,CAAC2Y,WAAW,CAAC;EACnD;EAEAjiB,KAAKA,CAAA,EAAG;IACJ,KAAK,CAACA,KAAK,CAAC,CAAC;EACjB;AACJ,C;;ACpFA;AACA;AACA;AACoD;AACF;AACE;AACF;AAClD;AAC4E;AACM;AAC/B;AACa;AACQ;AACxE;AACA;AACA;AAC4C;AACE;AAEnB;AACA;AACQ;AAGpB,MAAMijB,MAAM,CAAC;EACxB9kB,WAAWA,CAAA,EAAG;IACV;IACA,IAAI,CAAC+kB,KAAK,GAAG,CAAC,CAAC;IACf;IACA;IACA,IAAI,CAACA,KAAK,CAAC9S,gBAAgB,CAAC,GAAG;MAAE7R,IAAI,EAAE,cAAc;MAAE4kB,MAAM,EAAEhT,YAAYA;IAAC,CAAC;IAC7E,IAAI,CAAC+S,KAAK,CAAChR,eAAe,CAAC,GAAG;MAAE3T,IAAI,EAAE,aAAa;MAAE4kB,MAAM,EAAElR,WAAWA;IAAC,CAAC;IAC1E,IAAI,CAACiR,KAAK,CAACvF,gBAAgB,CAAC,GAAG;MAAEpf,IAAI,EAAE,cAAc;MAAE4kB,MAAM,EAAEzF,YAAYA;IAAC,CAAC;IAC7E,IAAI,CAACwF,KAAK,CAACzC,eAAe,CAAC,GAAG;MAAEliB,IAAI,EAAE,aAAa;MAAE4kB,MAAM,EAAE3C,WAAWA;IAAC,CAAC;IAC1E;IACA,IAAI,CAAC0C,KAAK,CAACpC,8BAA8B,CAAC,GAAG;MAAEviB,IAAI,EAAE,4BAA4B;MAAE4kB,MAAM,EAAEtC,0BAA0BA;IAAC,CAAC;IACvH,IAAI,CAACqC,KAAK,CAAC9B,6BAA6B,CAAC,GAAG;MAAE7iB,IAAI,EAAE,2BAA2B;MAAE4kB,MAAM,EAAEhC,qBAAqBA;IAAC,CAAC;IAChH,IAAI,CAAC+B,KAAK,CAAClC,eAAe,CAAC,GAAG;MAAEziB,IAAI,EAAE,aAAa;MAAE4kB,MAAM,EAAEpC,WAAWA;IAAC,CAAC;IAC1E,IAAI,CAACmC,KAAK,CAAChC,qBAAqB,CAAC,GAAG;MAAE3iB,IAAI,EAAE,mBAAmB;MAAE4kB,MAAM,EAAElC,iBAAiBA;IAAC,CAAC;IAC5F;IACA;IACA;IACA,IAAI,CAACiC,KAAK,CAACvB,mBAAmB,CAAC,GAAG;MAAEpjB,IAAI,EAAE,UAAU;MAAE4kB,MAAM,EAAEzB,QAAQA;IAAC,CAAC;IACxE,IAAI,CAACwB,KAAK,CAACJ,oBAAoB,CAAC,GAAG;MAAEvkB,IAAI,EAAE,WAAW;MAAE4kB,MAAM,EAAEN,SAASA;IAAC,CAAC;IAC3E;IACA,IAAI,CAACO,MAAM,GAAG,CAAC,CAAC;IAChB;IACA;IACA,IAAI,CAACA,MAAM,CAAChT,gBAAgB,CAAC,GAAG,CAACnO,UAAU,GAAG,KAAK,KAAK,IAAI,CAAChD,cAAc,CAACmR,gBAAgB,EAAEnO,UAAU,CAAC;IACzG,IAAI,CAACmhB,MAAM,CAAClR,eAAe,CAAC,GAAG,CAACjQ,UAAU,GAAG,KAAK,KAAK,IAAI,CAAChD,cAAc,CAACiT,eAAe,EAAEjQ,UAAU,CAAC;IACvG,IAAI,CAACmhB,MAAM,CAACzF,gBAAgB,CAAC,GAAG,CAAC1b,UAAU,GAAG,KAAK,KAAK,IAAI,CAAChD,cAAc,CAAC0e,gBAAgB,EAAE1b,UAAU,CAAC;IACzG,IAAI,CAACmhB,MAAM,CAAC3C,eAAe,CAAC,GAAG,CAACxe,UAAU,GAAG,KAAK,KAAK,IAAI,CAAChD,cAAc,CAACwhB,eAAe,EAAExe,UAAU,CAAC;IACvG;IACA,IAAI,CAACmhB,MAAM,CAACtC,8BAA8B,CAAC,GAAG,CAAC7e,UAAU,GAAG,KAAK,KAAK,IAAI,CAAChD,cAAc,CAAC6hB,8BAA8B,EAAE7e,UAAU,CAAC;IACrI,IAAI,CAACmhB,MAAM,CAAChC,6BAA6B,CAAC,GAAG,CAACnf,UAAU,GAAG,KAAK,KAAK,IAAI,CAAChD,cAAc,CAACmiB,6BAA6B,EAAEnf,UAAU,CAAC;IACnI,IAAI,CAACmhB,MAAM,CAACpC,eAAe,CAAC,GAAG,CAAC/e,UAAU,GAAG,KAAK,KAAK,IAAI,CAAChD,cAAc,CAAC+hB,eAAe,EAAE/e,UAAU,CAAC;IACvG,IAAI,CAACmhB,MAAM,CAAClC,qBAAqB,CAAC,GAAG,CAACjf,UAAU,GAAG,KAAK,KAAK,IAAI,CAAChD,cAAc,CAACiiB,qBAAqB,EAAEjf,UAAU,CAAC;IACnH;IACA;IACA;IACA,IAAI,CAACmhB,MAAM,CAACzB,mBAAmB,CAAC,GAAG,CAAC1f,UAAU,GAAG,KAAK,KAAK,IAAI,CAAChD,cAAc,CAAC0iB,mBAAmB,EAAE1f,UAAU,CAAC;IAC/G,IAAI,CAACmhB,MAAM,CAACN,oBAAoB,CAAC,GAAG,CAAC7gB,UAAU,GAAG,KAAK,KAAK,IAAI,CAAChD,cAAc,CAAC6jB,oBAAoB,EAAE7gB,UAAU,CAAC;IACjH,IAAI,CAACzD,UAAU,CAAC,CAAC;EACrB;EACA6kB,QAAQA,CAACC,QAAQ,EAAErhB,UAAU,GAAG,KAAK,EAAE;IACnC,MAAMshB,SAAS,GAAG,IAAI,CAACC,oBAAoB,CAACF,QAAQ,CAAC;IACrD,IAAI,CAACG,WAAW,GAAG,IAAIF,SAAS,CAAC,IAAI,CAAC;IACtC,IAAI,CAACE,WAAW,CAACjlB,UAAU,CAACyD,UAAU,CAAC;IACvC5J,MAAM,CAAC2D,gBAAgB,CAAC,cAAc,EAAE,MAAM,IAAI,CAACynB,WAAW,CAACzjB,KAAK,CAAC,CAAC,CAAC;EAC3E;EACAwjB,oBAAoBA,CAACF,QAAQ,EAAE;IAE3B,IAAII,QAAQ,GAAG,IAAI,CAACR,KAAK,CAACI,QAAQ,CAAC;IACnC,IAAI;MACA,MAAMH,MAAM,GAAGO,QAAQ,CAACP,MAAM;MAC9B,OAAOA,MAAM;IACjB,CAAC,CACD,OAAOvrB,KAAK,EAAE;MACV9H,WAAK,CAACgN,oCAAoC,CAAC,cAAc,EAAE,IAAI,CAAComB,KAAK,CAAC;MACtErrB,OAAO,CAACD,KAAK,CAAC,iBAAiB,EAAE0rB,QAAQ,CAAC;MAC1C,MAAM1rB,KAAK;IACf;EACJ;EACA4G,UAAUA,CAAA,EAAG;IACTnG,MAAM,CAAC2D,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC2nB,cAAc,CAAC3hB,IAAI,CAAC,IAAI,CAAC,CAAC;EACvE;EACA2hB,cAAcA,CAAC1nB,KAAK,EAAE;IAClB,IAAI,CAAC2nB,eAAe,CAAC,CAAC;EAC1B;EACAA,eAAeA,CAAA,EAAG;IACd,MAAM/wB,eAAe,GAAG9C,GAAG,CAAC6C,kBAAkB,CAAC,CAAC;IAChD,IAAI,CAACywB,QAAQ,CAACxwB,eAAe,CAAC;EAClC;EACAoM,cAAcA,CAACnH,IAAI,EAAEzK,IAAI,GAAG,IAAI,EAAED,MAAM,GAAG,IAAI,EAAE6U,UAAU,GAAG,KAAK,EAAE;IACjE,IAAI9S,GAAG,GAAGwH,GAAG,CAACM,cAAc,CAACa,IAAI,EAAE1K,MAAM,CAAC;IAC1Cy2B,OAAO,CAACC,SAAS,CAAC;MAACz2B,IAAI,EAAEA,IAAI;MAAED,MAAM,EAAEA;IAAM,CAAC,EAAE,EAAE,EAAE0K,IAAI,CAAC;IACzDnB,GAAG,CAACyB,OAAO,CAACjJ,GAAG,EAAE9B,IAAI,CAAC;EAC1B;EAEA02B,aAAaA,CAAC50B,GAAG,EAAE9B,IAAI,GAAG,IAAI,EAAE22B,aAAa,GAAG,IAAI,EAAE;IAClD;IACA,IAAIA,aAAa,EAAEH,OAAO,CAACC,SAAS,CAACz2B,IAAI,EAAE,EAAE,EAAE8B,GAAG,CAAC;IACnDA,GAAG,GAAGwH,GAAG,CAACqB,eAAe,CAAC7I,GAAG,EAAE9B,IAAI,CAAC;IACpCsJ,GAAG,CAACyB,OAAO,CAACjJ,GAAG,CAAC;EACpB;EAEA,OAAO80B,wBAAwBA,CAAC3sB,QAAQ,EAAE;IACtCvH,GAAG,CAACwC,YAAY,CAAC+E,QAAQ,CAACjK,IAAI,CAAC;EACnC;AACJ;AAEO,MAAM+Q,MAAM,GAAG,IAAI6kB,MAAM,CAAC,CAAC,C;;AC/GrB;;AAEc;AACM;AAGjC,MAAMiB,GAAG,CAAC;EACN/lB,WAAWA,CAAA,EAAG;IACV,IAAI,CAACgmB,GAAG,GAAG,IAAIp0B,GAAG,CAAC,CAAC;IACpB,IAAI,CAACqO,MAAM,GAAG,IAAI6kB,MAAM,CAAC,CAAC;EAC9B;EAEAzkB,UAAUA,CAAA,EAAG;IACT,IAAI,CAAC4lB,mBAAmB,CAAC,CAAC;IAC1B,IAAI,CAACC,KAAK,CAAC,CAAC;EAChB;EAEAD,mBAAmBA,CAAA,EAAG;IAClB;EAAA;EAGJE,iBAAiBA,CAACroB,KAAK,EAAE,CACzB;EAEAooB,KAAKA,CAAA,EAAG;IACJ,IAAI,CAACE,eAAe,CAAC,CAAC;EAC1B;EAEAA,eAAeA,CAAA,EAAG;IACd,IAAI,CAACnmB,MAAM,CAACwlB,eAAe,CAAC,CAAC;EACjC;AAEJ;AAEA,MAAMY,GAAG,GAAG,IAAIN,GAAG,CAAC,CAAC;AAErB,SAASO,QAAQA,CAACC,EAAE,EAAE;EAClB,IAAIz2B,QAAQ,CAAC02B,UAAU,KAAK,SAAS,EAAE;IACnCD,EAAE,CAAC,CAAC;EACR,CAAC,MAAM;IACHz2B,QAAQ,CAAC+N,gBAAgB,CAAC,kBAAkB,EAAE0oB,EAAE,CAAC;EACrD;AACJ;AAEAD,QAAQ,CAAC,MAAM;EACXD,GAAG,CAAChmB,UAAU,CAAC,CAAC;AACpB,CAAC,CAAC;AAEFnG,MAAM,CAACmsB,GAAG,GAAGA,GAAG;AAEhB,6CAAeA,gDAAAA,GAAG,I;;;;;ACnDlB;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA;;;;;;ACAA","sources":["webpack://app/./static/js/lib/validation.js","webpack://app/./static/js/dom.js","webpack://app/./static/js/api.js","webpack://app/./static/js/lib/business_objects/business_objects.js","webpack://app/./static/js/lib/events.js","webpack://app/./static/js/lib/local_storage.js","webpack://app/./static/js/lib/utils.js","webpack://app/./static/js/components/common/temporary/overlay_confirm.js","webpack://app/./static/js/pages/base.js","webpack://app/./static/js/components/common/temporary/overlay_error.js","webpack://app/./static/js/pages/base_table.js","webpack://app/./static/js/pages/tcg/mtg_decks.js","webpack://app/./static/js/pages/tcg/mtg_game.js","webpack://app/./static/js/pages/tcg/mtg_games.js","webpack://app/./static/js/pages/tcg/mtg_home.js","webpack://app/./static/js/pages/legal/accessibility_report.js","webpack://app/./static/js/pages/legal/accessibility_statement.js","webpack://app/./static/js/pages/legal/license.js","webpack://app/./static/js/pages/legal/privacy_policy.js","webpack://app/./static/js/pages/legal/retention_schedule.js","webpack://app/./static/js/pages/mixin.js","webpack://app/./static/js/pages/mixin_table.js","webpack://app/./static/js/pages/user/user.js","webpack://app/./static/js/pages/user/users.js","webpack://app/./static/js/router.js","webpack://app/./static/js/app.js","webpack://app/./static/css/main.css?0a91","webpack://app/./static/css/components/button.css?0e0b","webpack://app/./static/css/components/card.css","webpack://app/./static/css/components/dialog.css","webpack://app/./static/css/components/form.css?94e1","webpack://app/./static/css/components/image.css?9f9c","webpack://app/./static/css/components/label.css?b78f","webpack://app/./static/css/components/modal.css","webpack://app/./static/css/components/navigation.css","webpack://app/./static/css/components/overlay.css?6dfd","webpack://app/./static/css/components/table.css?e553","webpack://app/./static/css/layouts/header.css?da75","webpack://app/./static/css/layouts/footer.css?65e3","webpack://app/./static/css/layouts/table-main.css?8c15","webpack://app/./static/css/lib/reset.css","webpack://app/./static/css/lib/typography.css","webpack://app/./static/css/lib/utils.css","webpack://app/./static/css/lib/variables.css","webpack://app/./static/css/themes/dark.css?0cc3"],"sourcesContent":["\nexport default class Validation {\n /*\n isNullOrWhitespace(v) {\n let txt = JSON.stringify(v).replace('/\\s\\g', '');\n return (txt == '' || 'null');\n }\n */\n\n static isEmpty(object) {\n\n let isEmpty = true;\n\n if (object !== null && object !== \"null\" && object !== undefined && object !== \"undefined\") {\n\n if (object.length == undefined) {\n isEmpty = false; // object exists but isn't a collection\n }\n else if (typeof object === \"function\") {\n isEmpty = false; // object is reference\n }\n else { // string or collection\n\n let isString = (typeof object == \"string\");\n\n if (isString) object = object.trim();\n\n if (object.length > 0) {\n\n if (isString) {\n isEmpty = false; // String greater than length 0\n }\n else {\n\n if (typeof object[0] != \"string\") {\n isEmpty = false;\n }\n else {\n for(let i = 0; i < object.length; i++) {\n if (object[i] != \"\") {\n isEmpty = false;\n break\n }\n }\n }\n }\n }\n }\n }\n\n return isEmpty;\n }\n\n static isValidNumber(value, positiveOnly) {\n return !Validation.isEmpty(value) && !isNaN(value) && (!positiveOnly || parseFloat(value) > 0);\n }\n\n static getDataContentType(params) {\n\n var data = null;\n var contentType = '';\n\n if (!Validation.isEmpty(params)) {\n\n if (typeof params === \"string\") {\n data = params;\n contentType = \"application/x-www-form-urlencoded; charset=UTF-8\";\n }\n else {\n data = JSON.stringify(params);\n contentType = \"application/json; charset=UTF-8\";\n }\n }\n\n return { Data: data, ContentType: contentType };\n }\n\n static arrayContainsItem(array, itemValue) {\n\n var hasItem = false;\n\n if (!Validation.isEmpty(array) && !Validation.isEmpty(itemValue)) {\n\n var isJQueryElementArray = array[0] instanceof jQuery;\n\n if (isJQueryElementArray) {\n\n for (let i = 0; i < array.length; i++) {\n\n if (document.querySelectorAll(array[i]).is(itemValue)) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n var isDate = array[0] instanceof Date;\n\n if (isDate) {\n \n for (let i = 0; i < array.length; i++) {\n\n if (array[i].getTime() === itemValue.getTime()) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n for (let i = 0; i < array.length; i++) {\n\n if (array[i] == itemValue) {\n hasItem = true;\n break;\n }\n }\n }\n }\n }\n\n return hasItem;\n }\n\n static dictHasKey(d, k) {\n return (k in d);\n }\n static areEqualDicts(dict1, dict2) {\n const keys1 = Object.keys(dict1);\n const keys2 = Object.keys(dict2);\n \n if (keys1.length !== keys2.length) {\n return false;\n }\n \n for (let key of keys1) {\n if (dict1[key] !== dict2[key]) {\n return false;\n }\n }\n \n return true;\n }\n\n static imageExists(url, callback) {\n\n var img = new Image();\n\n img.onload = function() { callback(true); };\n img.onerror = function() { callback(false); };\n img.src = url;\n }\n\n static toFixedOrDefault(value, decimalPlaces, defaultValue = null) {\n return Validation.isValidNumber(value) ? parseFloat(value).toFixed(decimalPlaces) : defaultValue;\n }\n}\n","\nimport Utils from \"./lib/utils.js\";\nimport Validation from \"./lib/validation.js\";\n\nexport default class DOM {\n static setElementAttributesValuesCurrentAndPrevious(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementAttributeValueCurrent(element, data) {\n element.setAttribute(attrValueCurrent, data);\n }\n static setElementAttributeValuePrevious(element, data) {\n element.setAttribute(attrValuePrevious, data);\n }\n static setElementValuesCurrentAndPrevious(element, data) {\n DOM.setElementValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementValueCurrent(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n element.checked = data;\n }\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n element.value = data;\n }\n else {\n element.textContent = data;\n }\n }\n static setElementValueCurrentIfEmpty(element, data) {\n if (Validation.isEmpty(DOM.getElementValueCurrent(element))) {\n DOM.setElementValueCurrent(element, data);\n }\n }\n static getCellFromElement(element) {\n return element.closest('td');\n }\n static getRowFromElement(element, flagRow) {\n let selector = Validation.isEmpty(flagRow) ? 'tr' : 'tr.' + flagRow;\n return element.closest(selector);\n }\n static getClosestParent(element, parentSelector) {\n let parent = element.parentElement;\n while (parent) {\n if (parent.matches(parentSelector)) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n static convertForm2JSON(elementForm) {\n let dataForm = {};\n if (Validation.isEmpty(elementForm)) {\n return dataForm;\n }\n let containersFilter = elementForm.querySelectorAll('.' + flagContainerInput + '.' + flagFilter);\n let containerFilter, labelFilter, keyFilter, filter;\n for (let indexFilter = 0; indexFilter < containersFilter.length; indexFilter++) {\n containerFilter = containersFilter[indexFilter];\n labelFilter = containerFilter.querySelector('label');\n keyFilter = labelFilter.getAttribute('for');\n filter = containerFilter.querySelector(`#${keyFilter}`);\n dataForm[keyFilter] = DOM.getElementValueCurrent(filter);\n }\n return dataForm;\n }\n static loadPageBody(contentNew) {\n let pageBody = document.querySelector(idPageBody);\n pageBody.innerHTML = contentNew;\n }\n static getHashPageCurrent() {\n const hashPageCurrent = document.body.dataset.page;\n return hashPageCurrent;\n }\n static updateAndCheckIsElementDirty(element) {\n element.setAttribute(attrValueCurrent, DOM.getElementValueCurrent(element));\n return DOM.isElementDirty(element);\n }\n static isElementDirty(element) {\n let isDirty = element.getAttribute(attrValuePrevious) != element.getAttribute(attrValueCurrent);\n DOM.handleDirtyElement(element, isDirty);\n return isDirty;\n }\n static handleDirtyElement(element, isDirty) {\n DOM.toggleElementHasClassnameFlag(element, isDirty, flagDirty);\n }\n static toggleElementHasClassnameFlag(element, elementHasFlag, flag) {\n let elementAlreadyHasFlag = element.classList.contains(flag);\n if (elementHasFlag == elementAlreadyHasFlag) return;\n if (elementHasFlag) {\n element.classList.add(flag);\n } else {\n element.classList.remove(flag);\n }\n }\n static hasDirtyChildrenContainer(container) {\n if (container == null) return false;\n return container.querySelector('.' + flagDirty) != null;\n }\n static hasDirtyChildrenNotDeletedContainer(container) {\n if (container == null || container.classList.contains(flagDelete)) return false;\n return container.querySelector('.' + flagDirty + ':not(.' + flagDelete + ', .' + flagDelete + ' *)') != null;\n }\n static getElementValueCurrent(element) {\n let returnVal = '';\n \n if (!Validation.isEmpty(element)) {\n \n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n returnVal = element.checked;\n }\n /*\n else if (element.classList.contains(flagIsDatePicker)) {\n returnVal = getDatePickerDate(element, adjust4DayLightSavings);\n }\n */\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n returnVal = element.value;\n }\n else if (element.classList.contains(flagButton) && element.classList.contains(flagActive)) { // tagName === 'BUTTON'\n returnVal = element.classList.contains(flagDelete);\n }\n else if (tagName === 'TD') {\n returnVal = DOM.getElementAttributeValueCurrent(element);\n }\n else if (tagName == 'SVG' && element.classList.contains(flagCheckbox)) {\n returnVal = (element.classList.contains(flagIsChecked))\n }\n else {\n returnVal = element.textContent;\n }\n }\n \n if (Validation.isEmpty(returnVal)) returnVal = '';\n \n return returnVal;\n }\n static getElementAttributeValueCurrent(element) {\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValueCurrent);\n }\n static getElementAttributeValuePrevious(element) {\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValuePrevious);\n }\n /* base_table.handleChangeElementCellTable\n static updateAndCheckIsTableElementDirty(element) {\n let wasDirty = DOM.isElementDirty(element);\n let row = DOM.getRowFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n let isDirty = DOM.updateAndCheckIsElementDirty(element);\n let cell = DOM.getCellFromElement(element);\n Utils.consoleLogIfNotProductionEnvironment({element, row, cell, isDirty, wasDirty});\n if (isDirty != wasDirty) {\n DOM.handleDirtyElement(cell, isDirty);\n let isDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isDirtyRow);\n }\n }\n }\n */\n static scrollToElement(parent, element) {\n // REQUIRED: parent has scroll-bar\n parent.scrollTop(parent.scrollTop() + (element.offset().top - parent.offset().top));\n }\n static isElementInContainer(container, element) {\n\n if (typeof jQuery === 'function') {\n if (container instanceof jQuery) container = container[0];\n if (element instanceof jQuery) element = element[0];\n }\n\n var containerBounds = container.getBoundingClientRect();\n var elementBounds = element.getBoundingClientRect();\n\n return (\n containerBounds.top <= elementBounds.top &&\n containerBounds.left <= elementBounds.left &&\n ((elementBounds.top + elementBounds.height) <= (containerBounds.top + containerBounds.height)) &&\n ((elementBounds.left + elementBounds.width) <= (containerBounds.left + containerBounds.width))\n );\n }\n static alertError(errorType, errorText) {\n alert(errorType + '\\n' + errorText);\n }\n static createOptionUnselectedProductVariation() {\n return {\n [flagProductVariationType]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariationType],\n [flagName]: 'Select Variation Type',\n [attrIdProductVariationType]: 0,\n },\n [flagProductVariation]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariation],\n [flagName]: 'Select Variation',\n [attrIdProductVariation]: 0,\n },\n };\n }\n static createOption(optionJson) {\n if (Validation.isEmpty(optionJson)) optionJson = {\n text: 'Select',\n value: 0,\n };\n let option = document.createElement('option');\n option.value = optionJson.value;\n option.textContent = optionJson.text;\n option.selected = optionJson.selected;\n return option;\n }\n\n static escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n static unescapeHtml(html) {\n const div = document.createElement('div');\n div.innerHTML = html;\n return div.textContent || div.innerText || '';\n }\n}\n","import DOM from './dom.js';\n\nexport default class API {\n \n static getCsrfToken() {\n return document.querySelector(idCSRFToken).getAttribute('content');\n }\n \n static async request(hashEndpoint, method = 'GET', data = null, params = null) {\n const url = API.getUrlFromHash(hashEndpoint, params);\n const csrfToken = API.getCsrfToken();\n const options = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n [flagCsrfToken]: csrfToken,\n }\n };\n\n if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n data = { \n ...data, \n [flagCsrfToken]: csrfToken,\n };\n options.body = JSON.stringify(data);\n }\n\n try {\n const response = await fetch(url, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return await response.json();\n } catch (error) {\n console.error('API request failed:', error);\n throw error;\n }\n }\n \n static getUrlFromHash(hash, params = null) {\n if (hash == null) hash = hashPageHome;\n let url = API.parameteriseUrl(_pathHost + hash, params);\n return url;\n }\n static parameteriseUrl(url, params) {\n if (params) {\n url += '?' + new URLSearchParams(params).toString();\n }\n return url;\n }\n static goToUrl(url) {\n window.location.href = url;\n }\n static goToHash(hash, params = null) {\n const url = API.getUrlFromHash(hash, params);\n API.goToUrl(url);\n }\n\n // specific api calls\n /* Example:\n getUsers: () => request('/users'),\n getUserById: (id) => request(`/users/${id}`),\n createUser: (userData) => request('/users', 'POST', userData),\n updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),\n deleteUser: (id) => request(`/users/${id}`, 'DELETE'),\n */\n\n // User\n // user\n static async loginUser() {\n let callback = {};\n callback[flagCallback] = DOM.getHashPageCurrent();\n return await API.request(hashPageUserLogin, 'POST', callback);\n }\n static async saveUsers(users, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagUser] = users;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveUserUser, 'POST', dataRequest);\n }\n\n // MTG Game API methods\n static async saveGame(game, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagGame] = game;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGame, 'POST', dataRequest);\n }\n\n static async getGamePlayers(gameId) {\n const url = `/mtg/api/game/${gameId}/players`;\n return await API.request(url, 'GET');\n }\n static async saveGamePlayers(players, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagPlayer] = players;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGamePlayer, 'POST', dataRequest);\n }\n\n static async getGameRounds(gameId) {\n const url = `/mtg/api/game/${gameId}/rounds`;\n return await API.request(url, 'GET');\n }\n\n static async getGameDamageRecords(gameId) {\n const url = `/mtg/api/game/${gameId}/damage-records`;\n return await API.request(url, 'GET');\n }\n static async saveGameRoundPlayerDamages(rounds, damages, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagDamage] = damages;\n dataRequest[flagRound] = rounds;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGameRoundPlayerDamage, 'POST', dataRequest);\n }\n\n\n}\n","\nimport Utils from '../utils.js';\n\nexport default class BusinessObjects {\n static getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected = null) {\n return {\n text: objectJson[keyText],\n value: objectJson[keyValue],\n selected: (objectJson[keyValue] == valueSelected),\n };\n }\n static getOptionJsonFromObjectJson(objectJson, valueSelected = null) {\n let keyText = objectJson[flagNameAttrOptionText];\n let keyValue = objectJson[flagNameAttrOptionValue];\n // Utils.consoleLogIfNotProductionEnvironment({objectJson, keyText, keyValue});\n return BusinessObjects.getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected);\n }\n static getObjectText(objectJson) {\n return objectJson == null ? '' : objectJson[objectJson[flagNameAttrOptionText]];\n }\n static getListObjectsFromIdDictAndCsv(idDict, idCsv) {\n let listObjects = [];\n let ids = idCsv.split(',');\n for (let id of ids) {\n listObjects.push(idDict[id]);\n }\n return listObjects;\n }\n}","\nexport default class Events {\n static initialiseEventHandler(selectorElement, classInitialised, eventHandler) {\n document.querySelectorAll(selectorElement).forEach(function(element) {\n if (element.classList.contains(classInitialised)) return;\n eventHandler(element);\n element.classList.add(classInitialised);\n });\n }\n static hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n}","\nimport Validation from \"./validation.js\";\n\nexport default class LocalStorage {\n/*\nfunction getPageLocalStorage(pageHash) {\n\n let ls;\n try {\n ls = JSON.parse(localStorage.getItem(pageHash));\n } catch {\n\n }\n\n if (Validation.isEmpty(ls)) return {}\n\n return ls;\n}\nfunction getPageLocalStorageCurrent() {\n\n return JSON.parse(localStorage.getItem(hashPageCurrent));\n}\n\nfunction setPageLocalStorage(pageHash, newLS) {\n\n localStorage.setItem(pageHash, JSON.stringify(newLS));\n}\n\nfunction clearPageLocalStorage(pageHash) {\n localStorage.removeItem(pageHash);\n}\n\nfunction setupPageLocalStorage(pageHash) {\n\n let ls = getPageLocalStorage(pageHash);\n\n if (Validation.isEmpty(ls)) ls = {};\n\n setPageLocalStorage(pageHash, ls);\n}\n*/\n\n static getLocalStorage(key) {\n return JSON.parse(localStorage.getItem(key));\n }\n\n static setLocalStorage(key, newLS) {\n localStorage.setItem(key, JSON.stringify(newLS));\n }\n\n/*\nfunction setupPageLocalStorageNext(pageHashNext) {\n let lsOld = getPageLocalStorage(hashPageCurrent);\n hashPageCurrent = pageHashNext;\n clearPageLocalStorage(hashPageCurrent);\n setupPageLocalStorage(hashPageCurrent);\n let lsNew = getPageLocalStorage(hashPageCurrent);\n lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};\n setPageLocalStorage(hashPageCurrent, lsNew);\n}\n*/\n}","// Utility functions\n/*\nfunction $(selector) {\n return document.querySelector(selector);\n}\n\nfunction $$(selector) {\n return document.querySelectorAll(selector);\n}\n*/\nexport default class Utils {\n static getListFromDict(dict) {\n let list = [];\n for (let key in dict) {\n list.push(dict[key]);\n }\n return list;\n }\n static consoleLogIfNotProductionEnvironment(message) {\n if (environment.is_production != \"true\") {\n console.log(message);\n }\n }\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayConfirm {\n static hookup(callbackSuccess) {\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.style.visibility = 'hidden';\n });\n });\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagSubmit, flagInitialised, (buttonConfirm) => {\n buttonConfirm.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n let textarea = overlay.querySelector('textarea');\n overlay.style.visibility = 'hidden';\n callbackSuccess(textarea.value);\n });\n });\n }\n static show() {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.classList.remove(flagIsCollapsed);\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\nimport Validation from \"../lib/validation.js\";\n\nexport default class BasePage {\n constructor(router) {\n if (!router) {\n throw new Error(\"Router is required\");\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"initialising with router: \", router);\n }\n this.router = router;\n this.title = titlePageCurrent;\n if (this.constructor === BasePage) {\n throw new Error(\"Cannot instantiate abstract class\");\n }\n \n if (!this.constructor.hash) {\n throw new Error(`Class ${this.constructor.name} must have a static hash attribute.`);\n }\n }\n\n initialize() {\n throw new Error(\"Method 'initialize()' must be implemented.\");\n }\n\n sharedInitialize() {\n this.logInitialisation();\n this.hookupCommonElements();\n }\n\n logInitialisation() {\n Utils.consoleLogIfNotProductionEnvironment('Initialising ' + this.title + ' page');\n }\n \n hookupCommonElements() {\n // hookupVideos();\n this.hookupLogos();\n this.hookupNavigation();\n this.hookupOverlays();\n }\n hookupLogos() {\n Events.hookupEventHandler(\"click\", \".\" + flagImageLogo + \",\" + \".\" + flagLogo, (event, element) => {\n Utils.consoleLogIfNotProductionEnvironment('clicking logo');\n this.router.navigateToHash(hashPageHome);\n });\n }\n /*\n hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n */\n hookupNavigation() {\n Events.hookupEventHandler(\"click\", idButtonHamburger, (event, element) => {\n let overlayHamburger = document.querySelector(idOverlayHamburger);\n if (overlayHamburger.classList.contains(flagIsCollapsed)) {\n overlayHamburger.classList.remove(flagIsCollapsed);\n overlayHamburger.classList.add(flagExpanded);\n } else {\n overlayHamburger.classList.remove(flagExpanded);\n overlayHamburger.classList.add(flagIsCollapsed);\n }\n });\n\n this.hookupButtonsNavUserAccount();\n this.hookupButtonsNavUserLogout();\n this.hookupButtonsNavUserLogin();\n }\n hookupButtonsNav(buttonSelector) {\n Events.hookupEventHandler(\"click\", buttonSelector, (event, button) => {\n let pageHash = buttonSelector.getAttribute('href');\n this.router.navigateToHash(pageHash); \n });\n }\n hookupButtonsNavUserAccount() {\n // this.hookupButtonsNav('.' + flagNavUserAccount);\n }\n hookupButtonsNavUserLogout() {\n // this.hookupButtonsNav('.' + flagNavUserLogout);\n }\n hookupButtonsNavUserLogin() {\n Events.hookupEventHandler(\"click\", '.' + flagNavUserLogin, (event, navigator) => {\n event.preventDefault();\n event.stopPropagation();\n this.leave();\n API.loginUser()\n .then((response) => {\n if (response.Success) {\n window.location.href = response[flagCallback];\n } else {\n DOM.alertError(\"Error\", response.Message);\n }\n });\n });\n }\n\n hookupOverlays() {\n this.hookupOverlayFromId(idOverlayConfirm);\n this.hookupOverlayFromId(idOverlayError);\n }\n\n hookupOverlayFromId(idOverlay) {\n Events.initialiseEventHandler(idOverlay, flagInitialised, (overlay) => {\n overlay.querySelector('button.' + flagCancel).addEventListener(\"click\", (event) => {\n event.stopPropagation();\n overlay.style.display = 'none';\n });\n });\n }\n\n hookupButtonSave() {\n Events.initialiseEventHandler('.' + flagContainer + '.' + flagSave + '.' + flagCancel + ' button.' + flagSave, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n Utils.consoleLogIfNotProductionEnvironment('saving page: ', this.title);\n OverlayConfirm.show();\n });\n });\n }\n\n leave() {\n Utils.consoleLogIfNotProductionEnvironment('Leaving ' + this.title + ' page');\n if (this.constructor === BasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n }\n setLocalStoragePage(dataPage) {\n LocalStorage.setLocalStorage(this.hash, dataPage);\n }\n getLocalStoragePage() {\n return LocalStorage.getLocalStorage(this.hash);\n }\n\n toggleShowButtonsSaveCancel(show, buttonContainerSelector = null) { // , buttonSave = null, buttonCancel = null\n if (Validation.isEmpty(buttonContainerSelector)) buttonContainerSelector = '.' + flagContainer + '.' + flagSave + '.' + flagCancel;\n let buttonSave = document.querySelector(buttonContainerSelector + ' ' + idButtonSave);\n if (buttonSave == null) return;\n let buttonCancel = document.querySelector(buttonContainerSelector + ' ' + idButtonCancel);\n Utils.consoleLogIfNotProductionEnvironment({ show, buttonContainerSelector, buttonCancel, buttonSave });\n if (show) {\n buttonCancel.classList.remove(flagIsCollapsed);\n buttonSave.classList.remove(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('showing buttons');\n } else {\n buttonCancel.classList.add(flagIsCollapsed);\n buttonSave.classList.add(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('hiding buttons');\n }\n }\n\n static isDirtyFilter(filter) {\n let isDirty = DOM.updateAndCheckIsElementDirty(filter);\n if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();\n return isDirty;\n }\n\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayError {\n static hookup() {\n Events.initialiseEventHandler(idOverlayError + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayError);\n overlay.style.visibility = 'hidden';\n });\n });\n }\n static show(msgError) {\n let overlay = document.querySelector(idOverlayError);\n let labelError = overlay.querySelector(idLabelError);\n labelError.innerText = msgError;\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport Validation from \"../lib/validation.js\";\nimport BasePage from \"./base.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\n\nexport default class TableBasePage extends BasePage {\n // static hash\n // static attrIdRowObject\n // callSaveTableContent\n\n constructor(router) {\n super(router);\n this.cursorYInitial = null;\n this.rowInitial = null;\n this.placeholder = null;\n this.dragSrcEl = null;\n this.dragSrcRow = null;\n\n this.hookupTableCellDdls = this.hookupTableCellDdls.bind(this);\n }\n \n initialize(isPopState = false) {\n throw new Error(\"Must implement initialize() method.\");\n }\n sharedInitialize(isPopState = false, isSinglePageApp = false) {\n if (!isPopState) {\n super.sharedInitialize();\n this.hookupFilters();\n this.hookupButtonsSaveCancel();\n this.hookupTableMain();\n OverlayConfirm.hookup(() => {\n if (isSinglePageApp) {\n this.saveRecordsTableDirtySinglePageApp();\n }\n else {\n this.saveRecordsTableDirty();\n }\n });\n } else {\n let dataPage = this.getLocalStoragePage();\n let filters = dataPage[flagFormFilters];\n let formFilters = TableBasePage.getFormFilters();\n let filtersDefault = DOM.convertForm2JSON(formFilters);\n if (!Validation.areEqualDicts(filters, filtersDefault)) {\n this.callFilterTableContent();\n }\n }\n }\n hookupFilters() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method hookupFilters().\");\n }\n }\n sharedHookupFilters() {\n this.hookupButtonApplyFilters();\n this.hookupSearchTextFilter();\n }\n hookupFilterActive() {\n let filterSelector = idFormFilters + ' #' + flagActiveOnly;\n let filterActiveOld = document.querySelector(filterSelector);\n filterActiveOld.removeAttribute('id');\n let parentDiv = filterActiveOld.parentElement;\n let isChecked = (DOM.getElementAttributeValuePrevious(parentDiv) == \"True\");\n let filterActiveNew = document.querySelector(idFormFilters + ' div.' + flagActiveOnly + '.' + flagContainerInput + ' svg.' + flagActiveOnly);\n filterActiveNew.setAttribute('id', flagActiveOnly);\n if (isChecked) filterActiveNew.classList.add(flagIsChecked);\n\n Events.hookupEventHandler(\"click\", filterSelector, (event, filterActive) => {\n Utils.consoleLogIfNotProductionEnvironment({ filterActive });\n Utils.consoleLogIfNotProductionEnvironment({ [filterActive.tagName]: filterActive.tagName });\n let svgElement = (filterActive.tagName.toUpperCase() == 'SVG') ? filterActive : filterActive.parentElement;\n let wasChecked = svgElement.classList.contains(flagIsChecked);\n if (wasChecked) {\n svgElement.classList.remove(flagIsChecked);\n }\n else {\n svgElement.classList.add(flagIsChecked);\n }\n return this.handleChangeFilter(event, filterActive);\n });\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n hookupFilter(filterFlag, handler = (event, filter) => { return this.handleChangeFilter(event, filter); }) {\n let filterSelector = idFormFilters + ' #' + filterFlag;\n Events.hookupEventHandler(\"change\", filterSelector, handler);\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n handleChangeFilter(event, filter) {\n let isDirtyFilter = DOM.updateAndCheckIsElementDirty(filter);\n let formFilters = TableBasePage.getFormFilters();\n let areDirtyFilters = isDirtyFilter || DOM.hasDirtyChildrenContainer(formFilters);\n let tbody = document.querySelector(idTableMain + ' tbody');\n let rows = tbody.querySelectorAll(':scope > tr');\n rows.forEach((row) => {\n if (areDirtyFilters && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);\n if (!areDirtyFilters && row.classList.contains(flagIsCollapsed)) {\n row.classList.remove(flagIsCollapsed);\n let dirtyInputs = row.querySelectorAll('input.' + flagDirty);\n dirtyInputs.forEach((dirtyInput) => {\n dirtyInput.value = DOM.getElementAttributeValueCurrent(dirtyInput);\n });\n }\n });\n if (areDirtyFilters) {\n /*\n tbody.querySelectorAll('tr').forEach((tr) => { \n if (!DOM.hasDirtyChildrenContainer(tr)) tr.remove(); \n });\n */\n tbody.innerHTML = '
Press \"Apply Filters\" to refresh the table.
' + tbody.innerHTML;\n if (!tbody.classList.contains(flagIsCollapsed)) tbody.classList.add(flagIsCollapsed);\n }\n else {\n let isDirtyLabel = tbody.querySelector(\":scope > div\");\n if (isDirtyLabel != null) isDirtyLabel.remove();\n if (tbody.classList.contains(flagIsCollapsed)) tbody.classList.remove(flagIsCollapsed);\n let initialisedElements = tbody.querySelectorAll('.' + flagInitialised);\n initialisedElements.forEach((initialisedElement) => {\n initialisedElement.classList.remove(flagInitialised);\n });\n this.hookupTableMain();\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupFilterIsNotEmpty() {\n this.hookupFilter(flagIsNotEmpty);\n }\n hookupButtonApplyFilters() {\n Events.hookupEventHandler(\"click\", idButtonApplyFilters, (event, button) => {\n event.stopPropagation();\n this.callFilterTableContent();\n });\n }\n hookupSearchTextFilter() {\n this.hookupFilter(flagSearch);\n }\n hookupFilterCommandCategory() {\n this.hookupFilter(attrIdCommandCategory, (event, filterCommandCategory) => {\n this.handleChangeFilter();\n let isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);\n let idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);\n console.log(\"filter commands unsorted\");\n console.log(Utils.getListFromDict(filterCommands));\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => command[attrIdCommandCategory] == idCommandCategory);\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n let filterCommand = document.querySelector(idFormFilters + ' .' + flagCommand);\n let idCommandPrevious = DOM.getElementAttributeValuePrevious(filterCommand);\n filterCommand.innerHTML = '';\n let optionJson, option;\n option = DOM.createOption(null);\n filterCommand.appendChild(option);\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command, idCommandPrevious);\n option = DOM.createOption(optionJson);\n filterCommand.appendChild(option);\n });\n filterCommand.dispatchEvent(new Event('change'));\n return isDirtyFilter;\n });\n }\n hookupFilterCommand() {\n this.hookupFilter(attrIdCommand);\n }\n hookupFilterLocation() {\n this.hookupFilter(attrIdLocation);\n }\n /*\n getAndLoadFilteredTableContent = () => {\n this.callFilterTableContent()\n .catch(error => console.error('Error:', error));\n }\n */\n static getFormFilters() {\n return document.querySelector(idFormFilters);\n }\n callFilterTableContent() {\n let formFilters = TableBasePage.getFormFilters();\n let filtersJson = DOM.convertForm2JSON(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"callFilterTableContent\");\n Utils.consoleLogIfNotProductionEnvironment(\"formFilters\");\n Utils.consoleLogIfNotProductionEnvironment(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"filtersJson\");\n Utils.consoleLogIfNotProductionEnvironment(filtersJson);\n this.leave();\n API.goToHash(this.constructor.hash, filtersJson);\n }\n callbackLoadTableContent(response) {\n let table = TableBasePage.getTableMain();\n let bodyTable = table.querySelector('tbody');\n bodyTable.querySelectorAll('tr').forEach(function(row) { row.remove(); });\n let rowsJson = response.data[flagRows];\n if (!Validation.isEmpty(rowsJson) && rowsJson.every(row => row.hasOwnProperty('display_order'))) {\n rowsJson = rowsJson.sort((a, b) => a.display_order - b.display_order);\n }\n rowsJson.forEach(this.loadRowTable.bind(this));\n this.hookupTableMain();\n }\n static getTableMain() {\n return document.querySelector(idTableMain);\n }\n loadRowTable(rowJson) {\n throw new Error(\"Subclass of TableBasePage must implement method loadRowTable().\");\n }\n getAndLoadFilteredTableContentSinglePageApp() {\n this.callFilterTableContent()\n .then(data => {\n Utils.consoleLogIfNotProductionEnvironment('Table data received:', data);\n this.callbackLoadTableContent(data);\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonsSaveCancel() {\n this.hookupButtonSave();\n this.hookupButtonCancel();\n this.toggleShowButtonsSaveCancel(false);\n }\n saveRecordsTableDirty() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = TableBasePage.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callFilterTableContent();\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n getTableRecords(dirtyOnly = false) {\n let records = [];\n let record;\n document.querySelectorAll(idTableMain + ' > tbody > tr').forEach((row) => {\n if (dirtyOnly && !DOM.hasDirtyChildrenContainer(row)) return;\n record = this.getJsonRow(row);\n records.push(record);\n });\n return records;\n }\n getJsonRow(row) {\n throw new Error(\"Subclass of TableBasePage must implement method getJsonRow().\");\n }\n saveRecordsTableDirtySinglePageApp() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = TableBasePage.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callbackLoadTableContent(data);\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonCancel() {\n Events.initialiseEventHandler('.' + flagContainer + '.' + flagSave + '.' + flagCancel + ' button.' + flagCancel, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n this.callFilterTableContent();\n });\n button.classList.add(flagIsCollapsed);\n });\n }\n handleClickAddRowTable(event, button) {\n event.stopPropagation();\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - _rowBlank.getAttribute(this.constructor.attrIdRowObject));\n let tbody = document.querySelector(idTableMain + ' tbody');\n if (tbody.classList.contains(flagIsCollapsed)) return;\n let row = _rowBlank.cloneNode(true);\n row.classList.remove(flagInitialised);\n row.querySelectorAll('.' + flagInitialised).forEach(function(element) {\n element.classList.remove(flagInitialised);\n });\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n row.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n this.initialiseRowNew(tbody, row);\n tbody.prepend(row);\n tbody.scrollTop = 0;\n this.hookupTableMain();\n this.postInitialiseRowNewCallback(tbody);\n }\n initialiseRowNew(tbody, row) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method initialiseRowNew().\");\n }\n // row.classList.remove(flagRowNew);\n }\n hookupTableMain() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement hookupTableMain() method.\");\n }\n Events.initialiseEventHandler(idTableMain, flagInitialised, (table) => {\n this.cacheRowBlank();\n });\n }\n cacheRowBlank() {\n let selectorRowNew = idTableMain + ' tbody tr.' + flagRowNew;\n let rowBlankTemp = document.querySelector(selectorRowNew);\n if (rowBlankTemp == null) return;\n Utils.consoleLogIfNotProductionEnvironment(\"row blank temp: \", rowBlankTemp);\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n _rowBlank = rowBlankTemp.cloneNode(true);\n document.querySelectorAll(selectorRowNew).forEach(function(row) {\n row.remove();\n });\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n }\n postInitialiseRowNewCallback(tbody) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method postInitialiseRowNewCallback(tbody).\");\n }\n }\n initialiseSliderDisplayOrderRowNew(tbody, row) {\n // let tdSelector = ':scope > tr > td.' + flagDisplayOrder;\n // let tbody = document.querySelector('table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody');\n let slidersDisplayOrder = tbody.querySelectorAll(':scope > tr > td.' + flagDisplayOrder + ' input.' + flagSlider);\n let maxDisplayOrder = 0;\n slidersDisplayOrder.forEach((slider) => {\n maxDisplayOrder = Math.max(maxDisplayOrder, parseFloat(DOM.getElementValueCurrent(slider)));\n });\n let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);\n DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, maxDisplayOrder + 1);\n }\n hookupSlidersDisplayOrderTable() {\n let selectorDisplayOrder = idTableMain + ' tbody tr td.' + flagDisplayOrder + ' input.' + flagSlider + '.' + flagDisplayOrder;\n this.hookupChangeHandlerTableCells(selectorDisplayOrder);\n }\n hookupChangeHandlerTableCells(inputSelector, handler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.initialiseEventHandler(inputSelector, flagInitialised, (input) => {\n input.addEventListener(\"change\", (event) => {\n handler(event, input);\n });\n handler(null, input);\n });\n }\n handleChangeNestedElementCellTable(event, element) {\n let wasDirtyParentRows = this.getAllIsDirtyRowsInParentTree(element);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n // Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement, wasDirtyParentRows});\n // let td = DOM.getCellFromElement(element);\n // DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element));\n if (isDirtyElement != wasDirtyElement) {\n // DOM.handleDirtyElement(td, isDirtyElement);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows);\n }\n }\n getAllIsDirtyRowsInParentTree(element) {\n let rows = [];\n let parent = element;\n let isDirty;\n while (parent) {\n if (parent.tagName.toUpperCase() == 'TR') {\n isDirty = parent.classList.contains(flagDirty)\n rows.push(isDirty);\n }\n parent = parent.parentElement;\n }\n return rows;\n }\n cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows) {\n if (Validation.isEmpty(wasDirtyParentRows)) return;\n let tr = DOM.getRowFromElement(element);\n let isDirtyRow = isDirtyElement || DOM.hasDirtyChildrenContainer(tr);\n let wasDirtyRow = wasDirtyParentRows.shift();\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(tr, isDirtyRow);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(tr.parentElement, isDirtyRow, wasDirtyParentRows);\n }\n }\n hookupChangeHandlerTableCellsWhenNotCollapsed(inputSelector, handler = (event, element) => {\n if (!element.classList.contains(flagIsCollapsed)) this.handleChangeNestedElementCellTable(event, element);\n }) {\n Events.hookupEventHandler(\"change\", inputSelector, handler);\n }\n hookupFieldsCodeTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagCode + ' > .' + flagCode);\n }\n hookupFieldsNameTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagName + ' > .' + flagName);\n }\n hookupFieldsDescriptionTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagDescription + ' > .' + flagDescription);\n }\n hookupFieldsNotesTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagNotes + ' > .' + flagNotes);\n }\n hookupFieldsActive(flagTable = '', handleClickRowNew = (event, element) => { this.handleClickAddRowTable(event, element); }) {\n let selectorButton = 'table.table-main' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' .' + flagButton + '.' + flagActive;\n let selectorButtonDelete = selectorButton + '.' + flagDelete;\n let selectorButtonUndelete = selectorButton + ':not(.' + flagDelete + ')';\n Utils.consoleLogIfNotProductionEnvironment(\"hookupFieldsActive: \", selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);\n Events.hookupEventHandler(\n \"click\"\n , 'table.table-main' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' .' + flagButton + '.' + flagActive\n , (event, button) => { handleClickRowNew(event, button); }\n );\n }\n hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.hookupEventHandler(\"click\", selectorButtonDelete, (event, element) => {\n this.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = element.classList.contains(flagDirty);\n let row = DOM.getRowFromElement(element);\n if (row.classList.contains(flagRowNew) && !DOM.hasDirtyChildrenContainer(row)) {\n row.parentNode.removeChild(row);\n }\n else {\n let buttonAddTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagAdd);\n let buttonAdd = buttonAddTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonAdd, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonAdd, false);\n if (wasDirty) buttonAdd.classList.add(flagDirty);\n element.replaceWith(buttonAdd);\n changeHandler(null, buttonAdd);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.hookupEventHandler(\"click\", selectorButtonUndelete, (event, element) => {\n this.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = DOM.isElementDirty(element);\n let buttonDeleteTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagDelete);\n let buttonDelete = buttonDeleteTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonDelete, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonDelete, true);\n if (wasDirty) buttonDelete.classList.add(flagDirty);\n element.replaceWith(buttonDelete);\n changeHandler(null, buttonDelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupTdsAccessLevel() {\n this.hookupTableCellDdlPreviews(flagAccessLevel, Utils.getListFromDict(accessLevels));\n }\n hookupTableCellDdlPreviews(\n fieldFlag\n , optionList\n , cellSelector = null\n , ddlHookup = (ddlSelector) => { this.hookupTableCellDdls(ddlSelector); }\n , changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }\n ) {\n if (cellSelector == null) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n Events.hookupEventHandler(\"click\", cellSelector + ' div.' + fieldFlag, (event, div) => {\n this.handleClickTableCellDdlPreview(\n event\n , div\n , fieldFlag\n , optionList\n , cellSelector\n , (ddlSelector) => { ddlHookup(\n ddlSelector\n , (event, element) => { changeHandler(event, element); }\n ); }\n );\n });\n ddlHookup(cellSelector + ' select.' + fieldFlag);\n }\n hookupTableCellDdls(ddlSelector, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { changeHandler(event, element); });\n }\n handleClickTableCellDdlPreview(event, div, fieldFlag, optionObjectList, cellSelector = null, ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); }) {\n if (Validation.isEmpty(cellSelector)) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n let idSelected = DOM.getElementAttributeValueCurrent(div);\n let td = DOM.getCellFromElement(div);\n td.innerHTML = '';\n let ddl = document.createElement('select');\n ddl.classList.add(fieldFlag);\n DOM.setElementValuesCurrentAndPrevious(ddl, idSelected);\n let optionJson, option;\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment(\"click table cell ddl preview\");\n Utils.consoleLogIfNotProductionEnvironment({optionObjectList, cellSelector});\n }\n option = DOM.createOption(null);\n ddl.appendChild(option);\n optionObjectList.forEach((optionObjectJson) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(optionObjectJson, idSelected);\n option = DOM.createOption(optionJson);\n ddl.appendChild(option);\n });\n td.appendChild(ddl);\n let ddlSelector = cellSelector + ' select.' + fieldFlag;\n ddlHookup(ddlSelector);\n }\n /*\n hookupTableCellDDlPreviewsWhenNotCollapsed(cellSelector, optionList, ddlHookup = (event, element) => { this.hookupTableCellDdls(event, element); }) {\n Events.hookupEventHandler(\"click\", cellSelector + ' div', (event, div) => {\n this.handleClickTableCellDdlPreview(event, div, optionList, cellSelector, (event, element) => { ddlHookup(event, element); });\n });\n }\n */\n toggleColumnCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n toggleColumnHeaderCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n\n hookupFieldsCommandCategory(idTable = null) {\n if (idTable == null) idTable = idTableMain;\n this.hookupTableCellDdlPreviews(\n flagCommandCategory\n , Utils.getListFromDict(filterCommandCategories).sort((a, b) => a[flagName].localeCompare(b[flagName]))\n , idTable + ' > tbody > tr > td.' + flagCommandCategory // + ' .' + flagCommandCategory\n , (cellSelector) => { this.hookupCommandCategoryDdls(cellSelector); }\n );\n }\n hookupCommandCategoryDdls(ddlSelector) {\n this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeCommandCategoryDdl(event, element); });\n }\n handleChangeCommandCategoryDdl(event, ddlCategory) {\n let row = DOM.getRowFromElement(ddlCategory);\n let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n this.handleChangeNestedElementCellTable(event, ddlCategory);\n let idCommandCategoryRowNew = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n if (\n idCommandCategoryRowOld == idCommandCategoryRowNew\n || idCommandCategoryRowNew == 0\n ) return;\n console.log({ idCommandCategoryRowNew, idCommandCategoryRowOld });\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let tdCommand = row.querySelector('td.' + flagCommand);\n tdCommand.dispatchEvent(new Event('click'));\n let ddlCommand = row.querySelector('td.' + flagCommand + ' select.' + flagCommand);\n ddlCommand.innerHTML = '';\n ddlCommand.appendChild(DOM.createOption(null));\n let optionJson, option;\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRowNew\n || idCommandCategoryRowNew == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command);\n option = DOM.createOption(optionJson);\n ddlCommand.appendChild(option);\n });\n this.handleChangeNestedElementCellTable(event, ddlCommand);\n }\n hookupFieldsCommand(idTable = null) {\n if (idTable == null) idTable = idTableMain;\n Events.hookupEventHandler(\"click\", idTable + ' > tbody > tr > td.' + flagCommand + ' div.' + flagCommand, (event, div) => {\n Utils.consoleLogIfNotProductionEnvironment(div);\n let parentTr = DOM.getRowFromElement(div);\n Utils.consoleLogIfNotProductionEnvironment({ div, parentTr });\n let tdCommandCategory = parentTr.querySelector('td.' + flagCommandCategory);\n let idCommandCategoryRow = this.getIdCommandCategoryRow(parentTr); // DOM.getElementAttributeValueCurrent(tdCommandCategory);\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let filterCommandList = Utils.getListFromDict(filterCommands);\n let commandsInCategory = filterCommandList.filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRow\n || idCommandCategoryRow == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n Utils.consoleLogIfNotProductionEnvironment({ tdCommandCategory, idCommandCategoryRow, idCommandCategoryFilter, filterCommandList, commandsInCategory });\n Utils.consoleLogIfNotProductionEnvironment(filterCommandList);\n this.handleClickTableCellDdlPreview(\n event\n , div\n , flagCommand // fieldFlag\n , sortedCommands // optionList\n , idTable + ' > tbody > tr > td.' + flagCommand // cellSelector\n , (cellSelector) => { this.hookupTableCellDdls(\n cellSelector\n , (event, element) => { this.handleChangeCommandDdl(event, element); }\n ); }\n );\n });\n this.hookupTableCellDdls(\n idTable + ' > tbody > tr > td.' + flagCommand + ' select.' + flagCommand\n , (event, element) => { this.handleChangeCommandDdl(event, element); }\n );\n }\n handleChangeCommandDdl(event, ddlCommand) {\n // console.log(\"handle change command ddl\");\n let row = DOM.getRowFromElement(ddlCommand);\n this.handleChangeNestedElementCellTable(event, ddlCommand);\n let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row);\n let idCommandNew = this.getIdCommandRow(row);\n let commandNew = filterCommands[idCommandNew];\n // console.log({ idCommandCategoryRowOld, commandNew });\n if (commandNew == null || idCommandCategoryRowOld == commandNew[attrIdCommandCategory]) return;\n let divCommandCategory = row.querySelector('td.' + flagCommandCategory + ' div');\n if (divCommandCategory) divCommandCategory.dispatchEvent(new Event('click'));\n let ddlCommandCategory = row.querySelector('td.' + flagCommandCategory + ' select.' + flagCommandCategory);\n DOM.setElementValueCurrent(ddlCommandCategory, commandNew[attrIdCommandCategory]);\n // console.log({ ddlCommandCategory, commandNew });\n this.handleChangeNestedElementCellTable(event, ddlCommandCategory);\n }\n getIdCommandCategoryRow(tr) {\n let elementCommandCategory = tr.querySelector('td.' + flagCommandCategory + ' .' + flagCommandCategory);\n return DOM.getElementAttributeValueCurrent(elementCommandCategory);\n }\n getIdCommandCategoryFilter() {\n let formFilters = TableBasePage.getFormFilters();\n let idCommandCategory = 0;\n if (formFilters == null) return idCommandCategory;\n let commandCategoryFilter = formFilters.querySelector('#' + attrIdCommandCategory);\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let valueCurrentCommandCategoryFilter = DOM.getElementAttributeValueCurrent(commandCategoryFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandCategoryFilter });\n if (valueCurrentCommandCategoryFilter == \"\") {\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandFilter });\n if (valueCurrentCommandFilter != \"\") {\n let command = filterCommands[valueCurrentCommandFilter];\n idCommandCategory = command[attrIdCommandCategory];\n }\n } else {\n idCommandCategory = parseInt(valueCurrentCommandCategoryFilter);\n }\n return idCommandCategory;\n }\n getHasCommandCategoryFilter() {\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n return !(Validation.isEmpty(idCommandCategoryFilter) || idCommandCategoryFilter == 0);\n }\n getIdCommandRow(tr) {\n let elementCommand = tr.querySelector('td.' + flagCommand + ' .' + flagCommand);\n return DOM.getElementAttributeValueCurrent(elementCommand);\n }\n getIdCommandFilter() {\n let formFilters = TableBasePage.getFormFilters();\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n let idCommand = parseInt(valueCurrentCommandFilter);\n return idCommand;\n }\n getHasCommandFilter() {\n let idCommandFilter = this.getIdCommandFilter();\n return !(Validation.isEmpty(idCommandFilter) || idCommandFilter == 0);\n }\n /*\n createTdActive(isActive) {\n let tdActive = document.createElement(\"td\");\n tdActive.classList.add(flagActive);\n let buttonActive = document.createElement(\"button\");\n buttonActive.classList.add(flagActive);\n buttonActive.classList.add(isActive ? flagDelete : flagAdd);\n buttonActive.textContent = isActive ? 'x' : '+';\n DOM.setElementAttributesValuesCurrentAndPrevious(buttonActive, isActive);\n tdActive.appendChild(buttonActive);\n return tdActive;\n }\n */\n leave() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n super.leave();\n let formFilters = TableBasePage.getFormFilters();\n let dataPage = {};\n dataPage[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n this.setLocalStoragePage(dataPage);\n }\n\n toggleColumnHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n let columnThHasFlag = columnTh.classList.contains(classnameFlag);\n if (isRequiredFlag == columnThHasFlag) return;\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n toggleColumnHeaderHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n\n updateAndToggleShowButtonsSaveCancel() {\n // let pageBody = document.querySelector(idPageBody);\n let isDirty = DOM.hasDirtyChildrenContainer(pageBody);\n\n let buttonContainerSelector = '.' + flagContainer + '.' + flagSave + '.' + flagCancel;\n let buttonSave = document.querySelector(buttonContainerSelector + ' ' + idButtonSave);\n let areVisibleSaveCancelButtons = !buttonSave.classList.contains(flagIsCollapsed);\n \n console.log({ pageBody, isDirty, areVisibleSaveCancelButtons });\n\n this.toggleShowButtonsSaveCancel(isDirty || areVisibleSaveCancelButtons);\n }\n}\n","\nimport API from \"../../api.js\";\nimport Events from \"../../lib/events.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\n\nexport default class PageMtgDecks extends TableBasePage {\n static hash = hashPageMtgDecks;\n static attrIdRowObject = attrDeckId;\n callSaveTableContent = API.saveDeck;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n hookupFilters() {\n /*\n this.sharedHookupFilters();\n this.hookupFilterActive();\n */\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n return;\n }\n initialiseRowNew(tbody, row) {\n }\n postInitialiseRowNewCallback(tbody) {\n let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n let newestRow = newRows[0];\n let clickableElementsSelector = [\n 'td.' + attrCommanderBracketId + ' div.' + attrCommanderBracketId\n ].join('');\n newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {\n clickableElement.click();\n });\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupTableMainRows();\n this.hookupFieldsNameTable();\n this.hookupTableMainIsCommanderCheckboxes();\n this.hookupTableMainCommanderBracketPreviews();\n this.hookupFieldsActive();\n }\n hookupTableMainRows() {\n return;\n let rowSelector = 'table.' + flagTableMain + ' tbody tr';\n Events.hookupEventHandler(\"click\", rowSelector, (event, row) => {\n let isRowExpanded = row.classList.contains(flagActive);\n let showSection;\n if (isRowExpanded) {\n showSection = false;\n PageMtgDecks.toggleShowDeckStatisticsSection(showSection);\n }\n else {\n showSection = true;\n let deckId = row.getAttribute(attrDeckId);\n let statisticsSectionTableBody = document.querySelector('table.' + flagStatistics + ' tbody');\n statisticsSectionTableBody.innerHTML = '';\n let deck = decks.filter(d => d[attrDeckId] == deckId)[0];\n if (deck[flagStatistics].length > 0) {\n let newStatisticRowsHtml = '';\n deck[flagStatistics]\n .sort((a, b) => a[flagDisplayOrder] - b[flagDisplayOrder])\n .forEach((statistic) => {\n newStatisticRowsHtml += `\n \n ${statistic[flagName]}\n ${statistic[flagValue]}\n \n `;\n });\n statisticsSectionTableBody.innerHTML = newStatisticRowsHtml;\n }\n PageMtgDecks.toggleShowDeckStatisticsSection(showSection);\n }\n });\n }\n static toggleShowDeckStatisticsSection(showSection) {\n let statisticsSectionTableBody = document.querySelector('table.' + flagStatistics + ' tbody');\n if (showSection) {\n statisticsSectionTableBody.classList.remove(flagIsCollapsed);\n }\n else {\n statisticsSectionTableBody.classList.add(flagIsCollapsed);\n }\n }\n hookupTableMainIsCommanderCheckboxes() {\n this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIsCommander + ' .' + flagIsCommander);\n }\n hookupTableMainCommanderBracketPreviews() {\n this.hookupTableCellDdlPreviews(\n attrCommanderBracketId\n , Utils.getListFromDict(commanderBrackets)\n );\n }\n \n leave() {\n super.leave();\n }\n}\n","\n\nimport API from \"../../api.js\";\nimport TableBasePage from \"../base_table.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\n\nexport default class PageMtgGame extends TableBasePage {\n static hash = hashPageMtgGame;\n static attrIdRowObject = attrGameId;\n callSaveTableContent = API.saveGame;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTcgGame();\n }\n hookupFilters() {\n // this.sharedHookupFilters();\n }\n loadRowTable(rowJson) {\n return;\n }\n getJsonRow(row) {\n return;\n }\n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n \n }\n\n hookupTableMain() {\n super.hookupTableMain();\n }\n hookupTcgGame() {\n this.initGamePage();\n let pageHeading = document.querySelector('.container.company-name .tcg-title.company-name');\n pageHeading.innerText = `MTG Game #${gameId}`;\n }\n\n initGamePage() {\n // Load existing game state from API or show setup\n PageMtgGame.updatePlayerSetup();\n if (typeof gameId !== 'undefined' && gameId) {\n this.loadGameFromServer();\n }\n /*\n else {\n PageMtgGame.updatePlayerSetup();\n }\n */\n \n PageMtgGame.hookupResetButton();\n PageMtgGame.hookupPlayerCountInput();\n this.hookupStartGameButton();\n /*\n this.hookupCommanderDeathIncrementButtons();\n this.hookupEliminateCommanderButtons();\n this.hookupPlayerLifeIncrementButtons();\n this.hookupCommanderDamageIncrementButtons();\n */\n }\n static hookupResetButton() {\n const resetGameButton = document.querySelector('header.game-header .header-right .btn-tcg.btn-tcg-secondary');\n if (resetGameButton) {\n resetGameButton.addEventListener('click', PageMtgGame.resetGame);\n }\n }\n static hookupPlayerCountInput() {\n const playerCountInput = document.getElementById('playerCount');\n if (playerCountInput) {\n playerCountInput.addEventListener('change', PageMtgGame.updatePlayerSetup);\n }\n }\n hookupStartGameButton() {\n const startGameButton = document.querySelector('.setup-section .setup-actions .btn-tcg');\n if (startGameButton) {\n startGameButton.addEventListener('click', () => { this.startGame(); });\n }\n }\n /*\n hookupCommanderDeathIncrementButtons() {\n const commanderDeathIncremementButtons = document.querySelectorAll('#players-grid .player-card .commander-deaths .death-btn');\n if (commanderDeathIncremementButtons) {\n commanderDeathIncremementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeCommanderDeaths);\n });\n }\n }\n hookupEliminateCommanderButtons() {\n const eliminateCommanderButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (eliminateCommanderButtons) {\n eliminateCommanderButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.toggleEliminate);\n });\n }\n }\n hookupPlayerLifeIncrementButtons() {\n const playerLifeIncrementButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (playerLifeIncrementButtons) {\n playerLifeIncrementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeLife);\n });\n }\n }\n hookupCommanderDamageIncrementButtons() {\n const commanderDamageIncrementButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (commanderDamageIncrementButtons) {\n commanderDamageIncrementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeCommanderDamage);\n });\n }\n }\n */\n\n async loadGameFromServer() {\n console.log(\"loading game from server\");\n try {\n // Fetch players, rounds, and damage records from API\n const [playersResponse, roundsResponse, damageResponse] = await Promise.all([\n API.getGamePlayers(gameId)\n , API.getGameRounds(gameId)\n , API.getGameDamageRecords(gameId)\n ]);\n console.log({ playersResponse, damageResponse });\n\n let setupSection = document.getElementById('setupSection');\n let gameSection = document.getElementById('gameSection');\n setupSection.classList.remove('hidden');\n gameSection.classList.add('hidden');\n\n if (playersResponse.status !== 'success') {\n console.error('Failed to load players:', playersResponse.message);\n return;\n }\n\n const savedPlayers = playersResponse.data || [];\n const savedRounds = roundsResponse.status === 'success' ? (roundsResponse.data || []) : [];\n const savedDamageRecords = damageResponse.status === 'success' ? (damageResponse.data || []) : [];\n \n players = savedPlayers;\n rounds = savedRounds;\n damageRecords = savedDamageRecords;\n\n if (savedPlayers.length === 0) {\n // No players yet, show setup section\n return;\n }\n\n // Hide setup, show game\n setupSection.classList.add('hidden');\n gameSection.classList.remove('hidden');\n\n console.log({ savedPlayers, damageRecords });\n\n // Render players to DOM\n const latestRoundId = PageMtgGame.getLatestRoundId();\n const latestRound = rounds.filter(round => round[attrRoundId] == latestRoundId)[0];\n const roundDisplayOrderLabel = PageMtgGame.getRoundDisplayOrderLabel();\n DOM.setElementValuesCurrentAndPrevious(roundDisplayOrderLabel, latestRound[flagDisplayOrder]);\n \n this.renderPlayers();\n\n } catch (error) {\n console.error('Error loading game from server:', error);\n }\n }\n static getRoundDisplayOrderLabel() {\n return document.querySelector([\n '#gameSection'\n , ' > .'\n , flagRow\n , '.'\n , flagRound\n , ' > .'\n , flagRow\n , '.'\n , flagRound\n , ' > .'\n , flagRound\n , '.'\n , flagDisplayOrder\n , ' > span.'\n , flagRound\n , '.'\n , flagDisplayOrder\n ].join(''));\n }\n\n renderPlayers() {\n const grid = document.getElementById('playersGrid');\n grid.innerHTML = '';\n \n // let activeRoundId = PageMtgGame.getActiveRoundId();\n const roundDisplayOrderLabel = PageMtgGame.getRoundDisplayOrderLabel();\n const currentRoundDisplayOrder = parseInt(DOM.getElementValueCurrent(roundDisplayOrderLabel));\n let activeRound = rounds.filter(round => round[flagDisplayOrder] == currentRoundDisplayOrder)[0];\n if (activeRound == null) {\n activeRound = PageMtgGame.makeDefaultGameRound(currentRoundDisplayOrder);\n rounds.push(activeRound);\n }\n DOM.setElementValueCurrent(roundDisplayOrderLabel, activeRound[flagDisplayOrder]);\n \n const previousRoundIds = rounds.filter(round => round[flagDisplayOrder] <= currentRoundDisplayOrder)\n .map(round => round[attrRoundId]);\n players.forEach((player, index) => {\n // Build display name: prefer user_name + deck_name, fallback to player name\n const playerId = player[attrPlayerId];\n let displayName = PageMtgGame.makePlayerDisplayName(playerId, index);\n let damagePlayerPairs = [...players, { [attrPlayerId]: null }];\n let maxCommanderDamageReceived = 0;\n damagePlayerPairs.forEach(damagePlayerPair => {\n const sourceId = damagePlayerPair[attrPlayerId];\n const filteredPlayerDamages = damageRecords.filter(damage => (\n damage[attrRoundId] == activeRound[attrRoundId]\n // previousRoundIds.includes(damage[attrRoundId])\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n )); //[playerId] || {};\n if (filteredPlayerDamages.length == 0) {\n damageRecords.push(PageMtgGame.makeDefaultGameRoundPlayerDamage(playerId, sourceId));\n }\n maxCommanderDamageReceived = Math.max(\n maxCommanderDamageReceived\n , damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n && damage[attrReceivedFromCommanderPlayerId] != null\n && previousRoundIds.includes(damage[attrRoundId])\n ))\n .map(damage => damage[flagLifeLoss])\n .reduce((a, b) => a + b, 0)\n );\n });\n\n const totalDamage = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && previousRoundIds.includes(damage[attrRoundId])\n ))\n .map(damage => damage[flagLifeLoss] - damage[flagLifeGain])\n .reduce((a, b) => a + b, 0);\n let life = startingLife - totalDamage;\n\n let isEliminatedByForce = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && previousRoundIds.includes(damage[attrRoundId])\n ))\n .map(damage => damage[flagIsEliminated])\n .some(Boolean);\n console.log(\"renderPlayers\");\n console.log({isEliminatedByForce, player, life, maxCommanderDamageReceived});\n const isEliminated = (\n isEliminatedByForce\n || !player[flagActive]\n || life < 1\n || maxCommanderDamageReceived >= 21\n );\n\n const totalCommanderDeaths = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n && damage[attrRoundId] == activeRound[attrRoundId]\n ))\n .map(damage => damage[flagCommanderDeaths])\n .reduce((a, b) => a + b, 0);\n const card = document.createElement('div');\n card.className = `player-card ${isEliminated ? 'eliminated' : ''}`;\n card.style.animationDelay = `${index * 0.1}s`;\n card.dataset.playerId = playerId;\n card.dataset.userName = player.user_name || '';\n card.dataset.deckName = player.deck_name || '';\n\n card.innerHTML = `\n
\n
\n
${displayName}
\n
\n Commander Deaths:\n
\n \n ${totalCommanderDeaths}\n \n
\n
\n
\n \n
\n\n
\n \n
${life}
\n \n
\n \n \n \n \n
\n \n
\n \n \n \n \n
\n
\n\n
\n
Commander Damage Taken
\n
\n ${PageMtgGame.renderCommanderDamageRows(\n playerId // playerId\n , player[attrDeckId] // deckId\n )}\n
\n
\n `;\n\n grid.appendChild(card);\n });\n\n this.reorderPlayerCards();\n\n PageMtgGame.renderCommanderDamageLog();\n\n // Hookup all event handlers\n this.hookupGameRoundEvents();\n this.hookupPlayerCardEvents();\n }\n static renderCommanderDamageLog() {\n const currentRoundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder();\n\n const damageTableBody = document.querySelector('.' + flagDamageLog + '.' + flagContainer + ' table tbody');\n damageTableBody.innerHTML = '';\n \n const previousRoundIds = rounds.filter(round => round[flagDisplayOrder] <= currentRoundDisplayOrder)\n .map(round => round[attrRoundId]);\n let newTableBodyHtml = '';\n damageRecords.forEach((damage) => {\n if (\n damage[flagActive]\n && (\n damage[flagCommanderDeaths] > 0\n || damage[flagLifeGain] != 0\n || damage[flagLifeLoss] != 0\n || damage[flagIsEliminated]\n )\n // && rounds.filter(r => r[attrRoundId] == damage[attrRoundId])[0][flagDisplayOrder] <= currentRoundDisplayOrder\n && previousRoundIds.includes(damage[attrRoundId])\n ) {\n debugger;\n let round = rounds.filter(r => r[attrRoundId] == damage[attrRoundId])[0];\n let player = players.filter(p => p[attrPlayerId] == damage[attrPlayerId])[0];\n let receivedFromPlayer = (damage[attrReceivedFromCommanderPlayerId] == null) ? { [flagName]: ''} : players.filter(p => p[attrPlayerId] == damage[attrReceivedFromCommanderPlayerId])[0];\n newTableBodyHtml += `\n \n ${round[flagDisplayOrder]}\n ${player[flagName]}\n ${receivedFromPlayer[flagName]}\n ${damage[flagLifeGain]}\n ${damage[flagLifeLoss]}\n ${damage[flagCommanderDeaths]}\n ${damage[flagIsEliminated]}\n \n `;\n }\n });\n damageTableBody.innerHTML = newTableBodyHtml;\n }\n static makeDefaultGameRoundPlayerDamage(playerId, receivedFromCommanderPlayerId) {\n let roundId = PageMtgGame.getActiveRoundId();\n return {\n [attrDamageId]: -1 - damageRecords.length\n , [attrRoundId]: roundId\n , [attrPlayerId]: playerId\n , [attrReceivedFromCommanderPlayerId]: receivedFromCommanderPlayerId\n , [flagLifeGain]: 0\n , [flagLifeLoss]: 0\n , [flagCommanderDeaths]: 0\n , [flagIsEliminated]: false\n , [flagActive]: true\n };\n }\n static getLatestRoundId() {\n let roundId = -1;\n if (rounds.length > 0) {\n const highestRoundDisplayOrder = rounds.map(round => { return round[flagDisplayOrder]; })\n .reduce((acc, cur) => Math.max(acc, cur), 0);\n const filteredRounds = rounds.filter(round => round[flagDisplayOrder] == highestRoundDisplayOrder);\n if (filteredRounds.length > 0) {\n roundId = filteredRounds[0][attrRoundId];\n }\n console.log({ \"method\": \"getLatestRoundId\", highestRoundDisplayOrder, filteredRounds, roundId });\n }\n return roundId;\n }\n static getActiveRoundDisplayOrder() {\n const roundDisplayOrderLabel = PageMtgGame.getRoundDisplayOrderLabel();\n return parseInt(DOM.getElementValueCurrent(roundDisplayOrderLabel));\n }\n static getActiveRoundId() {\n const currentRoundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder();\n let roundId = 0;\n if (rounds.length > 0) {\n let filteredRounds = rounds.filter(round => round[flagDisplayOrder] == currentRoundDisplayOrder);\n if (filteredRounds.length > 0) roundId = filteredRounds[0][attrRoundId];\n console.log({ \"method\": \"getActiveRoundId\", filteredRounds, roundId });\n }\n return roundId;\n }\n static makePlayerDisplayName(playerId, index) {\n if (playerId == null) {\n return `Player ${index + 1}`;\n }\n const player = players.filter(player => player[attrPlayerId] == playerId)[0];\n const deckId = player[attrDeckId];\n const deck = (deckId == null) ? null : decks.filter(deck => deck[attrDeckId] == deckId)[0];\n const user = (playerId == null) ? null : users[player[attrUserId]];\n return player[flagName] || `${(user == null) ? 'Error' : user[flagName]} - ${(deck == null) ? 'Error' : deck[flagName]}`;\n }\n static renderCommanderDamageRows(playerId) {\n const activeRoundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder();\n const previousRoundIds = rounds.filter(round => round[flagDisplayOrder] <= activeRoundDisplayOrder)\n .map(round => round[attrRoundId]);\n return players\n .filter(otherPlayer => otherPlayer[attrPlayerId] !== playerId)\n .map(otherPlayer => {\n const sourceId = otherPlayer[attrPlayerId];\n let otherPlayerDisplayName = PageMtgGame.makePlayerDisplayName(sourceId);\n const totalDamage = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n // && damage[attrRoundId] == roundId\n && previousRoundIds.includes(damage[attrRoundId])\n ))\n .map(damage => damage[flagLifeLoss])\n .reduce((acc, curr) => acc + curr, 0);\n const isLethal = (totalDamage >= 21);\n\n return `\n
\n from ${otherPlayerDisplayName}\n
\n \n \n ${totalDamage}\n \n
\n
\n `;\n })\n .join('');\n }\n\n hookupGameRoundEvents() {\n let incrementRoundButtonSelector = '#gameSection .' + flagRow + '.' + flagRound + ' button.' + flagRoundDisplayOrderButton;\n Events.hookupEventHandler(\"click\", incrementRoundButtonSelector, (event, button) => {\n const amount = button.classList.contains(flagRoundDisplayOrderPlus) ? 1 : -1;\n const roundDisplayOrderButtonContainer = button.parentElement;\n const roundDisplayOrderLabel = roundDisplayOrderButtonContainer.querySelector('span.' + flagRound + '.' + flagDisplayOrder);\n const currentRoundDisplayOrder = parseInt(DOM.getElementValueCurrent(roundDisplayOrderLabel));\n const newDisplayOrder = currentRoundDisplayOrder + amount;\n DOM.setElementValueCurrent(roundDisplayOrderLabel, newDisplayOrder);\n DOM.isElementDirty(roundDisplayOrderLabel);\n this.updateAndToggleShowButtonsSaveCancel();\n this.renderPlayers();\n });\n }\n static makeDefaultGameRound(displayOrder) {\n const newDisplayOrder = (displayOrder != null) ? displayOrder : 1 + Math.max(rounds.map(round => round[flagDisplayOrder]));\n return {\n [attrRoundId]: -newDisplayOrder\n , [attrGameId]: gameId\n , [flagNotes]: null\n , [flagDisplayOrder]: newDisplayOrder\n , [flagActive]: true\n };\n }\n hookupPlayerCardEvents() {\n // Life gain buttons\n let lifeGainButtonSelector = '.life-gain-btn';\n Events.hookupEventHandler(\"click\", lifeGainButtonSelector, (event, button) => {\n debugger;\n const playerId = parseInt(button.dataset.playerId);\n const amount = parseInt(button.dataset.amount);\n const activeRoundId = PageMtgGame.getActiveRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == activeRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n this.changeLife(\n playerId // playerId\n , amount // amount\n , true // isLifeGainNotLoss\n , true // updateDamage\n , damageIndex // damageIndex\n );\n });\n\n // Life loss buttons\n let lifeLossButtonSelector = '.life-loss-btn';\n Events.hookupEventHandler(\"click\", lifeLossButtonSelector, (event, button) => {\n const playerId = parseInt(button.dataset.playerId);\n const amount = parseInt(button.dataset.amount);\n const activeRoundId = PageMtgGame.getActiveRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == activeRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n this.changeLife(\n playerId // playerId\n , amount // amount\n , false // isLifeGainNotLoss\n , true // updateDamage\n , damageIndex // damageIndex\n );\n });\n\n // Commander death buttons\n let commanderDeathButtonSelector = '.death-btn';\n Events.hookupEventHandler(\"click\", commanderDeathButtonSelector, (event, button) => {\n const playerId = parseInt(button.dataset.playerId);\n const isMinusButton = button.classList.contains('death-minus');\n const amount = (isMinusButton) ? -1 : 1;\n this.changeCommanderDeaths(playerId, amount);\n });\n\n // Commander damage buttons\n let commmanderDamageButtonSelector = '.damage-btn';\n Events.hookupEventHandler(\"click\", commmanderDamageButtonSelector, (event, button) => {\n const playerId = parseInt(button.dataset.playerId);\n const sourceId = parseInt(button.dataset.sourceId);\n const isMinusButton = button.classList.contains('damage-minus');\n const amount = (isMinusButton) ? -1 : 1;\n this.changeCommanderDamage(playerId, sourceId, amount);\n });\n\n // Eliminate buttons\n let eliminatePlayerButtonSelector = '.eliminate-btn';\n Events.hookupEventHandler(\"click\", eliminatePlayerButtonSelector, (event, button) => {\n const playerId = parseInt(button.dataset.playerId);\n this.toggleEliminate(playerId);\n });\n }\n\n changeLife(playerId, amount, isLifeGainNotLoss = false, updateDamage = false, damageIndex = null) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n // if (!card || card.classList.contains('eliminated')) return;\n\n const lifeInput = card.querySelector(`.life-value[data-player-id=\"${playerId}\"]`);\n const lifeDisplay = card.querySelector(`.life-display[data-player-id=\"${playerId}\"]`);\n\n const currentLife = parseInt(lifeInput.value) || 0;\n const newLife = currentLife + amount * ((isLifeGainNotLoss) ? 1 : -1);\n\n DOM.setElementAttributeValueCurrent(lifeDisplay, newLife);\n DOM.isElementDirty(lifeDisplay);\n lifeInput.value = newLife;\n lifeDisplay.textContent = newLife;\n\n if (updateDamage) {\n let fieldFlag = (isLifeGainNotLoss) ? flagLifeGain : flagLifeLoss;\n damageRecords[damageIndex][fieldFlag] += amount;\n }\n\n PageMtgGame.renderCommanderDamageLog();\n\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n\n changeCommanderDamage(playerId, sourceId, amount) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n // if (!card || card.classList.contains('eliminated')) return;\n\n const damageInput = card.querySelector(`.damage-value[data-player-id=\"${playerId}\"][data-source-id=\"${sourceId}\"]`);\n const damageDisplay = card.querySelector(`.damage-display[data-player-id=\"${playerId}\"][data-source-id=\"${sourceId}\"]`);\n\n const currentDamage = parseInt(damageInput.value) || 0;\n const newDamage = Math.max(0, currentDamage + amount);\n amount = newDamage - currentDamage;\n DOM.setElementAttributeValueCurrent(damageDisplay, newDamage);\n DOM.isElementDirty(damageDisplay);\n damageInput.value = newDamage;\n damageDisplay.textContent = newDamage;\n\n // Update lethal class\n if (newDamage >= 21) {\n damageDisplay.classList.add('lethal');\n } else {\n damageDisplay.classList.remove('lethal');\n }\n\n const activeRoundId = PageMtgGame.getActiveRoundId();\n const damageIndex = damageRecords.findIndex(damageRecord => (\n damageRecord[attrRoundId] == activeRoundId\n && damageRecord[attrPlayerId] == playerId\n && damageRecord[attrReceivedFromCommanderPlayerId] == sourceId\n ));\n damageRecords[damageIndex][flagLifeLoss] += amount;\n \n let isLifeGainNotLoss = false;\n this.changeLife(\n playerId // playerId\n , -amount // amount\n , isLifeGainNotLoss // isLifeGainNotLoss\n , false // updateDamage\n , damageIndex // damageIndex\n );\n // PageMtgGame.debouncedSave();\n }\n\n changeCommanderDeaths(playerId, amount) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n // if (!card || card.classList.contains('eliminated')) return;\n\n const deathDisplay = card.querySelector(`.death-display[data-player-id=\"${playerId}\"]`);\n const currentDeaths = parseInt(deathDisplay.textContent) || 0;\n const newDeaths = Math.max(0, currentDeaths + amount);\n\n deathDisplay.textContent = newDeaths;\n DOM.setElementAttributeValueCurrent(deathDisplay, newDeaths);\n DOM.isElementDirty(deathDisplay);\n\n const activeRoundId = PageMtgGame.getActiveRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == activeRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n damageRecords[damageIndex][flagCommanderDeaths] = newDeaths;\n\n PageMtgGame.renderCommanderDamageLog();\n\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n\n toggleEliminate(playerId) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n if (!card) return;\n\n const eliminateBtn = card.querySelector(`.eliminate-btn[data-player-id=\"${playerId}\"]`);\n const wasEliminated = card.classList.contains('eliminated');\n\n if (wasEliminated) {\n card.classList.remove('eliminated');\n eliminateBtn.textContent = 'Eliminate';\n } else {\n card.classList.add('eliminated');\n eliminateBtn.textContent = 'Revive';\n }\n const isEliminated = card.classList.contains('eliminated');\n\n const activeRoundId = PageMtgGame.getActiveRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == activeRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n damageRecords[damageIndex][flagIsEliminated] = isEliminated;\n\n DOM.setElementAttributeValueCurrent(eliminateBtn, isEliminated);\n DOM.isElementDirty(eliminateBtn);\n\n this.reorderPlayerCards();\n PageMtgGame.renderCommanderDamageLog();\n\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n reorderPlayerCards() {\n let playerGrid = document.getElementById('playersGrid');\n let currentPlayerCards = playerGrid.querySelectorAll('.player-card');\n let newPlayerCards = [];\n let playerCardMetas = [];\n currentPlayerCards.forEach((playerCard, index) => {\n newPlayerCards.push(playerCard.cloneNode(true));\n playerCardMetas.push({\n [flagIsEliminated]: playerCard.classList.contains(flagIsEliminated)\n , [attrPlayerId]: playerCard.dataset[\"playerId\"]\n , [flagDisplayOrder]: index\n });\n });\n let activeRoundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder();\n let newPlayerGridInnerHTML = '';\n let playerIdA, playerIdB, isEliminatedAsIntA, isEliminatedAsIntB, playerA, playerB, indexPlayerCard;\n playerCardMetas.sort((a, b) => {\n playerIdA = a[attrPlayerId];\n playerIdB = b[attrPlayerId];\n isEliminatedAsIntA = PageMtgGame.isPlayerEliminated(playerIdA, activeRoundDisplayOrder) ? 1 : 0;\n isEliminatedAsIntB = PageMtgGame.isPlayerEliminated(playerIdB, activeRoundDisplayOrder) ? 1 : 0;\n playerA = players.filter(p => p[attrPlayerId] == playerIdA)[0];\n playerB = players.filter(p => p[attrPlayerId] == playerIdB)[0];\n return (\n players.length * isEliminatedAsIntA\n + playerA[flagDisplayOrder]\n ) - (\n players.length * isEliminatedAsIntB\n + playerB[flagDisplayOrder]\n );\n }).forEach((playerCardMeta) => {\n indexPlayerCard = playerCardMeta[flagDisplayOrder];\n newPlayerGridInnerHTML += newPlayerCards[indexPlayerCard].outerHTML;\n });\n\n playerGrid.innerHTML = newPlayerGridInnerHTML;\n\n playerGrid.querySelectorAll('.' + flagInitialised).forEach((initialisedElement) => {\n initialisedElement.classList.remove(flagInitialised);\n });\n\n this.hookupPlayerCardEvents();\n }\n static isPlayerEliminated(playerId, roundDisplayOrder = null) {\n if (roundDisplayOrder == null) roundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder();\n const filteredRoundIds = rounds.filter(round => round[flagDisplayOrder] <= roundDisplayOrder)\n .map(round => round[attrRoundId]);\n let hasDamageWithIsEliminated = damageRecords.filter(damage => (\n // damage[attrRoundId] <= roundDisplayOrder\n filteredRoundIds.includes(damage[attrRoundId])\n && damage[attrPlayerId] == playerId\n && damage[flagIsEliminated]\n )).length > 0;\n let damageFromOtherPlayers = {};\n let otherPlayerId;\n damageRecords.filter(damage => (\n // damage[attrRoundId] <= roundId\n filteredRoundIds.includes(damage[attrRoundId])\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] != null\n ))\n .forEach((damage) => {\n otherPlayerId = damage[attrReceivedFromCommanderPlayerId];\n damageFromOtherPlayers[otherPlayerId] = \n damage[flagLifeLoss]\n + ((damageFromOtherPlayers[otherPlayerId] == null) ? 0 : damageFromOtherPlayers[otherPlayerId]);\n });\n let maxDamageFromOtherCommander = Object.keys(damageFromOtherPlayers)\n .map((playerId) => damageFromOtherPlayers[playerId])\n .reduce((acc, cur) => Math.max(acc, cur), 0);\n let totalDamageTaken = damageRecords.filter(damage => (\n // damage[attrRoundId] <= roundId\n filteredRoundIds.includes(damage[attrRoundId])\n && damage[attrPlayerId] == playerId\n ))\n .map((damage) => damage[flagLifeLoss] - damage[flagLifeGain])\n .reduce((a, b) => a + b, 0);\n console.log({ roundDisplayOrder, filteredRoundIds, hasDamageWithIsEliminated, maxDamageFromOtherCommander, totalDamageTaken });\n return (\n hasDamageWithIsEliminated\n || maxDamageFromOtherCommander >= 21\n || totalDamageTaken >= startingLife\n );\n }\n\n static updatePlayerSetup() {\n const playerCountInput = document.getElementById('playerCount');\n if (!playerCountInput) return;\n\n const playerCount = parseInt(playerCountInput.value);\n const grid = document.getElementById('playerSetupGrid');\n if (!grid) return;\n\n grid.innerHTML = '';\n const wrapperTemplate = document.getElementById(playerSetupWrapperTemplateId);\n let player, wrapper, wrapperHeading, userDdl, deckDdl, nameInput;\n for (let i = 0; i < playerCount; i++) {\n if (i < players.length) {\n player = players[i];\n }\n else {\n player = PageMtgGame.makeDefaultGamePlayer();\n players.push(player);\n }\n wrapper = wrapperTemplate.cloneNode(true);\n wrapper.removeAttribute(\"id\");\n wrapper.setAttribute(flagDisplayOrder, i + 1);\n wrapper.classList.remove(flagIsCollapsed);\n wrapperHeading = wrapper.querySelector('label');\n wrapperHeading.innerText = 'Player ' + (i + 1);\n userDdl = wrapper.querySelector('.playerUser select');\n DOM.setElementValuesCurrentAndPrevious(userDdl, player[attrUserId]);\n deckDdl = wrapper.querySelector('.playerDeck select');\n DOM.setElementValuesCurrentAndPrevious(deckDdl, player[attrDeckId]);\n nameInput = wrapper.querySelector('.playerName input');\n DOM.setElementValuesCurrentAndPrevious(nameInput, player[flagName]);\n console.log('player: ', player);\n grid.appendChild(wrapper);\n }\n }\n static makeDefaultGamePlayer() {\n return {\n [attrPlayerId]: -players.length\n , [attrGameId]: gameId\n , [attrUserId]: user[attrUserId]\n , [attrDeckId]: 0\n , [flagName]: \"\"\n , [flagNotes]: null\n , [flagDisplayOrder]: players.length\n , [flagActive]: true\n };\n }\n\n async startGame() {\n const playerCountInput = document.getElementById('playerCount');\n if (!playerCountInput) return;\n\n const playerCount = parseInt(playerCountInput.value);\n const playersToSave = [];\n\n let playerSetupWrapper, playerId, player, userDdl, userId, deckDdl, deckId, nameInput, name;\n for (let i = 0; i < playerCount; i++) {\n playerSetupWrapper = document.querySelector('.player-name-input-wrapper[' + flagDisplayOrder + '=\"' + (i + 1) + '\"]');\n userDdl = playerSetupWrapper.querySelector('.playerUser select');\n deckDdl = playerSetupWrapper.querySelector('.playerDeck select');\n nameInput = playerSetupWrapper.querySelector('.playerName input');\n \n userId = DOM.getElementValueCurrent(userDdl);\n deckId = DOM.getElementValueCurrent(deckDdl);\n name = nameInput ? nameInput.value.trim() || null : null; // `Player ${i + 1}` : `Player ${i + 1}`;\n\n playerId = playerSetupWrapper.getAttribute(attrPlayerId);\n player = players.filter(p => p[attrPlayerId] == playerId)[0];\n playersToSave.push({\n ...player\n , [attrGameId]: gameId\n , [attrUserId]: userId\n , [attrDeckId]: deckId\n , [flagName]: name\n , [flagDisplayOrder]: i + 1\n , [flagActive]: true\n });\n }\n\n // Save players to server\n const comment = 'Save players';\n const self = this;\n API.saveGamePlayers(playersToSave, null, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n self.leave();\n window.location.reload();\n }\n else {\n console.error('Failed to save players:', data[flagMessage]);\n PageMtgGame.showError('An error occurred while creating the game');\n }\n })\n .catch(error => {\n console.error('Error creating game:', error);\n PageMtgGame.showError('An error occurred while creating the game');\n })\n .finally(() => {\n });\n }\n\n static resetGame() {\n if (confirm('Are you sure you want to start a new game? Current game will be lost.')) {\n localStorage.removeItem(`mtgGame_${gameId}`);\n window.location.href = hashPageGames;\n }\n }\n\n async saveGame() {\n /*\n const gameState = {\n [flagPlayer]: players\n , [flagRound]: rounds\n , [flagDamage]: damageRecords\n };\n if (gameState[flagPlayer].length > 0) {\n localStorage.setItem(`mtgGame_${gameId}`, JSON.stringify(gameState));\n PageMtgGame.showSaveIndicator();\n }\n */\n const comment = 'Save player damage';\n const self = this;\n API.saveGameRoundPlayerDamages(rounds, damageRecords, null, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n self.leave();\n window.location.reload();\n }\n else {\n console.error('Failed to save player damages:', data[flagMessage]);\n PageMtgGame.showError('An error occurred while saving player damages');\n }\n })\n .catch(error => {\n console.error('Error saving player damages:', error);\n PageMtgGame.showError('An error occurred while saving player damages');\n })\n .finally(() => {\n });\n }\n /*\n static debouncedSave() {\n clearTimeout(PageMtgGame._saveTimeout);\n PageMtgGame._saveTimeout = setTimeout(() => PageMtgGame.saveGame(), 500);\n }\n\n static showSaveIndicator() {\n const indicator = document.getElementById('saveIndicator');\n if (indicator) {\n indicator.classList.add('show');\n setTimeout(() => {\n indicator.classList.remove('show');\n }, 2000);\n }\n }\n */\n saveRecordsTableDirty() {\n this.saveGame();\n }\n static showError(message) {\n // Check if there's an overlay error element\n const errorOverlay = document.getElementById('overlayError');\n if (errorOverlay) {\n const errorLabel = errorOverlay.querySelector('.error-message, #labelError');\n if (errorLabel) {\n errorLabel.textContent = message;\n }\n errorOverlay.classList.remove('hidden');\n errorOverlay.style.display = 'flex';\n } else {\n // Fallback to alert\n alert(message);\n }\n }\n\n leave() {\n super.leave();\n }\n}\n\n// Static timeout reference for debouncing\nPageMtgGame._saveTimeout = null;\n","\nimport API from \"../../api.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\n\nexport default class PageMtgGames extends TableBasePage {\n static hash = hashPageMtgGames;\n static attrIdRowObject = attrGameId;\n callSaveTableContent = API.saveGame;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n hookupFilters() {\n /*\n this.sharedHookupFilters();\n this.hookupFilterActive();\n */\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n return;\n }\n initialiseRowNew(tbody, row) {\n }\n postInitialiseRowNewCallback(tbody) {\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n // this.hookupTableMainRows();\n this.hookupTcgGames();\n // PageMtgGames.hideNewGameForm();\n }\n hookupTcgGames() {\n console.log(\"hookupTableMain PageMtgGames\");\n // Initialize form submission\n const newGameForm = document.getElementById('newGameForm');\n if (newGameForm) {\n newGameForm.addEventListener('submit', this.handleNewGameSubmit.bind(this)); // () => { this.handleNewGameSubmit.bind(this); });\n }\n\n // Initialize filter form\n const filterForm = document.getElementById('formFilters');\n if (filterForm) {\n filterForm.addEventListener('submit', PageMtgGames.handleFilterSubmit);\n }\n\n // Close modal on escape key\n document.addEventListener('keydown', function(e) {\n if (e.key === 'Escape') {\n PageMtgGames.hideNewGameForm();\n }\n });\n\n // Close modal on backdrop click\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.addEventListener('click', function(e) {\n if (e.target === modal) {\n PageMtgGames.hideNewGameForm();\n }\n });\n }\n\n // Button onclicks\n const newGameButton = document.getElementById('btnNewGame');\n if (newGameButton) {\n newGameButton.addEventListener('click', PageMtgGames.showNewGameForm);\n }\n const cancelNewGameButtons = document.querySelectorAll(\n '#newGameForm .form-actions .btn-tcg.btn-tcg-secondary'\n + ','\n + '#newGameModal .modal-content .modal-header .modal-close'\n );\n if (cancelNewGameButtons.length > 0) {\n cancelNewGameButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGames.hideNewGameForm);\n });\n }\n\n }\n static showNewGameForm() {\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.classList.remove(flagIsCollapsed);\n document.body.style.overflow = 'hidden';\n\n // Focus on first input\n const firstInput = modal.querySelector('input, select');\n if (firstInput) {\n firstInput.focus();\n }\n }\n }\n static hideNewGameForm() {\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.classList.add(flagIsCollapsed);\n document.body.style.overflow = '';\n\n // Reset form\n const form = document.getElementById('newGameForm');\n if (form) {\n form.reset();\n }\n }\n }\n async handleNewGameSubmit(e) {\n e.preventDefault();\n\n const form = e.target;\n const formData = new FormData(form);\n\n const gameType = formData.get('game_type');\n const gameData = {\n [attrGameId]: -1\n , [flagIsCommander]: gameType === 'commander'\n , [flagIsDraft]: gameType === 'draft'\n , [flagIsSealed]: gameType === 'sealed'\n , [flagLocationName]: formData.get(flagLocationName) || null\n , [flagNotes]: formData.get(flagNotes) || null\n , [flagStartOn]: new Date().toISOString()\n , [flagStartingLife]: formData.get(flagStartingLife) || 40\n , [flagActive]: true\n };\n\n const submitBtn = form.querySelector('button[type=\"submit\"]');\n const originalText = submitBtn.textContent;\n submitBtn.textContent = 'Creating...';\n submitBtn.disabled = true;\n\n const games = [gameData];\n const comment = 'Create new game';\n API.saveGame(games, form, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n const gamePageHash = `${hashPageGame}/${data[attrGameId]}`;\n let filtersJson = {};\n this.leave();\n API.goToHash(gamePageHash, filtersJson);\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \" + data[flagMessage]);\n // OverlayError.show(data[flagMessage]);\n window.location.reload();\n }\n })\n .catch(error => {\n console.error('Error creating game:', error);\n PageMtgGames.showError('An error occurred while creating the game');\n })\n .finally(() => {\n submitBtn.textContent = originalText;\n submitBtn.disabled = false;\n });\n \n }\n static handleFilterSubmit(e) {\n // Let the form submit normally - it will reload with query params\n // You can add client-side filtering here if needed\n }\n static getCSRFToken() {\n // Try meta tag first\n const metaTag = document.querySelector('meta[name=\"csrf-token\"]');\n if (metaTag) {\n return metaTag.getAttribute('content');\n }\n\n // Try hidden input\n const hiddenInput = document.querySelector('input[name=\"csrf_token\"]');\n if (hiddenInput) {\n return hiddenInput.value;\n }\n\n // Try cookie\n const cookies = document.cookie.split(';');\n for (let cookie of cookies) {\n const [name, value] = cookie.trim().split('=');\n if (name === 'csrf_token') {\n return value;\n }\n }\n\n return '';\n }\n static showError(message) {\n // Check if there's an overlay error element\n const errorOverlay = document.getElementById('overlayError');\n if (errorOverlay) {\n const errorLabel = errorOverlay.querySelector('.error-message, #labelError');\n if (errorLabel) {\n errorLabel.textContent = message;\n }\n errorOverlay.classList.remove(flagIsCollapsed);\n errorOverlay.style.display = 'flex';\n } else {\n // Fallback to alert\n alert(message);\n }\n }\n static showSuccess(message) {\n // Could implement a toast notification here\n console.log('Success:', message);\n }\n static joinGame(gameId) {\n window.location.href = `${hashPageGame}/${gameId}`;\n }\n static async deleteGame(gameId) {\n if (!confirm('Are you sure you want to delete this game? This action cannot be undone.')) {\n return;\n }\n\n try {\n const gameData = {\n 'game_id': gameId,\n 'active': false\n };\n\n const response = await fetch(hashSaveGame, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRFToken': PageMtgGames.getCSRFToken()\n },\n body: JSON.stringify({\n [flagGame]: [gameData],\n 'form-filters': {},\n 'comment': 'Game deleted'\n })\n });\n\n const result = await response.json();\n\n if (result.status === 'success') {\n // Remove the row from the table\n const row = document.querySelector(`tr[data-game-id=\"${gameId}\"]`);\n if (row) {\n row.style.animation = 'tcg-fadeOut 0.3s ease-out forwards';\n setTimeout(() => row.remove(), 300);\n }\n } else {\n PageMtgGames.showError(result.message || 'Failed to delete game');\n }\n } catch (error) {\n console.error('Error deleting game:', error);\n PageMtgGames.showError('An error occurred while deleting the game');\n }\n }\n\n toggleShowButtonsSaveCancel() {}\n leave() {\n super.leave();\n }\n}\n","\n\nimport API from \"../../api.js\";\nimport BasePage from \"../base.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\n\nexport default class PageMtgHome extends BasePage {\n static hash = hashPageMtgHome;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTcgHome();\n }\n\n hookupTcgHome() {\n }\n\n leave() {\n super.leave();\n }\n}\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityReport extends BasePage {\n static hash = hashPageAccessibilityReport;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityStatement extends BasePage {\n static hash = hashPageAccessibilityStatement;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport BasePage from \"../base.js\";\n\nexport default class PageLicense extends BasePage {\n static hash = hashPageLicense;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","\nimport BasePage from \"../base.js\";\n\nexport default class PagePrivacyPolicy extends BasePage {\n static hash = hashPagePrivacyPolicy;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","import BasePage from \"../base.js\";\n\nexport default class PageRetentionSchedule extends BasePage {\n static hash = hashPageDataRetentionSchedule;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\n\nexport default class MixinPage {\n constructor(pageCurrent) {\n this.page = pageCurrent;\n }\n\n initialize() {\n Utils.consoleLogIfNotProductionEnvironment('hookup start for ', this.page.hash);\n this.hookupFilters();\n this.hookupLocalStorage();\n }\n hookupFilters() {\n }\n hookupLocalStorage() {\n \n }\n \n leave() {}\n}\n","\nimport MixinPage from \"./mixin.js\";\n\nexport default class TableMixinPage extends MixinPage {\n constructor(pageCurrent) {\n super(pageCurrent);\n }\n initialize() {\n super.initialize();\n this.hookupFilters();\n this.hookupTable();\n }\n hookupFilters() {\n // Implement filter-specific functionality here\n }\n hookupTable() {\n // Implement table-specific functionality here\n }\n}","\nimport API from \"../../api.js\";\nimport TableMixinPage from \"../mixin_table.js\";\nimport DOM from \"../../dom.js\";\nimport TableBasePage from \"../base_table.js\";\n\nexport default class PageUser extends TableBasePage {\n static hash = hashPageUserAccount;\n static attrIdRowObject = attrUserId;\n callSaveTableContent = API.saveUsers;\n\n constructor(router) {\n super(router);\n this.mixin = new TableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTableMain();\n }\n\n\n hookupFilters() {\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getTableRecords(dirtyOnly = false) {\n dirtyOnly = true;\n let container = document.querySelector('.' + flagCard + '.' + flagUser);\n return [this.getJsonRow(container)];\n }\n getJsonRow(container) {\n console.log(\"getJsonRow: \", container);\n if (container == null) return;\n let inputFirstname = container.querySelector(' #' + flagFirstname);\n let inputSurname = container.querySelector(' #' + flagSurname);\n let inputEmail = container.querySelector(' #' + flagEmail);\n\n let idUser = container.getAttribute(attrUserId);\n \n let jsonRow = {\n [attrUserAuth0Id]: null\n , [flagEmail]: null\n , [flagIsEmailVerified]: null\n , [flagIsSuperUser]: null\n , [flagCanAdminUser]: null\n };\n\n jsonRow[attrUserId] = idUser;\n jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);\n jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);\n jsonRow[flagEmail] = DOM.getElementAttributeValueCurrent(inputEmail);\n return jsonRow;\n }\n \n initialiseRowNew(tbody, row) {\n }\n postInitialiseRowNewCallback(tbody) {\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsFirstname();\n this.hookupFieldsSurname();\n this.hookupFieldsEmail();\n }\n hookupFieldsFirstname() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagFirstname);\n }\n hookupFieldsSurname() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagSurname);\n }\n hookupFieldsEmail() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagEmail);\n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport API from \"../../api\";\nimport TableMixinPage from \"../mixin_table\";\nimport DOM from \"../../dom\";\nimport TableBasePage from \"../base_table\";\nimport Utils from \"../../lib/utils\";\n\nexport default class PageUsers extends TableBasePage {\n static hash = hashPageUserAccounts;\n static attrIdRowObject = attrUserId;\n callSaveTableContent = API.saveUsers;\n\n constructor(router) {\n super(router);\n this.mixin = new TableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n hookupFilters() {\n this.sharedHookupFilters();\n this.hookupFilterActive();\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n if (row == null) return;\n let inputFirstname = row.querySelector('td.' + flagFirstname + ' .' + flagFirstname);\n let inputSurname = row.querySelector('td.' + flagSurname + ' .' + flagSurname);\n let inputNotes = row.querySelector('td.' + flagNotes + ' .' + flagNotes);\n let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);\n\n let jsonRow = {\n [attrUserAuth0Id]: null\n , [flagEmail]: null\n , [flagIsEmailVerified]: null\n , [flagIsSuperUser]: null\n , [flagCanAdminUser]: null\n };\n jsonRow[attrUserId] = row.getAttribute(attrUserId);\n jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);\n jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);\n jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);\n jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);\n\n console.log(\"jsonRow\");\n console.log(jsonRow);\n\n return jsonRow;\n }\n \n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n let newestRow = newRows[0];\n let clickableElementsSelector = [].join('');\n newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {\n clickableElement.click();\n });\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsFirstname();\n this.hookupFieldsSurname();\n this.hookupFieldsNotesTable();\n this.hookupFieldsActive();\n }\n hookupFieldsFirstname() {\n this.hookupChangeHandlerTableCells(flagFirstname);\n }\n hookupFieldsSurname() {\n this.hookupChangeHandlerTableCells(flagSurname);\n }\n\n leave() {\n super.leave();\n }\n}\n","\n// Pages\n// Core\n// TCG\nimport PageMtgDecks from './pages/tcg/mtg_decks.js';\nimport PageMtgGame from './pages/tcg/mtg_game.js';\nimport PageMtgGames from './pages/tcg/mtg_games.js';\nimport PageMtgHome from './pages/tcg/mtg_home.js';\n// Legal\nimport PageAccessibilityReport from './pages/legal/accessibility_report.js';\nimport PageAccessibilityStatement from './pages/legal/accessibility_statement.js';\nimport PageLicense from './pages/legal/license.js';\nimport PagePrivacyPolicy from './pages/legal/privacy_policy.js';\nimport PageRetentionSchedule from './pages/legal/retention_schedule.js';\n// User\n// import PageUserLogin from './pages/user/login.js';\n// import PageUserLogout from './pages/user/logout.js';\nimport PageUser from './pages/user/user.js';\nimport PageUsers from './pages/user/users.js';\n\nimport API from './api.js';\nimport DOM from './dom.js';\nimport Utils from './lib/utils.js';\n\n\nexport default class Router {\n constructor() {\n // Pages\n this.pages = {};\n // Core\n // TCG\n this.pages[hashPageMtgDecks] = { name: 'PageMtgDecks', module: PageMtgDecks };\n this.pages[hashPageMtgGame] = { name: 'PageMtgGame', module: PageMtgGame };\n this.pages[hashPageMtgGames] = { name: 'PageMtgGames', module: PageMtgGames };\n this.pages[hashPageMtgHome] = { name: 'PageMtgGame', module: PageMtgHome };\n // Legal\n this.pages[hashPageAccessibilityStatement] = { name: 'PageAccessibilityStatement', module: PageAccessibilityStatement };\n this.pages[hashPageDataRetentionSchedule] = { name: 'PageDataRetentionSchedule', module: PageRetentionSchedule };\n this.pages[hashPageLicense] = { name: 'PageLicense', module: PageLicense };\n this.pages[hashPagePrivacyPolicy] = { name: 'PagePrivacyPolicy', module: PagePrivacyPolicy };\n // User\n // this.pages[hashPageUserLogin] = { name: 'PageUserLogin', module: PageUserLogin }; // pathModule: './pages/user/login.js' };\n // this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };\n this.pages[hashPageUserAccount] = { name: 'PageUser', module: PageUser };\n this.pages[hashPageUserAccounts] = { name: 'PageUsers', module: PageUsers };\n // Routes\n this.routes = {};\n // Core\n // TCG\n this.routes[hashPageMtgDecks] = (isPopState = false) => this.navigateToHash(hashPageMtgDecks, isPopState);\n this.routes[hashPageMtgGame] = (isPopState = false) => this.navigateToHash(hashPageMtgGame, isPopState);\n this.routes[hashPageMtgGames] = (isPopState = false) => this.navigateToHash(hashPageMtgGames, isPopState);\n this.routes[hashPageMtgHome] = (isPopState = false) => this.navigateToHash(hashPageMtgHome, isPopState);\n // Legal\n this.routes[hashPageAccessibilityStatement] = (isPopState = false) => this.navigateToHash(hashPageAccessibilityStatement, isPopState);\n this.routes[hashPageDataRetentionSchedule] = (isPopState = false) => this.navigateToHash(hashPageDataRetentionSchedule, isPopState);\n this.routes[hashPageLicense] = (isPopState = false) => this.navigateToHash(hashPageLicense, isPopState);\n this.routes[hashPagePrivacyPolicy] = (isPopState = false) => this.navigateToHash(hashPagePrivacyPolicy, isPopState);\n // User\n // this.routes[hashPageUserLogin] = (isPopState = false) => this.navigateToHash(hashPageUserLogin, isPopState);\n // this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);\n this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);\n this.routes[hashPageUserAccounts] = (isPopState = false) => this.navigateToHash(hashPageUserAccounts, isPopState);\n this.initialize();\n }\n loadPage(hashPage, isPopState = false) {\n const PageClass = this.getClassPageFromHash(hashPage);\n this.currentPage = new PageClass(this);\n this.currentPage.initialize(isPopState);\n window.addEventListener('beforeunload', () => this.currentPage.leave());\n }\n getClassPageFromHash(hashPage) {\n \n let pageJson = this.pages[hashPage];\n try {\n const module = pageJson.module;\n return module; \n }\n catch (error) {\n Utils.consoleLogIfNotProductionEnvironment(\"this.pages: \", this.pages);\n console.error('Page not found:', hashPage);\n throw error;\n }\n }\n initialize() {\n window.addEventListener('popstate', this.handlePopState.bind(this));\n }\n handlePopState(event) {\n this.loadPageCurrent();\n }\n loadPageCurrent() {\n const hashPageCurrent = DOM.getHashPageCurrent();\n this.loadPage(hashPageCurrent);\n }\n navigateToHash(hash, data = null, params = null, isPopState = false) {\n let url = API.getUrlFromHash(hash, params);\n history.pushState({data: data, params: params}, '', hash);\n API.goToUrl(url, data);\n }\n \n navigateToUrl(url, data = null, appendHistory = true) {\n // this.beforeLeave();\n if (appendHistory) history.pushState(data, '', url);\n url = API.parameteriseUrl(url, data);\n API.goToUrl(url);\n }\n\n static loadPageBodyFromResponse(response) {\n DOM.loadPageBody(response.data);\n }\n}\n\nexport const router = new Router();\n","\n'use strict';\n\nimport DOM from './dom.js';\nimport Router from './router.js';\n\n\nclass App {\n constructor() {\n this.dom = new DOM();\n this.router = new Router();\n }\n\n initialize() {\n this.setupEventListeners();\n this.start();\n }\n\n setupEventListeners() {\n // document.addEventListener('click', this.handleGlobalClick.bind(this));\n }\n\n handleGlobalClick(event) {\n }\n\n start() {\n this.initPageCurrent();\n }\n\n initPageCurrent() {\n this.router.loadPageCurrent();\n }\n \n}\n\nconst app = new App();\n\nfunction domReady(fn) {\n if (document.readyState !== 'loading') {\n fn();\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n}\n\ndomReady(() => {\n app.initialize();\n});\n\nwindow.app = app;\n\nexport default app;","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":["Validation","isEmpty","object","undefined","length","isString","trim","i","isValidNumber","value","positiveOnly","isNaN","parseFloat","getDataContentType","params","data","contentType","JSON","stringify","Data","ContentType","arrayContainsItem","array","itemValue","hasItem","isJQueryElementArray","jQuery","document","querySelectorAll","is","isDate","Date","getTime","dictHasKey","d","k","areEqualDicts","dict1","dict2","keys1","Object","keys","keys2","key","imageExists","url","callback","img","Image","onload","onerror","src","toFixedOrDefault","decimalPlaces","defaultValue","toFixed","Utils","DOM","setElementAttributesValuesCurrentAndPrevious","element","setElementAttributeValueCurrent","setElementAttributeValuePrevious","setAttribute","attrValueCurrent","attrValuePrevious","setElementValuesCurrentAndPrevious","setElementValueCurrent","tagName","toUpperCase","type","checked","textContent","setElementValueCurrentIfEmpty","getElementValueCurrent","getCellFromElement","closest","getRowFromElement","flagRow","selector","getClosestParent","parentSelector","parent","parentElement","matches","convertForm2JSON","elementForm","dataForm","containersFilter","flagContainerInput","flagFilter","containerFilter","labelFilter","keyFilter","filter","indexFilter","querySelector","getAttribute","loadPageBody","contentNew","pageBody","idPageBody","innerHTML","getHashPageCurrent","hashPageCurrent","body","dataset","page","updateAndCheckIsElementDirty","isElementDirty","isDirty","handleDirtyElement","toggleElementHasClassnameFlag","flagDirty","elementHasFlag","flag","elementAlreadyHasFlag","classList","contains","add","remove","hasDirtyChildrenContainer","container","hasDirtyChildrenNotDeletedContainer","flagDelete","returnVal","flagButton","flagActive","getElementAttributeValueCurrent","flagCheckbox","flagIsChecked","getElementAttributeValuePrevious","scrollToElement","scrollTop","offset","top","isElementInContainer","containerBounds","getBoundingClientRect","elementBounds","left","height","width","alertError","errorType","errorText","alert","createOptionUnselectedProductVariation","flagProductVariationType","flagNameAttrOptionText","flagName","flagNameAttrOptionValue","attrIdProductVariationType","flagProductVariation","attrIdProductVariation","createOption","optionJson","text","option","createElement","selected","escapeHtml","div","unescapeHtml","html","innerText","API","getCsrfToken","idCSRFToken","request","hashEndpoint","method","getUrlFromHash","csrfToken","options","headers","flagCsrfToken","response","fetch","ok","Error","status","json","error","console","hash","hashPageHome","parameteriseUrl","_pathHost","URLSearchParams","toString","goToUrl","window","location","href","goToHash","loginUser","flagCallback","hashPageUserLogin","saveUsers","users","formFilters","comment","dataRequest","flagFormFilters","flagUser","flagComment","hashSaveUserUser","saveGame","game","flagGame","hashSaveGame","getGamePlayers","gameId","saveGamePlayers","players","flagPlayer","hashSaveGamePlayer","getGameRounds","getGameDamageRecords","saveGameRoundPlayerDamages","rounds","damages","flagDamage","flagRound","hashSaveGameRoundPlayerDamage","BusinessObjects","getOptionJsonFromObjectJsonAndKeys","objectJson","keyText","keyValue","valueSelected","getOptionJsonFromObjectJson","getObjectText","getListObjectsFromIdDictAndCsv","idDict","idCsv","listObjects","ids","split","id","push","Events","initialiseEventHandler","selectorElement","classInitialised","eventHandler","forEach","hookupEventHandler","eventType","flagInitialised","addEventListener","event","stopPropagation","LocalStorage","getLocalStorage","parse","localStorage","getItem","setLocalStorage","newLS","setItem","getListFromDict","dict","list","consoleLogIfNotProductionEnvironment","message","environment","is_production","log","OverlayConfirm","hookup","callbackSuccess","idOverlayConfirm","flagCancel","buttonCancel","overlay","style","visibility","flagSubmit","buttonConfirm","textarea","show","flagIsCollapsed","OverlayError","BasePage","constructor","router","title","titlePageCurrent","name","initialize","sharedInitialize","logInitialisation","hookupCommonElements","hookupLogos","hookupNavigation","hookupOverlays","flagImageLogo","flagLogo","navigateToHash","idButtonHamburger","overlayHamburger","idOverlayHamburger","flagExpanded","hookupButtonsNavUserAccount","hookupButtonsNavUserLogout","hookupButtonsNavUserLogin","hookupButtonsNav","buttonSelector","button","pageHash","flagNavUserLogin","navigator","preventDefault","leave","then","Success","Message","hookupOverlayFromId","idOverlayError","idOverlay","display","hookupButtonSave","flagContainer","flagSave","target","setLocalStoragePage","dataPage","getLocalStoragePage","toggleShowButtonsSaveCancel","buttonContainerSelector","buttonSave","idButtonSave","idButtonCancel","isDirtyFilter","idTableMain","msgError","labelError","idLabelError","TableBasePage","cursorYInitial","rowInitial","placeholder","dragSrcEl","dragSrcRow","hookupTableCellDdls","bind","isPopState","isSinglePageApp","hookupFilters","hookupButtonsSaveCancel","hookupTableMain","saveRecordsTableDirtySinglePageApp","saveRecordsTableDirty","filters","getFormFilters","filtersDefault","callFilterTableContent","sharedHookupFilters","hookupButtonApplyFilters","hookupSearchTextFilter","hookupFilterActive","filterSelector","idFormFilters","flagActiveOnly","filterActiveOld","removeAttribute","parentDiv","isChecked","filterActiveNew","filterActive","svgElement","wasChecked","handleChangeFilter","filterValuePrevious","hookupFilter","filterFlag","handler","areDirtyFilters","tbody","rows","row","dirtyInputs","dirtyInput","isDirtyLabel","initialisedElements","initialisedElement","updateAndToggleShowButtonsSaveCancel","hookupFilterIsNotEmpty","flagIsNotEmpty","idButtonApplyFilters","flagSearch","hookupFilterCommandCategory","attrIdCommandCategory","filterCommandCategory","idCommandCategory","filterCommands","commandsInCategory","command","sortedCommands","sort","a","b","localeCompare","filterCommand","flagCommand","idCommandPrevious","appendChild","dispatchEvent","Event","hookupFilterCommand","attrIdCommand","hookupFilterLocation","attrIdLocation","filtersJson","callbackLoadTableContent","table","getTableMain","bodyTable","rowsJson","flagRows","every","hasOwnProperty","display_order","loadRowTable","rowJson","getAndLoadFilteredTableContentSinglePageApp","catch","hookupButtonCancel","records","getTableRecords","formElement","idTextareaConfirm","callSaveTableContent","flagStatus","flagSuccess","_verbose","flagMessage","dirtyOnly","record","getJsonRow","handleClickAddRowTable","_rowBlank","attrIdRowObject","cloneNode","countRows","initialiseRowNew","prepend","postInitialiseRowNewCallback","cacheRowBlank","selectorRowNew","flagRowNew","rowBlankTemp","initialiseSliderDisplayOrderRowNew","slidersDisplayOrder","flagDisplayOrder","flagSlider","maxDisplayOrder","slider","Math","max","sliderDisplayOrder","hookupSlidersDisplayOrderTable","selectorDisplayOrder","hookupChangeHandlerTableCells","inputSelector","handleChangeNestedElementCellTable","input","wasDirtyParentRows","getAllIsDirtyRowsInParentTree","wasDirtyElement","isDirtyElement","cascadeChangedIsDirtyNestedElementCellTable","tr","isDirtyRow","wasDirtyRow","shift","hookupChangeHandlerTableCellsWhenNotCollapsed","hookupFieldsCodeTable","flagCode","hookupFieldsNameTable","hookupFieldsDescriptionTable","flagDescription","hookupFieldsNotesTable","flagNotes","hookupFieldsActive","flagTable","handleClickRowNew","selectorButton","selectorButtonDelete","selectorButtonUndelete","hookupButtonsRowDelete","hookupButtonsRowUndelete","changeHandler","handleClickButtonRowDelete","changeEvent","changeElement","valuePrevious","wasDirty","parentNode","removeChild","buttonAddTemplate","idContainerTemplateElements","flagAdd","buttonAdd","replaceWith","handleClickButtonRowUndelete","buttonDeleteTemplate","buttonDelete","hookupTdsAccessLevel","hookupTableCellDdlPreviews","flagAccessLevel","accessLevels","fieldFlag","optionList","cellSelector","ddlHookup","ddlSelector","handleClickTableCellDdlPreview","optionObjectList","idSelected","td","ddl","optionObjectJson","toggleColumnCollapsed","flagColumn","isCollapsed","toggleColumnHasClassnameFlag","toggleColumnHeaderCollapsed","hookupFieldsCommandCategory","idTable","flagCommandCategory","filterCommandCategories","hookupCommandCategoryDdls","handleChangeCommandCategoryDdl","ddlCategory","idCommandCategoryRowOld","getIdCommandCategoryRow","idCommandCategoryRowNew","idCommandCategoryFilter","getIdCommandCategoryFilter","tdCommand","ddlCommand","hookupFieldsCommand","parentTr","tdCommandCategory","idCommandCategoryRow","filterCommandList","handleChangeCommandDdl","idCommandNew","getIdCommandRow","commandNew","divCommandCategory","ddlCommandCategory","elementCommandCategory","commandCategoryFilter","commandFilter","valueCurrentCommandCategoryFilter","valueCurrentCommandFilter","parseInt","getHasCommandCategoryFilter","elementCommand","getIdCommandFilter","idCommand","getHasCommandFilter","idCommandFilter","columnFlag","isRequiredFlag","classnameFlag","columnTh","columnThHasFlag","toggleColumnHeaderHasClassnameFlag","areVisibleSaveCancelButtons","PageMtgDecks","hashPageMtgDecks","attrDeckId","saveDeck","newRows","newestRow","clickableElementsSelector","attrCommanderBracketId","join","clickableElement","click","hookupTableMainRows","hookupTableMainIsCommanderCheckboxes","hookupTableMainCommanderBracketPreviews","rowSelector","flagTableMain","isRowExpanded","showSection","toggleShowDeckStatisticsSection","deckId","statisticsSectionTableBody","flagStatistics","deck","decks","newStatisticRowsHtml","statistic","attrStatisticId","flagValue","flagIsCommander","commanderBrackets","PageMtgGame","hashPageMtgGame","attrGameId","hookupTcgGame","initGamePage","pageHeading","updatePlayerSetup","loadGameFromServer","hookupResetButton","hookupPlayerCountInput","hookupStartGameButton","resetGameButton","resetGame","playerCountInput","getElementById","startGameButton","startGame","playersResponse","roundsResponse","damageResponse","Promise","all","setupSection","gameSection","savedPlayers","savedRounds","savedDamageRecords","damageRecords","latestRoundId","getLatestRoundId","latestRound","round","attrRoundId","roundDisplayOrderLabel","getRoundDisplayOrderLabel","renderPlayers","grid","currentRoundDisplayOrder","activeRound","makeDefaultGameRound","previousRoundIds","map","player","index","playerId","attrPlayerId","displayName","makePlayerDisplayName","damagePlayerPairs","maxCommanderDamageReceived","damagePlayerPair","sourceId","filteredPlayerDamages","damage","attrReceivedFromCommanderPlayerId","makeDefaultGameRoundPlayerDamage","includes","flagLifeLoss","reduce","totalDamage","flagLifeGain","life","startingLife","isEliminatedByForce","flagIsEliminated","some","Boolean","isEliminated","totalCommanderDeaths","flagCommanderDeaths","card","className","animationDelay","userName","user_name","deckName","deck_name","renderCommanderDamageRows","reorderPlayerCards","renderCommanderDamageLog","hookupGameRoundEvents","hookupPlayerCardEvents","getActiveRoundDisplayOrder","damageTableBody","flagDamageLog","newTableBodyHtml","r","p","receivedFromPlayer","attrDamageId","receivedFromCommanderPlayerId","roundId","getActiveRoundId","highestRoundDisplayOrder","acc","cur","filteredRounds","user","attrUserId","activeRoundDisplayOrder","otherPlayer","otherPlayerDisplayName","curr","isLethal","incrementRoundButtonSelector","flagRoundDisplayOrderButton","amount","flagRoundDisplayOrderPlus","roundDisplayOrderButtonContainer","newDisplayOrder","displayOrder","lifeGainButtonSelector","activeRoundId","damageIndex","findIndex","changeLife","lifeLossButtonSelector","commanderDeathButtonSelector","isMinusButton","changeCommanderDeaths","commmanderDamageButtonSelector","changeCommanderDamage","eliminatePlayerButtonSelector","toggleEliminate","isLifeGainNotLoss","updateDamage","lifeInput","lifeDisplay","currentLife","newLife","damageInput","damageDisplay","currentDamage","newDamage","damageRecord","deathDisplay","currentDeaths","newDeaths","eliminateBtn","wasEliminated","playerGrid","currentPlayerCards","newPlayerCards","playerCardMetas","playerCard","newPlayerGridInnerHTML","playerIdA","playerIdB","isEliminatedAsIntA","isEliminatedAsIntB","playerA","playerB","indexPlayerCard","isPlayerEliminated","playerCardMeta","outerHTML","roundDisplayOrder","filteredRoundIds","hasDamageWithIsEliminated","damageFromOtherPlayers","otherPlayerId","maxDamageFromOtherCommander","totalDamageTaken","playerCount","wrapperTemplate","playerSetupWrapperTemplateId","wrapper","wrapperHeading","userDdl","deckDdl","nameInput","makeDefaultGamePlayer","playersToSave","playerSetupWrapper","userId","self","reload","showError","finally","confirm","removeItem","hashPageGames","errorOverlay","errorLabel","_saveTimeout","PageMtgGames","hashPageMtgGames","hookupTcgGames","newGameForm","handleNewGameSubmit","filterForm","handleFilterSubmit","e","hideNewGameForm","modal","newGameButton","showNewGameForm","cancelNewGameButtons","overflow","firstInput","focus","form","reset","formData","FormData","gameType","get","gameData","flagIsDraft","flagIsSealed","flagLocationName","flagStartOn","toISOString","flagStartingLife","submitBtn","originalText","disabled","games","gamePageHash","hashPageGame","getCSRFToken","metaTag","hiddenInput","cookies","cookie","showSuccess","joinGame","deleteGame","result","animation","setTimeout","PageMtgHome","hashPageMtgHome","hookupTcgHome","PageAccessibilityReport","hashPageAccessibilityReport","PageAccessibilityStatement","hashPageAccessibilityStatement","PageLicense","hashPageLicense","PagePrivacyPolicy","hashPagePrivacyPolicy","PageRetentionSchedule","hashPageDataRetentionSchedule","MixinPage","pageCurrent","hookupLocalStorage","TableMixinPage","hookupTable","PageUser","hashPageUserAccount","mixin","flagCard","inputFirstname","flagFirstname","inputSurname","flagSurname","inputEmail","flagEmail","idUser","jsonRow","attrUserAuth0Id","flagIsEmailVerified","flagIsSuperUser","flagCanAdminUser","hookupFieldsFirstname","hookupFieldsSurname","hookupFieldsEmail","PageUsers","hashPageUserAccounts","inputNotes","buttonActive","Router","pages","module","routes","loadPage","hashPage","PageClass","getClassPageFromHash","currentPage","pageJson","handlePopState","loadPageCurrent","history","pushState","navigateToUrl","appendHistory","loadPageBodyFromResponse","App","dom","setupEventListeners","start","handleGlobalClick","initPageCurrent","app","domReady","fn","readyState"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/pages/base_table.js b/static/js/pages/base_table.js index 7230e34..9a915fd 100644 --- a/static/js/pages/base_table.js +++ b/static/js/pages/base_table.js @@ -674,7 +674,7 @@ export default class TableBasePage extends BasePage { idCommandCategory = command[attrIdCommandCategory]; } } else { - idCommandCategory = Number(valueCurrentCommandCategoryFilter); + idCommandCategory = parseInt(valueCurrentCommandCategoryFilter); } return idCommandCategory; } @@ -690,7 +690,7 @@ export default class TableBasePage extends BasePage { let formFilters = TableBasePage.getFormFilters(); let commandFilter = formFilters.querySelector('#' + attrIdCommand); let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter); - let idCommand = Number(valueCurrentCommandFilter); + let idCommand = parseInt(valueCurrentCommandFilter); return idCommand; } getHasCommandFilter() { diff --git a/static/js/pages/tcg/mtg_game.js b/static/js/pages/tcg/mtg_game.js index 2b364b6..d3abfae 100644 --- a/static/js/pages/tcg/mtg_game.js +++ b/static/js/pages/tcg/mtg_game.js @@ -198,7 +198,7 @@ export default class PageMtgGame extends TableBasePage { // let activeRoundId = PageMtgGame.getActiveRoundId(); const roundDisplayOrderLabel = PageMtgGame.getRoundDisplayOrderLabel(); - const currentRoundDisplayOrder = Number(DOM.getElementValueCurrent(roundDisplayOrderLabel)); + const currentRoundDisplayOrder = parseInt(DOM.getElementValueCurrent(roundDisplayOrderLabel)); let activeRound = rounds.filter(round => round[flagDisplayOrder] == currentRoundDisplayOrder)[0]; if (activeRound == null) { activeRound = PageMtgGame.makeDefaultGameRound(currentRoundDisplayOrder); @@ -402,7 +402,7 @@ export default class PageMtgGame extends TableBasePage { } static getActiveRoundDisplayOrder() { const roundDisplayOrderLabel = PageMtgGame.getRoundDisplayOrderLabel(); - return Number(DOM.getElementValueCurrent(roundDisplayOrderLabel)); + return parseInt(DOM.getElementValueCurrent(roundDisplayOrderLabel)); } static getActiveRoundId() { const currentRoundDisplayOrder = PageMtgGame.getActiveRoundDisplayOrder(); @@ -464,7 +464,7 @@ export default class PageMtgGame extends TableBasePage { const amount = button.classList.contains(flagRoundDisplayOrderPlus) ? 1 : -1; const roundDisplayOrderButtonContainer = button.parentElement; const roundDisplayOrderLabel = roundDisplayOrderButtonContainer.querySelector('span.' + flagRound + '.' + flagDisplayOrder); - const currentRoundDisplayOrder = Number(DOM.getElementValueCurrent(roundDisplayOrderLabel)); + const currentRoundDisplayOrder = parseInt(DOM.getElementValueCurrent(roundDisplayOrderLabel)); const newDisplayOrder = currentRoundDisplayOrder + amount; DOM.setElementValueCurrent(roundDisplayOrderLabel, newDisplayOrder); DOM.isElementDirty(roundDisplayOrderLabel); @@ -486,7 +486,7 @@ export default class PageMtgGame extends TableBasePage { // Life gain buttons let lifeGainButtonSelector = '.life-gain-btn'; Events.hookupEventHandler("click", lifeGainButtonSelector, (event, button) => { - const playerId = button.dataset.playerId; + const playerId = parseInt(button.dataset.playerId); const amount = parseInt(button.dataset.amount); const activeRoundId = PageMtgGame.getActiveRoundId(); const damageIndex = damageRecords.findIndex(damage => ( @@ -506,7 +506,7 @@ export default class PageMtgGame extends TableBasePage { // Life loss buttons let lifeLossButtonSelector = '.life-loss-btn'; Events.hookupEventHandler("click", lifeLossButtonSelector, (event, button) => { - const playerId = button.dataset.playerId; + const playerId = parseInt(button.dataset.playerId); const amount = parseInt(button.dataset.amount); const activeRoundId = PageMtgGame.getActiveRoundId(); const damageIndex = damageRecords.findIndex(damage => ( @@ -526,7 +526,7 @@ export default class PageMtgGame extends TableBasePage { // Commander death buttons let commanderDeathButtonSelector = '.death-btn'; Events.hookupEventHandler("click", commanderDeathButtonSelector, (event, button) => { - const playerId = button.dataset.playerId; + const playerId = parseInt(button.dataset.playerId); const isMinusButton = button.classList.contains('death-minus'); const amount = (isMinusButton) ? -1 : 1; this.changeCommanderDeaths(playerId, amount); @@ -535,8 +535,8 @@ export default class PageMtgGame extends TableBasePage { // Commander damage buttons let commmanderDamageButtonSelector = '.damage-btn'; Events.hookupEventHandler("click", commmanderDamageButtonSelector, (event, button) => { - const playerId = button.dataset.playerId; - const sourceId = button.dataset.sourceId; + const playerId = parseInt(button.dataset.playerId); + const sourceId = parseInt(button.dataset.sourceId); const isMinusButton = button.classList.contains('damage-minus'); const amount = (isMinusButton) ? -1 : 1; this.changeCommanderDamage(playerId, sourceId, amount); @@ -545,7 +545,7 @@ export default class PageMtgGame extends TableBasePage { // Eliminate buttons let eliminatePlayerButtonSelector = '.eliminate-btn'; Events.hookupEventHandler("click", eliminatePlayerButtonSelector, (event, button) => { - const playerId = button.dataset.playerId; + const playerId = parseInt(button.dataset.playerId); this.toggleEliminate(playerId); }); }