redmine_apijs 6.8.0 → 6.8.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"sources":["../code/apijs/src/javascripts/main.js","../code/apijs/src/javascripts/i18n.js","../code/apijs/src/javascripts/select.js","../code/apijs/src/javascripts/player.js","../code/apijs/src/javascripts/dialog.js","../code/apijs/src/javascripts/slideshow.js","../code/apijs/src/javascripts/upload.js"],"sourcesContent":["/**\n * Created J/03/12/2009\n * Updated V/09/07/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\nif (!Array.prototype.has) {\n\tArray.prototype.has = function (needle, key) {\n\t\tif (needle instanceof Array) {\n\t\t\tfor (key in needle) if (needle.hasOwnProperty(key)) {\n\t\t\t\tif (this.has(needle[key]))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor (key in this) if (this.hasOwnProperty(key)) {\n\t\t\t\tif (this[key] === needle)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n}\n\nif (window.NodeList && !NodeList.prototype.forEach) {\n\tNodeList.prototype.forEach = function (callback, that, i) {\n\t\tthat = that || window;\n\t\tfor (i = 0; i < this.length; i++)\n\t\t\tcallback.call(that, this[i], i, this);\n\t};\n}\n\nvar apijs = new (function () {\n\n\t\"use strict\";\n\tthis.core = {};\n\tthis.version = 680;\n\n\tthis.config = {\n\t\tlang: 'auto',\n\t\tdebug: false,\n\t\t//select: { },\n\t\tdialog: {\n\t\t\tcloseOnClick: false,\n\t\t\trestrictNavigation: true,\n\t\t\tplayer: true\n\t\t},\n\t\tslideshow: {\n\t\t\tids: 'slideshow',\n\t\t\tanchor: true\n\t\t},\n\t\tupload: {\n\t\t\ttokenName: 'X-CSRF-Token',\n\t\t\ttokenValue: null\n\t\t}\n\t};\n\n\tthis.start = function () {\n\n\t\tvar elem;\n\n\t\t// bonjour\n\t\tconsole.info('APIJS ' + this.version.toString().split('').join('.') + ' - hello - 1 MB/Mo = 1024 kB/ko');\n\t\tif (document.getElementById('oldBrowser'))\n\t\t\tthrow new Error('APIJS canceled, #oldBrowser detected!');\n\n\t\tif (elem = document.querySelector('link[href*=\"apijs/fontello.woff2\"]')) {\n\t\t\tif (elem.getAttribute('href').indexOf('?a3ab5acff3') < 0)\n\t\t\t\tconsole.error('APIJS warning invalid cachekey for link:fontello.woff2?x, it must be ?a3ab5acff3');\n\t\t}\n\t\tif (elem = document.querySelector('script[src*=\"apijs.min.js?v=\"]')) {\n\t\t\tif (elem.getAttribute('src').indexOf('?v=' + this.version) < 0)\n\t\t\t\tconsole.error('APIJS warning invalid cachekey for script:apijs.min.js?x, it must be ?v=' + this.version);\n\t\t}\n\n\t\t// instancie\n\t\tthis.i18n = new this.core.i18n();\n\t\t//this.select = new this.core.select();\n\t\tthis.dialog = new this.core.dialog();\n\t\tthis.upload = new this.core.upload();\n\t\tthis.slideshow = new this.core.slideshow();\n\t\tself.dispatchEvent(new CustomEvent('apijsbeforeload'));\n\n\t\t// démarre\n\t\tthis.i18n.init();\n\t\tthis.slideshow.init();\n\t\t//this.select.init();\n\t\tdocument.querySelectorAll('video.apijsplayer[data-src]').forEach(function (elem) {\n\t\t\tapijs.startPlayer(elem, elem.getAttribute('data-src'));\n\t\t});\n\n\t\tself.addEventListener('popstate', this.slideshow.onPopState);\n\t\tself.addEventListener('hashchange', this.slideshow.onPopState);\n\n\t\tif (this.config.debug) {\n\t\t\tconsole.info('APIJS available languages: ' + Object.keys(this.i18n.data).join(' '));\n\t\t\tconsole.info('APIJS language loaded: ' + this.config.lang);\n\t\t\tconsole.info('APIJS successfully started');\n\t\t}\n\n\t\t// événement\n\t\tself.dispatchEvent(new CustomEvent('apijsload'));\n\t};\n\n\tthis.formatNumber = function (nb, dec) {\n\n\t\t// par défaut 2 chiffres\n\t\tvar dgt = (typeof dec == 'number') ? dec : ((dec === false) ? 0 : 2), str;\n\n\t\t// Firefox 29+ pas 27+, (iOS) Safari 10+ pas 9+\n\t\ttry {\n\t\t\tstr = new Intl.NumberFormat(this.config.lang, { minimumFractionDigits: dgt, maximumFractionDigits: dgt }).format(nb);\n\t\t}\n\t\tcatch (ignore) {\n\t\t\tstr = nb.toFixed(dgt);\n\t\t}\n\n\t\t// conserve 00 si on veut vraiment 2 chiffres\n\t\treturn (typeof dec == 'number') ? str : str.replace(/[.,]00$/, '');\n\t};\n\n\tthis.startPlayer = function (elem, url) {\n\n\t\tif (this.config.dialog.player === true) {\n\t\t\telem.videoPlayer = new this.core.player(elem, url);\n\t\t\telem.parentNode.classList.add('apijsvideoplayer');\n\t\t\treturn true;\n\t\t}\n\n\t\tif (typeof this.config.dialog.player == 'function') {\n\t\t\tthis.config.dialog.player(elem, url);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tthis.toArray = function (data) {\n\t\treturn Array.prototype.slice.call(data, 0);\n\t};\n\n\tthis.openTab = function (ev) {\n\t\tev.preventDefault();\n\t\tif (this.href.length > 0)\n\t\t\tself.open(this.href);\n\t};\n\n\tthis.log = function (txt) {\n\t\tif (this.config.debug)\n\t\t\tconsole.info('APIJS ' + txt);\n\t};\n\n\tthis.html = function (selector, id) {\n\t\tif ((id === true) || (selector.indexOf('#') === 0))\n\t\t\treturn document.getElementById(selector.replace('#', 'apijs'));\n\t\telse if (this.dialog.t1)\n\t\t\treturn this.dialog.t1.querySelector(selector);\n\t\telse\n\t\t\treturn null;\n\t};\n\n\tthis.requestFullscreen = function (elem) {\n\t\tif (document.webkitFullscreenElement)\n\t\t\tdocument.webkitCancelFullScreen();\n\t\telse if (document.mozFullScreenElement)\n\t\t\tdocument.mozCancelFullScreen();\n\t\telse if (document.fullscreenElement)\n\t\t\tdocument.cancelFullScreen();\n\t\telse if (elem.webkitRequestFullscreen)\n\t\t\telem.webkitRequestFullscreen();\n\t\telse if (elem.requestFullscreen)\n\t\t\telem.requestFullscreen();\n\t\telse if (elem.mozRequestFullScreen)\n\t\t\telem.mozRequestFullScreen();\n\t};\n\n\tthis.serialize = function (form, filter) {\n\n\t\tvar data = [];\n\t\tfilter = (typeof filter == 'string') ? filter : '';\n\n\t\t// https://gomakethings.com/how-to-serialize-form-data-with-vanilla-js/\n\t\tArray.prototype.forEach.call(form.elements, function (elem, idx) {\n\n\t\t\tif (!elem.name || elem.disabled || ['file', 'reset', 'submit', 'button'].has(elem.type) || (elem.name.indexOf(filter) !== 0))\n\t\t\t\treturn;\n\n\t\t\tif (elem.type === 'select-multiple') {\n\t\t\t\tfor (idx = 0; idx < elem.options.length; idx++) {\n\t\t\t\t\tif (elem.options[idx].selected)\n\t\t\t\t\t\tdata.push(encodeURIComponent(elem.name) + '=' + encodeURIComponent(elem.options[idx].value));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!['checkbox', 'radio'].has(elem.type) || elem.checked) {\n\t\t\t\tdata.push(encodeURIComponent(elem.name) + '=' + encodeURIComponent(elem.value));\n\t\t\t}\n\t\t});\n\n\t\treturn data.join('&');\n\t};\n\n})();\n\nif (typeof self.addEventListener == 'function')\n\tself.addEventListener('load', apijs.start.bind(apijs));","/**\n * Created S/05/06/2010\n * Updated S/03/07/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.i18n = function () {\n\n\t\"use strict\";\n\tthis.data = {\n\t\t// https://docs.google.com/spreadsheets/d/1UUpKZ-YAAlcfvGHYwt6aUM9io390j0-fIL0vMRh1pW0/edit?usp=sharing\n\t\t// auto start\n\t\tcs: {\n\t\t\t103: \"Zrušit\",\n\t\t\t104: \"Potvrzení\",\n\t\t\t105: \"Zavřít\",\n\t\t\t106: \"Předchozí\",\n\t\t\t107: \"Následující\",\n\t\t\t108: \"Vybrat soubor\",\n\t\t\t132: \"video stopa\",\n\t\t\t133: \"zvuková stopa\",\n\t\t\t134: \"titulky\",\n\t\t\t135: \"vypnuto\",\n\t\t\t142: \"předchozí/následující\",\n\t\t\t143: \"přehrát/pozastavit\",\n\t\t\t144: \"zpět/vpřed\",\n\t\t\t145: \"snížit/zvýšit hlasitost\",\n\t\t\t146: \"ztlumit\",\n\t\t\t148: \"ukončit\",\n\t\t\t149: \"Konec\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tde: {\n\t\t\t103: \"Abbrechen\",\n\t\t\t104: \"Bestätigen\",\n\t\t\t105: \"Schließen\",\n\t\t\t106: \"Vorheriges\",\n\t\t\t107: \"Nächstes\",\n\t\t\t108: \"Datei wählen\",\n\t\t\t109: \"Dateien wählen\",\n\t\t\t124: \"Verarbeitung läuft...\",\n\t\t\t132: \"videospur\",\n\t\t\t133: \"audiospur\",\n\t\t\t134: \"untertitel\",\n\t\t\t135: \"aus\",\n\t\t\t142: \"vorheriges/nächstes\",\n\t\t\t143: \"wiedergabe/pause\",\n\t\t\t144: \"rückwärts/vorwärts\",\n\t\t\t145: \"leiser/lauter\",\n\t\t\t146: \"ton aus\",\n\t\t\t147: \"vollbild\",\n\t\t\t148: \"beenden\",\n\t\t\t149: \"Ende\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Alle Dateien wurden akzeptiert.\",\n\t\t\t162: \"Akzeptiertes Dateiformat: §.\",\n\t\t\t163: \"Akzeptiertes Dateiformate: § und §.\",\n\t\t\t164: \"Maximale Größe: § MB.\",\n\t\t\t167: \"Unerlaubtes Format\",\n\t\t\t168: \"Format zu gross\",\n\t\t\t169: \"Leere Datei\",\n\t\t\t181: \"§% - § kB/s - Noch § Minuten\",\n\t\t\t182: \"§% - § kB/s - Noch § Minute\",\n\t\t\t183: \"§% - § kB/s - Noch § Sekunden\",\n\t\t\t185: \"§% - bis § kB/s in § Minuten\",\n\t\t\t186: \"§% - bis § kB/s in § Minute\",\n\t\t\t187: \"§% - bis § kB/s in § Sekunden\",\n\t\t\t188: \"§% - bis § kB/s\",\n\t\t\t191: \"Abbrechen\",\n\t\t\t192: \"Sind Sie sicher? [span]Ja[/span] - Nein\",\n\t\t\t193: \"Es ist ein unerwarteter Fehler aufgetreten... Bitte versuchen Sie es noch einmal.\",\n\t\t\t194: \"Es ist ein Fehler beim Senden.\",\n\t\t\t195: \"Es ist ein Fehler bei der Verarbeitung.\",\n\t\t\t196: \"Wir laden Sie ein es erneut zu [a §]versuchen[/a].\"\n\t\t},\n\t\tel: {\n\t\t\t102: \"Εντάξει\",\n\t\t\t103: \"Ακύρωση\",\n\t\t\t105: \"Κλείσιμο\",\n\t\t\t106: \"Προηγούμενο\",\n\t\t\t107: \"Επόμενο\",\n\t\t\t108: \"Επιλέξτε ένα αρχείο\",\n\t\t\t131: \"βίντεο\",\n\t\t\t132: \"κομμάτι βίντεο\",\n\t\t\t133: \"κομμάτι ήχου\",\n\t\t\t134: \"υπότιτλοι\",\n\t\t\t135: \"απενεργοποίηση\",\n\t\t\t142: \"προηγούμενο/επόμενο\",\n\t\t\t143: \"αναπαραγωγή/παύση\",\n\t\t\t144: \"προς τα πίσω/εμπρός\",\n\t\t\t145: \"μείωση/αύξηση έντασης ήχου\",\n\t\t\t146: \"σίγαση\",\n\t\t\t147: \"πλήρης οθόνη\",\n\t\t\t148: \"έξοδος\",\n\t\t\t149: \"Τέλος\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\ten: {\n\t\t\t102: \"Ok\",\n\t\t\t103: \"Cancel\",\n\t\t\t104: \"Confirm\",\n\t\t\t105: \"Close\",\n\t\t\t106: \"Previous\",\n\t\t\t107: \"Next\",\n\t\t\t108: \"Choose a file\",\n\t\t\t109: \"Choose one or multiple files\",\n\t\t\t124: \"Operation in progress...\",\n\t\t\t125: \"Upload in progress...\",\n\t\t\t126: \"Processing file in progress...\",\n\t\t\t127: \"Drag and drop your files here\",\n\t\t\t131: \"video\",\n\t\t\t132: \"video track\",\n\t\t\t133: \"audio track\",\n\t\t\t134: \"subtitles\",\n\t\t\t135: \"off\",\n\t\t\t141: \"first/last\",\n\t\t\t142: \"previous/next\",\n\t\t\t143: \"play/pause\",\n\t\t\t144: \"backward/forward\",\n\t\t\t145: \"decrease/increase the volume\",\n\t\t\t146: \"mute\",\n\t\t\t147: \"full screen\",\n\t\t\t148: \"quit\",\n\t\t\t149: \"End\",\n\t\t\t150: \"Escape\",\n\t\t\t161: \"All files are accepted.\",\n\t\t\t162: \"Accepted file format: §.\",\n\t\t\t163: \"Accepted file formats: § and §.\",\n\t\t\t164: \"Maximum size: § MB.\",\n\t\t\t165: \"Maximum size by file: § MB.|Total maximum size: § MB.\",\n\t\t\t166: \"§ MB\",\n\t\t\t167: \"Format not allowed\",\n\t\t\t168: \"Size too large\",\n\t\t\t169: \"File empty\",\n\t\t\t181: \"§% - § kB/s - § minutes left\",\n\t\t\t182: \"§% - § kB/s - § minute left\",\n\t\t\t183: \"§% - § kB/s - § seconds left\",\n\t\t\t184: \"§% - § kB/s\",\n\t\t\t185: \"§% - at § kB/s in § minutes\",\n\t\t\t186: \"§% - at § kB/s in § minute\",\n\t\t\t187: \"§% - at § kB/s in § seconds\",\n\t\t\t188: \"§% - at § kB/s\",\n\t\t\t191: \"Interrupt\",\n\t\t\t192: \"Are you sure? [span]Yes[/span] - No\",\n\t\t\t193: \"It seems that an unlikely mistake just happened... Please try again.\",\n\t\t\t194: \"An error occurred while sending.\",\n\t\t\t195: \"An error occurred while processing.\",\n\t\t\t196: \"We invite you to [a §]try again[/a].\"\n\t\t},\n\t\tes: {\n\t\t\t102: \"Aceptar\",\n\t\t\t103: \"Cancelar\",\n\t\t\t104: \"Confirmar\",\n\t\t\t105: \"Cerrar\",\n\t\t\t106: \"Anterior\",\n\t\t\t107: \"Siguiente\",\n\t\t\t108: \"Elegir un fichero\",\n\t\t\t109: \"Elegir uno o varios ficheros\",\n\t\t\t124: \"Operación en curso...\",\n\t\t\t125: \"Envío en progreso...\",\n\t\t\t126: \"Tratamiento en curso...\",\n\t\t\t131: \"vídeo\",\n\t\t\t132: \"pista de vídeo\",\n\t\t\t133: \"pista de audio\",\n\t\t\t134: \"subtítulos\",\n\t\t\t135: \"desactivar\",\n\t\t\t142: \"anterior/siguiente\",\n\t\t\t143: \"reproducir/pausa\",\n\t\t\t144: \"retroceder/avanzar\",\n\t\t\t145: \"bajar/subir volumen\",\n\t\t\t146: \"silenciar\",\n\t\t\t147: \"pantalla completa\",\n\t\t\t148: \"salir\",\n\t\t\t149: \"Fin\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Se aceptan todos los archivos.\",\n\t\t\t162: \"Formato de archivo aceptado: §.\",\n\t\t\t163: \"Formatos de archivos aceptados: § y §.\",\n\t\t\t164: \"Tamaño máximo: § MB.\",\n\t\t\t165: \"Tamaño máximo por fichero: § Mo.|Tamaño máximo total: § Mo.\",\n\t\t\t167: \"Formato no autorizado\",\n\t\t\t168: \"Tamaño demasiado importante\",\n\t\t\t169: \"Fichero vacío\",\n\t\t\t181: \"§% - § kB/s - § minutos restantes\",\n\t\t\t182: \"§% - § kB/s - § minuto restantes\",\n\t\t\t183: \"§% - § kB/s - § segundos restantes\",\n\t\t\t185: \"§% - a § kB/s en § minutos\",\n\t\t\t186: \"§% - a § kB/s en § minuto\",\n\t\t\t187: \"§% - a § kB/s en § segundos\",\n\t\t\t188: \"§% - a § kB/s\",\n\t\t\t191: \"Interrumpir\",\n\t\t\t192: \"¿Está seguro(a)? [span]Sí[/span] - No\",\n\t\t\t193: \"Parece que un error improbable acabo de ocurrir... Por favor, inténtelo de nuevo.\",\n\t\t\t194: \"Se produjo un error durante el envío.\",\n\t\t\t195: \"Se produjo un error durante el procesamiento.\",\n\t\t\t196: \"Le invitamos a [a §]intentar de nuevo[/a].\"\n\t\t},\n\t\tfr: {\n\t\t\t103: \"Annuler\",\n\t\t\t104: \"Valider\",\n\t\t\t105: \"Fermer\",\n\t\t\t106: \"Précédent\",\n\t\t\t107: \"Suivant\",\n\t\t\t108: \"Choisir un fichier\",\n\t\t\t109: \"Choisir un ou plusieurs fichiers\",\n\t\t\t124: \"Opération en cours...\",\n\t\t\t125: \"Envoi en cours...\",\n\t\t\t126: \"Traitement en cours...\",\n\t\t\t127: \"Faites glisser et déposez vos fichiers ici\",\n\t\t\t131: \"vidéo\",\n\t\t\t132: \"piste vidéo\",\n\t\t\t133: \"piste audio\",\n\t\t\t134: \"sous-titres\",\n\t\t\t141: \"premier/dernier\",\n\t\t\t142: \"précédent/suivant\",\n\t\t\t143: \"lecture/pause\",\n\t\t\t144: \"reculer/avancer\",\n\t\t\t145: \"réduire/augmenter le volume\",\n\t\t\t146: \"couper le son\",\n\t\t\t147: \"plein écran\",\n\t\t\t148: \"quitter\",\n\t\t\t149: \"Fin\",\n\t\t\t150: \"Échap\",\n\t\t\t161: \"Tous les fichiers sont acceptés.\",\n\t\t\t162: \"Format de fichier accepté : §.\",\n\t\t\t163: \"Formats de fichier acceptés : § et §.\",\n\t\t\t164: \"Taille maximale : § Mo.\",\n\t\t\t165: \"Taille maximale par fichier : § Mo.|Taille maximale total : § Mo.\",\n\t\t\t166: \"§ Mo\",\n\t\t\t167: \"Format non autorisé\",\n\t\t\t168: \"Taille trop importante\",\n\t\t\t169: \"Fichier vide\",\n\t\t\t181: \"§% - § ko/s - § minutes restantes\",\n\t\t\t182: \"§% - § ko/s - § minute restante\",\n\t\t\t183: \"§% - § ko/s - § secondes restantes\",\n\t\t\t184: \"§% - § ko/s\",\n\t\t\t185: \"§% - à § ko/s en § minutes\",\n\t\t\t186: \"§% - à § ko/s en § minute\",\n\t\t\t187: \"§% - à § ko/s en § secondes\",\n\t\t\t188: \"§% - à § ko/s\",\n\t\t\t191: \"Interrompre\",\n\t\t\t192: \"Êtes-vous sûr(e) ? [span]Oui[/span] - Non\",\n\t\t\t193: \"Il semblerait qu'une erreur improbable vient de se produire... Veuillez réessayer.\",\n\t\t\t194: \"Une erreur est survenue lors de l'envoi.\",\n\t\t\t195: \"Une erreur est survenue lors du traitement.\",\n\t\t\t196: \"Nous vous invitons à [a §]réessayer[/a].\"\n\t\t},\n\t\thu: {\n\t\t\t103: \"Mégsem\",\n\t\t\t104: \"Megerősít\",\n\t\t\t105: \"Bezár\",\n\t\t\t106: \"Előző\",\n\t\t\t107: \"Következő\",\n\t\t\t108: \"Válasszon fájlt\",\n\t\t\t131: \"videó\",\n\t\t\t132: \"videosáv\",\n\t\t\t133: \"hangsáv\",\n\t\t\t134: \"feliratok\",\n\t\t\t135: \"ki\",\n\t\t\t142: \"előző/következő\",\n\t\t\t143: \"lejátszás/szünet\",\n\t\t\t144: \"vissza/előre\",\n\t\t\t145: \"hangerő csökkentés/növelése\",\n\t\t\t146: \"némítás\",\n\t\t\t147: \"teljes képernyő\",\n\t\t\t148: \"kilépés\",\n\t\t\t149: \"Befejezés\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tit: {\n\t\t\t103: \"Annulla\",\n\t\t\t104: \"Conferma\",\n\t\t\t105: \"Chiudi\",\n\t\t\t106: \"Precedente\",\n\t\t\t107: \"Successivo\",\n\t\t\t108: \"Scegli un file\",\n\t\t\t109: \"Scegli uno o più file\",\n\t\t\t124: \"Operazione in corso...\",\n\t\t\t125: \"Invio in corso...\",\n\t\t\t126: \"Trattamento in corso...\",\n\t\t\t132: \"traccia video\",\n\t\t\t133: \"traccia audio\",\n\t\t\t134: \"sottotitoli\",\n\t\t\t135: \"inattivo\",\n\t\t\t142: \"precedente/successivo\",\n\t\t\t143: \"riproduci/pausa\",\n\t\t\t144: \"indietro/avanti\",\n\t\t\t145: \"riduci/aumenta volume\",\n\t\t\t146: \"silenzio\",\n\t\t\t147: \"schermo intero\",\n\t\t\t148: \"esci\",\n\t\t\t149: \"Fine\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Tutti i file sono accettati.\",\n\t\t\t162: \"Formato del file accettato: §.\",\n\t\t\t163: \"Formati accettati: § et §.\",\n\t\t\t164: \"Dimensione massima: § MB.\",\n\t\t\t167: \"Formato non autorizzato\",\n\t\t\t168: \"Dimensione troppo importante\",\n\t\t\t169: \"File vuoto\",\n\t\t\t181: \"§% - § kB/s - § minuti rimanenti\",\n\t\t\t182: \"§% - § kB/s - § minuto rimanente\",\n\t\t\t183: \"§% - § kB/s - § secondi rimanenti\",\n\t\t\t185: \"§% - a § kB/s in § minuti\",\n\t\t\t186: \"§% - a § kB/s in § minuto\",\n\t\t\t187: \"§% - a § kB/s in § secondi\",\n\t\t\t188: \"§% - a § kB/s\",\n\t\t\t191: \"Interrompere\",\n\t\t\t192: \"Sei sicuro? [span]Si[/span] - No\",\n\t\t\t193: \"Sembra che un errore inaspettato si sia verificato... Riprova.\",\n\t\t\t194: \"Un errore si è verificato durante l'invio.\",\n\t\t\t195: \"Un errore si è verificato durante il trattamento.\",\n\t\t\t196: \"Vi invitiamo a [a §]riprovare[/a].\"\n\t\t},\n\t\tja: {\n\t\t\t103: \"キャンセル\",\n\t\t\t104: \"承認\",\n\t\t\t105: \"閉じる\",\n\t\t\t106: \"前へ\",\n\t\t\t107: \"次へ\",\n\t\t\t108: \"ファイルを選択する\",\n\t\t\t131: \"ビデオ\",\n\t\t\t132: \"ビデオトラック\",\n\t\t\t133: \"オーディオトラック\",\n\t\t\t134: \"字幕\",\n\t\t\t135: \"オフ\",\n\t\t\t142: \"前へ/次へ\",\n\t\t\t143: \"再生/一時停止\",\n\t\t\t144: \"戻る/進む\",\n\t\t\t146: \"ミュート\",\n\t\t\t147: \"全画面表示\",\n\t\t\t148: \"終了\",\n\t\t\t149: \"終了\",\n\t\t\t150: \"Esc\",\n\t\t\t166: \"§ Mo\",\n\t\t\t184: \"§% - § Ko/s\",\n\t\t\t192: \"よろしいですか?[span]はい[/span] - いいえ\"\n\t\t},\n\t\tnl: {\n\t\t\t103: \"Annuleren\",\n\t\t\t104: \"Bevestigen\",\n\t\t\t105: \"Sluiten\",\n\t\t\t106: \"Vorige\",\n\t\t\t107: \"Volgende\",\n\t\t\t108: \"Kies een bestand\",\n\t\t\t132: \"videospoor\",\n\t\t\t133: \"audiospoor\",\n\t\t\t134: \"ondertitels\",\n\t\t\t135: \"uit\",\n\t\t\t142: \"vorige/volgende\",\n\t\t\t143: \"afspelen/pauzeren\",\n\t\t\t144: \"achteruit/vooruit\",\n\t\t\t145: \"volume omlaag/omhoog\",\n\t\t\t146: \"dempen\",\n\t\t\t147: \"schermvullend\",\n\t\t\t148: \"afsluiten\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tpl: {\n\t\t\t103: \"Anuluj\",\n\t\t\t104: \"Potwierdź\",\n\t\t\t105: \"Zamknij\",\n\t\t\t106: \"Poprzedni\",\n\t\t\t107: \"Następny\",\n\t\t\t108: \"Wybierz plik\",\n\t\t\t131: \"obraz\",\n\t\t\t132: \"ścieżka obrazu\",\n\t\t\t133: \"ścieżka dźwiękowa\",\n\t\t\t134: \"napisy\",\n\t\t\t135: \"wyłączone\",\n\t\t\t142: \"poprzedni/następny\",\n\t\t\t143: \"odtwarzaj/wstrzymaj\",\n\t\t\t144: \"wstecz/przodu\",\n\t\t\t145: \"ciszej/głośniej\",\n\t\t\t146: \"wycisz\",\n\t\t\t147: \"pełny ekran\",\n\t\t\t148: \"zakończ\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tpt: {\n\t\t\t103: \"Cancelar\",\n\t\t\t104: \"Confirmar\",\n\t\t\t105: \"Fechar\",\n\t\t\t106: \"Anterior\",\n\t\t\t107: \"Seguinte\",\n\t\t\t108: \"Escolha um ficheiro\",\n\t\t\t124: \"Operação em processo...\",\n\t\t\t125: \"Envio em processo...\",\n\t\t\t126: \"Tratamento em processo...\",\n\t\t\t131: \"vídeo\",\n\t\t\t132: \"faixa de vídeo\",\n\t\t\t133: \"faixa de áudio\",\n\t\t\t134: \"legendas\",\n\t\t\t135: \"não\",\n\t\t\t142: \"anterior/seguinte\",\n\t\t\t143: \"reprodução/pausa\",\n\t\t\t144: \"recuar/avançar\",\n\t\t\t145: \"diminuir/aumentar volume\",\n\t\t\t146: \"sem som\",\n\t\t\t147: \"ecrã completo\",\n\t\t\t148: \"sair\",\n\t\t\t149: \"Fim\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Todos os ficheiros foram aceites.\",\n\t\t\t162: \"Formato do ficheiro aceite: §.\",\n\t\t\t163: \"Formatos de ficheiro aceites: § e §.\",\n\t\t\t164: \"Tamanho máximo: § MB.\",\n\t\t\t181: \"§% - § kB/s - § minutos restantes\",\n\t\t\t182: \"§% - § kB/s - § minuto restantes\",\n\t\t\t183: \"§% - § kB/s - § segundos restantes\",\n\t\t\t185: \"§% - § kB/s em § minutos\",\n\t\t\t186: \"§% - § kB/s em § minuto\",\n\t\t\t187: \"§% - § kB/s em § segundos\",\n\t\t\t188: \"§% - § kB/s\",\n\t\t\t192: \"Tem a certeza? [span]Sim[/span] - Não\",\n\t\t\t193: \"Parece ter acontecido um erro imprevisto. Por favor, tente novamente.\",\n\t\t\t194: \"Ocorreu um erro ao enviar.\",\n\t\t\t195: \"Ocorreu um erro ao processar.\",\n\t\t\t196: \"Convidamo-lo a [a §]tentar novamente[/a].\"\n\t\t},\n\t\tptbr: {\n\t\t\t107: \"Próximo\",\n\t\t\t108: \"Escolher um arquivo\",\n\t\t\t124: \"Operação em andamento...\",\n\t\t\t125: \"Envio em andamento...\",\n\t\t\t126: \"Tratamento em andamento...\",\n\t\t\t132: \"trilha de vídeo\",\n\t\t\t133: \"trilha de áudio\",\n\t\t\t135: \"desligado\",\n\t\t\t142: \"anterior/próximo\",\n\t\t\t143: \"reproduzir/pausar\",\n\t\t\t144: \"retroceder/avançar\",\n\t\t\t146: \"sem áudio\",\n\t\t\t147: \"tela inteira\",\n\t\t\t148: \"fechar\",\n\t\t\t149: \"Final\"\n\t\t},\n\t\tro: {\n\t\t\t103: \"Anuleaza\",\n\t\t\t104: \"Confirmare\",\n\t\t\t105: \"Inchide\",\n\t\t\t106: \"Anteriorul\",\n\t\t\t107: \"Urmatorul\",\n\t\t\t108: \"Alege un fișier\",\n\t\t\t132: \"pistă video\",\n\t\t\t133: \"pistă audio\",\n\t\t\t134: \"subtitluri\",\n\t\t\t135: \"oprit\",\n\t\t\t142: \"anteriorul/urmatorul\",\n\t\t\t143: \"redare/pauză\",\n\t\t\t144: \"înapoi/înaintează\",\n\t\t\t145: \"scade/crește volumul\",\n\t\t\t146: \"mut\",\n\t\t\t147: \"pe tot ecranul\",\n\t\t\t148: \"ieșire\",\n\t\t\t149: \"Sfârșit\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tru: {\n\t\t\t102: \"Ок\",\n\t\t\t103: \"Отмена\",\n\t\t\t104: \"Подтвердить\",\n\t\t\t105: \"Закрыть\",\n\t\t\t106: \"Предыдущий\",\n\t\t\t107: \"Следующий\",\n\t\t\t108: \"Выберите файл\",\n\t\t\t124: \"Операция в процессе...\",\n\t\t\t131: \"видео\",\n\t\t\t132: \"видеодорожка\",\n\t\t\t133: \"аудиодорожка\",\n\t\t\t134: \"субтитры\",\n\t\t\t135: \"выключено\",\n\t\t\t142: \"предыдущий/следующий\",\n\t\t\t143: \"воспроизведение/пауза\",\n\t\t\t144: \"назад/вперед\",\n\t\t\t145: \"понизить/повысить громкость\",\n\t\t\t146: \"выключить звук\",\n\t\t\t147: \"полноэкранный режим\",\n\t\t\t148: \"выйти\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Все файлы приняты.\",\n\t\t\t162: \"Формат файла: §.\",\n\t\t\t163: \"Форматы файлов: § и §.\",\n\t\t\t164: \"Максимальный размер: § Мб.\",\n\t\t\t166: \"§ Мб\",\n\t\t\t181: \"§% - § Кб/s - осталось § минут\",\n\t\t\t182: \"§% - § Кб/s - осталось § минут\",\n\t\t\t183: \"§% - § Кб/s - осталось § секунд\",\n\t\t\t184: \"§% - § Кб/s\",\n\t\t\t185: \"§% - § Кб/s за § минут\",\n\t\t\t186: \"§% - § Кб/s за § минут\",\n\t\t\t187: \"§% - § Кб/s за § секунд\",\n\t\t\t188: \"§% - § Кб/s\",\n\t\t\t192: \"Вы уверены? [span]Да[/span] - нет\",\n\t\t\t193: \"Кажется произошла не предусмотренная ошибка... Попробуйте еще раз.\",\n\t\t\t194: \"Возникла ошибка при отправке файла.\",\n\t\t\t195: \"Возникла ошибка при обработке файла.\"\n\t\t},\n\t\tsk: {\n\t\t\t103: \"Zrušiť\",\n\t\t\t104: \"Potvrdiť\",\n\t\t\t105: \"Zavrieť\",\n\t\t\t106: \"Dozadu\",\n\t\t\t107: \"Ďalej\",\n\t\t\t108: \"Zvoľte si súbor\",\n\t\t\t133: \"zvuková stopa\",\n\t\t\t134: \"titulky\",\n\t\t\t135: \"vypnuté\",\n\t\t\t142: \"dozadu/ďalej\",\n\t\t\t143: \"prehrať/pozastaviť\",\n\t\t\t144: \"dozadu/dopredu\",\n\t\t\t145: \"znizit/zvysit hlasitost\",\n\t\t\t146: \"stlmiť\",\n\t\t\t148: \"koniec\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\ttr: {\n\t\t\t102: \"Tamam\",\n\t\t\t103: \"İptal\",\n\t\t\t104: \"Onayla\",\n\t\t\t105: \"Kapat\",\n\t\t\t106: \"Önceki\",\n\t\t\t107: \"Sonraki\",\n\t\t\t108: \"Bir dosya seçin\",\n\t\t\t131: \"görüntü\",\n\t\t\t132: \"görüntü kaydı\",\n\t\t\t133: \"ses kaydı\",\n\t\t\t134: \"altyazılar\",\n\t\t\t135: \"kapalı\",\n\t\t\t142: \"önceki/sonraki\",\n\t\t\t143: \"duraklatma/oynatma\",\n\t\t\t144: \"geri/i̇leri\",\n\t\t\t145: \"ses kısar/açar\",\n\t\t\t146: \"sesi kapatma\",\n\t\t\t147: \"tam ekran\",\n\t\t\t148: \"çıkış\",\n\t\t\t149: \"Son\",\n\t\t\t150: \"Esc\",\n\t\t\t192: \"Emin misiniz ? [span]Evet[/span] - Hayır\"\n\t\t},\n\t\tuk: {\n\t\t\t102: \"Гаразд\",\n\t\t\t103: \"Відмінити\",\n\t\t\t104: \"Підтвердити\",\n\t\t\t105: \"Закрити\",\n\t\t\t106: \"Попередній\",\n\t\t\t107: \"Наступний\",\n\t\t\t108: \"Вибрати файл\",\n\t\t\t131: \"відео\",\n\t\t\t132: \"відеодоріжка\",\n\t\t\t133: \"звукова доріжка\",\n\t\t\t134: \"субтитри\",\n\t\t\t135: \"вимкнено\",\n\t\t\t142: \"попередній/наступний\",\n\t\t\t143: \"відтворити/призупинити\",\n\t\t\t144: \"назад/вперед\",\n\t\t\t145: \"зменшити/збільшити гучність\",\n\t\t\t146: \"вимкнути звук\",\n\t\t\t148: \"вийти\",\n\t\t\t149: \"Кінець\",\n\t\t\t150: \"Esc\",\n\t\t\t166: \"§ МБ\",\n\t\t\t184: \"§% - § кБ/s\"\n\t\t},\n\t\tzh: {\n\t\t\t102: \"确定\",\n\t\t\t103: \"取消\",\n\t\t\t104: \"确认\",\n\t\t\t105: \"关闭\",\n\t\t\t106: \"上一个\",\n\t\t\t107: \"下一个\",\n\t\t\t108: \"选择文件\",\n\t\t\t131: \"视频\",\n\t\t\t132: \"视频轨道\",\n\t\t\t133: \"音频轨道\",\n\t\t\t134: \"字幕\",\n\t\t\t135: \"关\",\n\t\t\t142: \"上一个/下一个\",\n\t\t\t143: \"播放/暂停\",\n\t\t\t144: \"快退/快进\",\n\t\t\t145: \"音量减/增\",\n\t\t\t146: \"静音\",\n\t\t\t147: \"全屏\",\n\t\t\t148: \"退出\",\n\t\t\t150: \"Esc\",\n\t\t\t192: \"您确定吗?[span]是[/span] - 否\"\n\t\t}\n\t\t// auto end\n\t};\n\n\tthis.init = function () {\n\n\t\tvar value = apijs.config.lang, html = document.querySelector('html');\n\n\t\tif (value.indexOf('auto') > -1) {\n\t\t\tvalue = html.getAttribute('xml:lang') || html.getAttribute('lang'); // pt-BR fr-FR\n\t\t\tif (typeof value == 'string') {\n\t\t\t\tvalue = value.replace(/[-_]/g, '').toLowerCase();\n\t\t\t\tvalue = value.slice(0, 4); // ptbr frfr\n\t\t\t\tif (!this.data.hasOwnProperty(value))\n\t\t\t\t\tvalue = value.slice(0, 2); // pt fr\n\t\t\t\tif (this.data.hasOwnProperty(value))\n\t\t\t\t\tapijs.config.lang = value;\n\t\t\t}\n\t\t}\n\n\t\tif (!this.data.hasOwnProperty(value))\n\t\t\tapijs.config.lang = 'en';\n\t};\n\n\n\t// TRADUIT (public return string|domelement|boolean)\n\n\tthis.translate = function (word) {\n\n\t\tvar lang = apijs.config.lang, idx = 1, translation = '';\n\n\t\t// mot clef inexistant dans la langue configurée\n\t\t// test avec la langue par défaut pour éventuellement continuer\n\t\tif (typeof this.data[lang][word] != 'string') {\n\t\t\tif ((lang.length > 3) && (typeof this.data[lang.slice(0, 2)][word] == 'string'))\n\t\t\t\tlang = lang.slice(0, 2);\n\t\t\telse if ((lang !== 'en') && (typeof this.data.en[word] == 'string'))\n\t\t\t\tlang = 'en';\n\t\t\telse\n\t\t\t\treturn word;\n\t\t}\n\n\t\t// chaîne de caractères configurable\n\t\tif (arguments.length > 1) {\n\t\t\tthis.data[lang][word].split('§').forEach(function (data) {\n\t\t\t\ttranslation += (idx < this.length) ? data + this[idx++] : data;\n\t\t\t}, arguments); // pour que ci-dessus this = arguments\n\t\t\treturn translation;\n\t\t}\n\n\t\t// chaîne de caractères simple\n\t\treturn this.data[lang][word];\n\t};\n\n\tthis.translateNode = function () {\n\n\t\t// apply fait une copie des arguments\n\t\t// c'est comme si on avait appelé this.translate directement\n\t\treturn document.createTextNode(this.translate.apply(this, arguments));\n\t};\n\n\tthis.changeLang = function (lang) {\n\n\t\tif (typeof lang == 'string') {\n\n\t\t\tif (lang.indexOf('auto') > -1) {\n\t\t\t\tapijs.config.lang = 'auto';\n\t\t\t\tthis.init();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlang = lang.replace(/[-_]/g, '');\n\n\t\t\tif (this.data.hasOwnProperty(lang)) {\n\t\t\t\tapijs.config.lang = lang;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n};","/**\n * Created L/02/03/2020\n * Updated J/19/11/2020\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.select = function () {\n\n\t\"use strict\";\n\n\tthis.init = function () {\n\n\t\tdocument.querySelectorAll('select').forEach(function (elem) {\n\t\t\telem.addEventListener('focus', apijs.select.open);\n\t\t});\n\t};\n\n\tthis.open = function (ev) {\n\n\t\tvar root = ev.target, t, a, b, c;\n\n\t\tt = document.createDocumentFragment();\n\n\t\t\ta = document.createElement('div');\n\n\t\t\t\tb = document.createElement('ul');\n\t\t\t\troot.querySelectorAll('option').forEach(function (elem) {\n\t\t\t\t\tc = document.createElement('li');\n\t\t\t\t\tc.appendChild(document.createTextNode(elem.textContent));\n\t\t\t\t\tArray.prototype.forEach.call(elem.attributes, function (attribute) {\n\t\t\t\t\t\tc.setAttribute(attribute.name, attribute.value);\n\t\t\t\t\t});\n\t\t\t\t\tthis.appendChild(c);\n\t\t\t\t}, b); // pour que ci-dessus this = b\n\n\t\t\ta.appendChild(b);\n\n\t\tt.appendChild(a);\n\n\t\tconsole.log(t.firstChild.innerHTML);\n\t\troot.parentNode.replaceChild(t.firstChild, root);\n\t};\n};","/**\n * Created D/11/01/2015\n * Updated V/23/07/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.player = function (video, url) {\n\n\t\"use strict\";\n\tthis.video = video;\n\tthis.stalled = false;\n\tthis.subload = false;\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return this|void|domelement)\n\n\tthis.autoRun = function (video, url) { // todo\n\n\t\tvideo.removeAttribute('src');\n\t\tvideo.removeAttribute('data-src');\n\t\tvideo.removeAttribute('controls');\n\t\tvideo.classList.add('apijsplayer');\n\n\t\t// https://developer.mozilla.org/fr/docs/Web/Guide/DOM/Events/evenement_medias\n\t\tvideo.onloadedmetadata = function (ev) {\n\t\t\tthis.stalled = false;\n\t\t\tthis.onTimeupdate(ev);\n\t\t\tthis.onProgress(ev);\n\t\t\tthis.onVideotrack();\n\t\t\tthis.onAudiotrack();\n\t\t}.bind(this);\n\t\tvideo.onstalled = function (ev) {\n\t\t\tthis.stalled = true;\n\t\t\tthis.onWaiting(ev);\n\t\t}.bind(this);\n\t\tvideo.onplaying = this.onPlay.bind(this);\n\t\tvideo.onpause = this.onPlay.bind(this);\n\t\tvideo.onended = this.onPlay.bind(this);\n\t\tvideo.onprogress = this.onProgress.bind(this);\n\t\tvideo.ontimeupdate = this.onTimeupdate.bind(this);\n\t\tvideo.onseeking = this.onTimeupdate.bind(this);\n\t\tvideo.onseeked = this.onWaiting.bind(this);\n\t\tvideo.onwaiting = this.onWaiting.bind(this);\n\t\tvideo.onloadstart = this.onWaiting.bind(this);\n\t\tvideo.oncanplay = this.onWaiting.bind(this);\n\t\tvideo.onclick = this.actionPlay.bind(this);\n\t\tvideo.onvolumechange = this.actionVolume.bind(this);\n\t\tvideo.ondurationchange = apijs.dialog.onMediaLoad;\n\t\tvideo.onerror = apijs.dialog.onMediaLoad;\n\n\t\t// ajoute les contrôles\n\t\tvideo.parentNode.appendChild(this.htmlSvgPlayer());\n\n\t\t// charge les sources\n\t\tif (url.indexOf('m3u') < 0) {\n\t\t\tvideo.appendChild(this.htmlSource(url));\n\t\t\treturn this;\n\t\t}\n\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tself.dispatchEvent(new CustomEvent('apijsajaxresponse', { detail: { from: 'apijsplayer.init', xhr: xhr } }));\n\t\t\t\tif (!video || (video.childNodes.length > 0)) {\n\t\t\t\t\txhr.abort();\n\t\t\t\t}\n\t\t\t\telse if ([0, 200].has(xhr.status)) {\n\n\t\t\t\t\tvar url, txt = 0, nbv = 0, nbt = 0, data = xhr.responseText.trim().split(\"\\n\");\n\t\t\t\t\twhile (typeof (url = data.shift()) == 'string') {\n\n\t\t\t\t\t\t// #APIJS#attr|name|value\n\t\t\t\t\t\tif (url.indexOf('#APIJS#attr') === 0) {\n\t\t\t\t\t\t\ttxt = url.split('|');\n\t\t\t\t\t\t\tvideo.setAttribute(txt[1], txt[2]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #APIJS#track|kind|label|srclang|src\n\t\t\t\t\t\telse if (url.indexOf('#APIJS#track|subtitles') === 0) {\n\t\t\t\t\t\t\ttxt = url.split('|');\n\t\t\t\t\t\t\tthis.html('.tracks.texttrack select').appendChild(this.htmlOption(nbt++, txt[3] + ' - ' + txt[2]));\n\t\t\t\t\t\t\tvideo.appendChild(this.htmlTrack(txt));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #EXTINF: Text\n\t\t\t\t\t\telse if (url.indexOf('#EXTINF') === 0) {\n\t\t\t\t\t\t\ttxt = url.replace(/#EXTINF:[0-9]+,/, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// http\n\t\t\t\t\t\telse if ((url.length > 5) && (url[0] !== '#')) {\n\t\t\t\t\t\t\tthis.html('.tracks.video select').appendChild(this.htmlOption(nbv++, (typeof txt == 'string') ? txt : nbv));\n\t\t\t\t\t\t\tvideo.appendChild(this.htmlSource(url));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateSelect('video', nbv);\n\t\t\t\t\tif (typeof video.textTracks == 'object')\n\t\t\t\t\t\tthis.updateSelect('texttrack', video.textTracks.length || nbt);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tapijs.dialog.onMediaLoad({ type: 'error' });\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(this);\n\t\txhr.send();\n\n\t\treturn this;\n\t};\n\n\tthis.updateSelect = function (css, total) {\n\n\t\t// s'il y une seule option on affiche pas, sauf pour les sous titres\n\t\tvar adjust = (css === 'texttrack') ? 1 : 0;\n\t\tif (total > adjust) {\n\t\t\tthis.html('.tracks.' + css).removeAttribute('style');\n\t\t\tthis.html('.tracks.' + css + ' em').textContent = '(' + total + ')';\n\t\t\tthis.html('.tracks.' + css + ' select').setAttribute('size', (total < 10) ? total + adjust : 10);\n\t\t}\n\t\telse {\n\t\t\tthis.html('.tracks.' + css).setAttribute('style', 'display:none;');\n\t\t\tthis.html('.tracks.' + css + ' select').innerHTML = '';\n\t\t}\n\t};\n\n\tthis.html = function (selector) {\n\t\treturn this.video.parentNode.querySelector(selector);\n\t};\n\n\n\t// GESTION DES ÉVÉNEMENTS (private return void)\n\n\tthis.onVideotrack = function () {\n\n\t\tvar tracks = this.video.videoTracks, select = this.html('.tracks.videotrack select'), lang = apijs.config.lang, auto = -1, idx;\n\n\t\tif (typeof tracks == 'object') {\n\n\t\t\t// si la vidéo contient plusieurs pistes vidéo\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack\n\t\t\tif (tracks.length > 1) {\n\t\t\t\tfor (idx = 0; idx < tracks.length; idx++) {\n\t\t\t\t\tif (tracks[idx].language && (tracks[idx].language.toLowerCase().replace(/[-_]/g, '').indexOf(lang) == 0))\n\t\t\t\t\t\tauto = (auto < 0) ? idx : auto;\n\t\t\t\t\tselect.appendChild(this.htmlOption(idx, tracks[idx]));\n\t\t\t\t}\n\t\t\t\tthis.updateSelect('videotrack', tracks.length);\n\t\t\t}\n\n\t\t\t// sélectionne éventuellement la piste dans la bonne langue\n\t\t\tselect.selectedIndex = Math.max(0, auto);\n\t\t\tif (auto >= 0)\n\t\t\t\tthis.actionVideotrack(auto);\n\t\t}\n\t};\n\n\tthis.onAudiotrack = function () {\n\n\t\tvar tracks = this.video.audioTracks, select = this.html('.tracks.audiotrack select'), lang = apijs.config.lang, auto = -1, idx;\n\n\t\tif (typeof tracks == 'object') {\n\n\t\t\t// si la vidéo contient plusieurs pistes audio\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack\n\t\t\tif (tracks.length > 1) {\n\t\t\t\tfor (idx = 0; idx < tracks.length; idx++) {\n\t\t\t\t\tif (tracks[idx].language && (tracks[idx].language.toLowerCase().replace(/[-_]/g, '').indexOf(lang) == 0))\n\t\t\t\t\t\tauto = (auto < 0) ? idx : auto;\n\t\t\t\t\tselect.appendChild(this.htmlOption(idx, tracks[idx]));\n\t\t\t\t}\n\t\t\t\tthis.updateSelect('audiotrack', tracks.length);\n\t\t\t}\n\n\t\t\t// sélectionne éventuellement la piste dans la bonne langue\n\t\t\tselect.selectedIndex = Math.max(0, auto);\n\t\t\tif (auto >= 0)\n\t\t\t\tthis.actionAudiotrack(auto);\n\t\t}\n\t};\n\n\tthis.onTimeupdate = function (ev) {\n\n\t\tvar time = this.video.currentTime, duration = this.video.duration, text = '--:--', hh, mm, ss;\n\n\t\tif (!isNaN(time) && (duration !== Infinity) && !isNaN(duration)) {\n\n\t\t\thh = Math.floor(time / 3600);\n\t\t\tmm = Math.floor((time % 3600) / 60);\n\t\t\tss = Math.floor(time % 60);\n\t\t\tif (ss < 10) ss = '0' + ss;\n\t\t\tif (mm < 10) mm = '0' + mm;\n\n\t\t\thh = (hh > 0) ? hh + ':' : '';\n\t\t\ttext = hh + mm + ':' + ss;\n\n\t\t\thh = Math.floor(duration / 3600);\n\t\t\tmm = Math.floor((duration % 3600) / 60);\n\t\t\tss = Math.floor(duration % 60);\n\t\t\tif (ss < 10) ss = '0' + ss;\n\t\t\tif (mm < 10) mm = '0' + mm;\n\n\t\t\thh = (hh > 0) ? hh + ':' : '';\n\t\t\ttext += ' / ' + hh + mm + ':' + ss;\n\n\t\t\tthis.html('svg.bar rect').style.width = (time / duration * 100) + '%';\n\t\t}\n\n\t\tthis.html('span.time').textContent = text;\n\n\t\t// loader stalled sauf par les tracks\n\t\tif (this.stalled && !this.subload) {\n\t\t\tthis.stalled = false;\n\t\t\tthis.onWaiting(ev);\n\t\t}\n\t};\n\n\tthis.onProgress = function () {\n\n\t\tvar video = this.video, elem = this.html('svg.bar'), idx = video.buffered.length, width, buffer;\n\n\t\tif ((idx > 0) && (video.duration !== Infinity) && !isNaN(video.duration)) {\n\n\t\t\telem.querySelectorAll('.buffer').forEach(function (node) { node.remove(); });\n\t\t\twhile (idx-- > 0) {\n\n\t\t\t\tbuffer = document.createElement('rect');\n\t\t\t\tbuffer.setAttribute('class', 'buffer');\n\n\t\t\t\twidth = (video.buffered.end(idx) - video.buffered.start(idx)) / video.duration * 100;\n\t\t\t\tif (width > 99.8)\n\t\t\t\t\tbuffer.setAttribute('style', 'left:0%; width:100%;');\n\t\t\t\telse\n\t\t\t\t\tbuffer.setAttribute('style', 'left:' + (video.buffered.start(idx) / video.duration * 100) + '%; width:' + width + '%;');\n\n\t\t\t\telem.appendChild(buffer);\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onPlay = function () { // todo\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tif (this.video.paused) {\n\t\t\t\tthis.html('span.play').textContent = '\\uE810';\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1)\n\t\t\t\t\tapijs.dialog.remove('playing');\n\t\t\t\telse\n\t\t\t\t\tthis.video.parentNode.classList.remove('playing');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.html('span.play').textContent = '\\uE811';\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1)\n\t\t\t\t\tapijs.dialog.add('playing');\n\t\t\t\telse\n\t\t\t\t\tthis.video.parentNode.classList.add('playing');\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onWaiting = function (ev) { // todo\n\t\tapijs.log('player:video:onWaiting:' + ev.type + ' stalled:' + this.stalled + '/subload:' + this.subload);\n\t\tapijs.dialog[['loadstart', 'waiting', 'seeking', 'stalled'].has(ev.type) ? 'add' : 'remove']('loading');\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private return void)\n\n\tthis.actionPlay = function () {\n\n\t\tvar video = this.video;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(video.networkState)) {\n\t\t\tif (video.ended || video.paused)\n\t\t\t\tvideo.play();\n\t\t\telse\n\t\t\t\tvideo.pause();\n\t\t}\n\t};\n\n\tthis.actionVolume = function (ev) {\n\n\t\tvar video = this.video, elem = this.html('svg.vol'), width = elem.offsetWidth, value = 0;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(video.networkState)) {\n\n\t\t\tif ((typeof ev == 'object') && !isNaN(ev.clientX)) {\n\n\t\t\t\tdo { value += elem.offsetLeft; }\n\t\t\t\twhile (elem = elem.offsetParent);\n\n\t\t\t\tvalue = ((ev.clientX - value) * 100 / width) / 100;\n\t\t\t\tvalue = (value < 0.2) ? 0 : ((value > 0.92) ? 1 : value);\n\n\t\t\t\t//if (self.getComputedStyle(this.html('svg.vol')).direction === 'rtl')\n\t\t\t\t//\tvalue = 1 - value;\n\n\t\t\t\tvideo.volume = value;\n\t\t\t\tvideo.muted = false;\n\t\t\t}\n\n\t\t\tthis.html('svg.vol rect').style.width = video.muted ? 0 : (video.volume * 100) + '%';\n\t\t}\n\t};\n\n\tthis.actionPosition = function (ev) {\n\n\t\tvar video = this.video, elem = this.html('svg.bar'), width = elem.offsetWidth, value = 0;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif (([1,2].has(video.networkState)) && (video.duration !== Infinity) && !isNaN(video.duration) && (typeof ev == 'object')) {\n\n\t\t\tdo { value += elem.offsetLeft; }\n\t\t\twhile (elem = elem.offsetParent);\n\n\t\t\tvalue = (video.duration * (ev.clientX - value) * 100 / width) / 100;\n\t\t\tvalue = (value <= 1) ? 0 : value;\n\n\t\t\t//if (self.getComputedStyle(this.html('svg.vol')).direction === 'rtl')\n\t\t\t//\tvalue = video.duration - value;\n\n\t\t\tvideo.currentTime = value;\n\t\t}\n\t};\n\n\tthis.actionVideotrack = function (ev) {\n\n\t\tvar tracks = this.video.videoTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].enabled = (idx == value);\n\n\t\t\tvideo.currentTime -= 1;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionAudiotrack = function (ev) {\n\n\t\tvar tracks = this.video.audioTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].enabled = (idx == value);\n\n\t\t\tvideo.currentTime -= 1;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionTexttrack = function (ev) {\n\n\t\tvar tracks = this.video.textTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].mode = (idx == value) ? 'showing' : 'hidden';\n\n\t\t\tthis.subload = true;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionVideo = function (ev) {\n\n\t\tthis.html('svg.bar rect').style.width = '0';\n\t\tthis.html('svg.bar').querySelectorAll('.buffer').forEach(function (node) { node.remove(); });\n\t\tthis.html('span.play').textContent = '\\uE810';\n\n\t\tthis.updateSelect('videotrack', 0);\n\t\tthis.updateSelect('audiotrack', 0);\n\n\t\tthis.video.src = this.video.querySelectorAll('source')[(typeof ev == 'object') ? ev.target.value : ev].src;\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionFullscreen = function () {\n\n\t\t// en direct\n\t\tvar res = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n\t\tthis.video.parentNode.classList[res ? 'add' : 'remove']('fullscreen');\n\t},\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return domelement)\n\n\tthis.htmlSvgPlayer = function () {\n\n\t\tvar d, c, b, a = document.createElement('div');\n\t\ta.setAttribute('class', 'apijsplayer noplaying');\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'btn play fnt');\n\t\t\tb.appendChild(document.createTextNode('\\uE810'));\n\t\t\tb.onclick = this.actionPlay.bind(this);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'svg bar');\n\n\t\t\t\tc = document.createElement('svg');\n\t\t\t\tc.setAttribute('class', 'bar');\n\t\t\t\tc.onclick = this.actionPosition.bind(this);\n\n\t\t\t\t\td = document.createElement('rect');\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'time');\n\t\t\tb.appendChild(document.createTextNode('--:--'));\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'svg vol nomobile');\n\n\t\t\t\tc = document.createElement('svg');\n\t\t\t\tc.setAttribute('class', 'vol');\n\t\t\t\tc.onclick = this.actionVolume.bind(this);\n\n\t\t\t\t\td = document.createElement('rect');\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks audiotrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(133));\n\n\t\t\t\tc = document.createElement('em');\n\t\t\t\tc.setAttribute('class', 'nomobile');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionAudiotrack.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks videotrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(132));\n\n\t\t\t\tc = document.createElement('em');\n\t\t\t\tc.setAttribute('class', 'nomobile');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionVideotrack.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks video');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(131));\n\n\t\t\t\tc = document.createElement('em');\n\t\t\t\tc.setAttribute('class', 'nomobile');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionVideo.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks texttrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(134));\n\n\t\t\t\tc = document.createElement('em');\n\t\t\t\tc.setAttribute('class', 'nomobile');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionTexttrack.bind(this);\n\n\t\t\t\t\td = document.createElement('option');\n\t\t\t\t\td.appendChild(apijs.i18n.translateNode(135)); // off\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'btn full fnt nomobile');\n\t\t\tb.appendChild(document.createTextNode('\\uE80F'));\n\t\t\tb.onclick = function () {\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1) {\n\t\t\t\t\tapijs.requestFullscreen(apijs.dialog.t1);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('webkitfullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('fullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('mozfullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\tapijs.requestFullscreen(this.video.parentNode);\n\t\t\t\t}\n\n\t\t\t}.bind(this);\n\n\t\ta.appendChild(b);\n\n\t\treturn a;\n\t};\n\n\tthis.htmlTrack = function (data) { // todo\n\n\t\tvar a = document.createElement('track');\n\t\ta.setAttribute('kind', data[1]);\n\t\ta.setAttribute('label', data[2]);\n\t\ta.setAttribute('srclang', data[3]);\n\t\ta.setAttribute('src', data[4]);\n\n\t\ta.onload = function (ev) {\n\t\t\tapijs.log('player:track:onload ' + ev.target.src.slice(ev.target.src.lastIndexOf('/') + 1));\n\t\t\tif (ev.target.track.mode === 'showing') {\n\t\t\t\tthis.onWaiting(ev);\n\t\t\t\tthis.subload = false;\n\t\t\t}\n\t\t}.bind(this);\n\n\t\ta.onerror = function (ev) {\n\t\t\tapijs.log('player:track:onerror ' + ev.target.src.slice(ev.target.src.lastIndexOf('/') + 1));\n\t\t\tif (ev.target.track.mode === 'showing') {\n\t\t\t\tthis.onWaiting(ev);\n\t\t\t\tthis.subload = false;\n\t\t\t}\n\t\t}.bind(this);\n\n\t\treturn a;\n\t};\n\n\tthis.htmlSource = function (url) {\n\n\t\tvar a = document.createElement('source');\n\t\ta.setAttribute('src', url);\n\t\ta.onerror = apijs.dialog.onMediaLoad;\n\n\t\treturn a;\n\t};\n\n\tthis.htmlOption = function (idx, txt) {\n\n\t\tif (typeof txt == 'object')\n\t\t\ttxt = (txt.label === '') ? txt.language.toLowerCase() : txt.language.toLowerCase() + ' - ' + txt.label;\n\n\t\tvar a = document.createElement('option');\n\t\ta.setAttribute('value', idx);\n\t\ta.appendChild(document.createTextNode(txt));\n\n\t\treturn a;\n\t};\n\n\n\tthis.autoRun(video, url);\n};","/**\n * Created D/12/04/2009\n * Updated L/24/05/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.dialog = function () {\n\n\t\"use strict\";\n\tthis.klass = [];\n\tthis.height = 0;\n\tthis.scroll = 0; // time\n\tthis.callback = null;\n\tthis.args = null;\n\tthis.xhr = null;\n\n\tthis.ft = /information|confirmation|options|upload|progress|waiting|photo|video|iframe|ajax|start|ready|end|reduce|mobile|tiny|fullscreen/g;\n\tthis.ti = 'a,area,button,input,textarea,select,object,iframe';\n\tthis.ns = 'http://www.w3.org/2000/svg';\n\n\tthis.media = null;\n\tthis.t0 = null; // fragment\n\tthis.t1 = null; // div id=apijsDialog\n\tthis.t2 = null; // div/form id=apijsBox\n\tthis.a = null;\n\tthis.b = null;\n\tthis.c = null;\n\tthis.d = null;\n\n\n\t// GÉNÉRATION DES BOÎTES DE DIALOGUE (public return boolean)\n\n\tthis.dialogInformation = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('information', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnOk()\n\t\t\t\t.show('button.confirm');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogInformation invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogConfirmation = function (title, text, callback, args, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof callback == 'function')) {\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\treturn this.init('confirmation', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnConfirm('button', 'apijs.dialog.actionConfirm();')\n\t\t\t\t.show('button.confirm');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogConfirmation invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogFormOptions = function (title, text, action, callback, args, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof action == 'string') && (typeof callback == 'function')) {\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\treturn this.init('options', icon)\n\t\t\t\t.htmlParent(action, 'apijs.dialog.actionConfirm();')\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnConfirm('submit')\n\t\t\t\t.show(true);\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogFormOptions invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogFormUpload = function (title, text, action, input, multiple, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof action == 'string') && (typeof input == 'string')) {\n\t\t\treturn this.init('upload', icon)\n\t\t\t\t.htmlParent(action, 'apijs.upload.actionConfirm();', 'apijs.upload.actionDrag(event);')\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlUpload(input, (typeof multiple == 'boolean') ? multiple : false)\n\t\t\t\t.htmlBtnConfirm('submit')\n\t\t\t\t.show('button.browse');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogFormUpload invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogProgress = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('progress', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlSvgProgress()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogProgress invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogWaiting = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('waiting', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogWaiting invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogPhoto = function (url, name, date, legend, icon) {\n\n\t\tvar slideshow = (typeof icon == 'string');\n\t\ticon = slideshow ? 'notransition slideshow loading ' + icon : 'notransition loading';\n\n\t\tif ((typeof url == 'string') && (typeof name == 'string') && (typeof date == 'string') && (typeof legend == 'string')) {\n\t\t\treturn this.init('photo', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlMedia(url, name, date, legend)\n\t\t\t\t.htmlHelp(slideshow, false)\n\t\t\t\t.htmlBtnClose()\n\t\t\t\t.htmlBtnNavigation()\n\t\t\t\t.htmlSvgLoader()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogPhoto invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogVideo = function (url, name, date, legend, icon) {\n\n\t\tvar slideshow = (typeof icon == 'string');\n\t\ticon = slideshow ? 'notransition slideshow loading ' + icon : 'notransition loading';\n\n\t\tif ((typeof url == 'string') && (typeof name == 'string') && (typeof date == 'string') && (typeof legend == 'string')) {\n\t\t\treturn this.init('video', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlMedia(url, name, date, legend)\n\t\t\t\t.htmlHelp(slideshow, url.indexOf('iframe') < 0) // true si pas iframe\n\t\t\t\t.htmlBtnClose()\n\t\t\t\t.htmlBtnNavigation()\n\t\t\t\t.htmlSvgLoader()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogVideo invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogIframe = function (url, close, icon) {\n\n\t\tif ((typeof url == 'string') && (typeof close == 'boolean')) {\n\t\t\treturn this.init('iframe', (typeof icon == 'string') ? icon + ' loading' : 'loading', !close)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlIframe(url)\n\t\t\t\t.htmlBtnClose(close)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogIframe invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogAjax = function (url, close, callback, args, icon) {\n\n\t\tif ((typeof url == 'string') && (typeof close == 'boolean') && (typeof callback == 'function')) {\n\t\t\t// dialogue\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\tthis.init('ajax', (typeof icon == 'string') ? icon + ' loading' : 'loading', !close)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlBtnClose(close)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t\t// ajax\n\t\t\tthis.xhr = new XMLHttpRequest();\n\t\t\tthis.xhr.open('GET', url, true);\n\t\t\tthis.xhr.onreadystatechange = function () {\n\t\t\t\tif ((this.xhr.readyState === 4) && (typeof this.callback == 'function')) {\n\t\t\t\t\tthis.callback(this.xhr, this.args);\n\t\t\t\t\tthis.remove('loading');\n\t\t\t\t}\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\t\t\tthis.xhr.send();\n\t\t\treturn this;\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogAjax invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\n\t// GESTION DES CLASSES CSS (public sauf update private, return this sauf has return true)\n\n\tthis.update = function () {\n\n\t\t// il n'est pas question de mettre à jour les attributs class sans l'une des 3 classes de base\n\t\tif (this.has('start', 'ready', 'end')) {\n\t\t\tif (this.t1)\n\t\t\t\tthis.t1.setAttribute('class', this.klass.join(' '));\n\t\t\tif (this.t2)\n\t\t\t\tthis.t2.setAttribute('class', this.klass.join(' '));\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.add = function () {\n\n\t\tArray.prototype.forEach.call(arguments, function (css) {\n\t\t\tif (typeof css != 'string')\n\t\t\t\tconsole.error('apijs.dialog.add argument is not a string', css);\n\t\t\tif (this.klass.indexOf(css) < 0)\n\t\t\t\tthis.klass.push(css);\n\t\t}, this); // pour que ci-dessus this = this\n\n\t\treturn this.update();\n\t};\n\n\tthis.remove = function () {\n\n\t\tArray.prototype.forEach.call(arguments, function (css) {\n\t\t\tif (typeof css != 'string')\n\t\t\t\tconsole.error('apijs.dialog.remove argument is not a string', css);\n\t\t\tif (this.klass.indexOf(css) > -1)\n\t\t\t\tthis.klass.splice(this.klass.indexOf(css), 1);\n\t\t}, this); // pour que ci-dessus this = this\n\n\t\treturn this.update();\n\t};\n\n\tthis.toggle = function (search, replace) {\n\n\t\tif ((typeof search != 'string') || (typeof replace != 'string'))\n\t\t\tconsole.error('apijs.dialog.toggle argument is not a string', search, replace);\n\n\t\tif (this.has(search))\n\t\t\tthis.remove(search);\n\t\tif (!this.has(replace))\n\t\t\tthis.add(replace);\n\n\t\treturn this.update();\n\t};\n\n\tthis.has = function () {\n\t\treturn this.klass.has(apijs.toArray(arguments)); // true if one found\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private sauf actionClose)\n\n\tthis.actionClose = function (ev) {\n\n\t\t// \\\\ au lieu de \\ sinon Bad or unnecessary escaping\n\t\tif (apijs.config.slideshow.anchor && (typeof history.pushState == 'function')) {\n\t\t\tif (new RegExp('#(' + apijs.config.slideshow.ids + '[\\-\\\\.]\\\\d+[\\-\\\\.]\\\\d+)').test(self.location.href))\n\t\t\t\thistory.pushState({}, '', self.location.href.slice(0, self.location.href.indexOf('#')));\n\t\t}\n\n\t\tif (typeof ev == 'object') {\n\t\t\tif ((ev.target.getAttribute('id') === 'apijsDialog') && !apijs.dialog.has('photo', 'video', 'progress', 'waiting', 'lock'))\n\t\t\t\tapijs.dialog.clear(true);\n\t\t}\n\t\telse if (this.t1) {\n\t\t\tthis.clear(true);\n\t\t}\n\t};\n\n\tthis.onCloseBrowser = function (ev) {\n\n\t\tif (apijs.dialog.has('progress', 'waiting', 'lock')) {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\t\t\tev.m = apijs.i18n.translate(124);\n\t\t\tev.returnValue = ev.m; // Gecko, Trident, Chrome 34+\n\t\t\treturn ev.m; // Gecko, WebKit, Chrome\n\t\t}\n\t};\n\n\tthis.onResizeBrowser = function () {\n\n\t\tvar add, body = document.querySelector('body');\n\n\t\tadd = body.clientWidth <= (apijs.dialog.has('photo', 'video') ? 900 : 460);\n\t\tapijs.dialog[add ? 'add' : 'remove']('mobile');\n\n\t\tadd = body.clientWidth <= 300;\n\t\tapijs.dialog[add ? 'add' : 'remove']('tiny');\n\t};\n\n\tthis.onScrollBrowser = function (ev) {\n\n\t\tvar that = apijs.dialog, elem = ev.target, brk = false;\n\n\t\t// dialogues du diaporama (suivant/précédent)\n\t\tif (that.has('slideshow') && !that.has('playing') &&\n\t\t !['OPTION', 'SELECT'].has(elem.nodeName) && ['DOMMouseScroll','mousewheel','panleft','panright'].has(ev.type)) {\n\n\t\t\telem = new Date().getTime() / 1000;\n\t\t\tif ((that.scroll < 1) || (elem > (1 + that.scroll))) {\n\t\t\t\tthat.scroll = elem;\n\t\t\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\t\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\t\t\t\tapijs.slideshow[((ev.type === 'panleft') || brk) ? 'actionNext' : 'actionPrev']();\n\t\t\t}\n\t\t}\n\t\t// autorise éventuellement le défilement\n\t\t// recherche l'éventuel élément scrollable\n\t\telse {\n\t\t\tif (elem.nodeName === 'OPTION') {\n\t\t\t\telem = elem.parentNode;\n\t\t\t}\n\t\t\telse if (!['TEXTAREA', 'SELECT'].has(elem.nodeName)) {\n\t\t\t\twhile ((brk !== true) && (elem.nodeName !== 'HTML')) {\n\t\t\t\t\tif (elem.classList.contains('scrollable'))\n\t\t\t\t\t\tbrk = true;\n\t\t\t\t\telse\n\t\t\t\t\t\telem = elem.parentNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// elem = select | textarea | scrollable\n\t\t\tif (elem.nodeName !== 'HTML') {\n\t\t\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\t\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\t\t\t\tif ((brk && (elem.scrollTop < (elem.scrollHeight - elem.offsetHeight))) || (!brk && (elem.scrollTop > 0)))\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// empèche le défilement\n\t\tev.preventDefault();\n\t\tev.stopPropagation();\n\t};\n\n\tthis.onScrollIframe = function (ev) {\n\n\t\tvar elem = ev.target, brk;\n\t\twhile (elem.parentNode)\n\t\t\telem = elem.parentNode;\n\n\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\n\t\t// empèche le défilement (elem = iframe document)\n\t\tif (\n\t\t\t(brk && ((elem.defaultView.innerHeight + elem.defaultView.pageYOffset) >= (elem.body.offsetHeight - 1))) ||\n\t\t\t(!brk && (elem.defaultView.pageYOffset <= 0))\n\t\t) {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\t\t}\n\t};\n\n\tthis.onKey = function (ev) {\n\n\t\tvar that = apijs.dialog, elem = that.media;\n\n\t\t// dialogues d'attente et de progresssion ou tout autre dialogue verrouillé\n\t\t// ctrl + q | ctrl + w | ctrl + r | ctrl + f4 | ctrl + f5 // alt + f4 // échap | f5\n\t\tif (that.has('progress', 'waiting', 'lock')) {\n\n\t\t\tif ((ev.ctrlKey && [81, 87, 82, 115, 116].has(ev.keyCode)) || (ev.altKey && (ev.keyCode === 115)) || [27, 116].has(ev.keyCode))\n\t\t\t\tev.preventDefault();\n\t\t}\n\t\t// dialogues photo et vidéo\n\t\t// f11 (ne fonctionne plus sur Opera 74 Windows)\n\t\telse if (that.has('photo', 'video') && (ev.keyCode === 122)) {\n\t\t\tev.preventDefault();\n\t\t\tapijs.requestFullscreen(that.t1);\n\t\t}\n\t\t// dialogues photo et vidéo du diaporama\n\t\t// échap // fin // début // gauche // droite\n\t\telse if (that.has('slideshow')) {\n\n\t\t\tif (ev.keyCode === 27) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tthat.actionClose();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 35) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionLast();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 36) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionFirst();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 37) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionPrev();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 39) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionNext();\n\t\t\t}\n\t\t}\n\t\t// pour tous les autres\n\t\t// échap\n\t\telse if (ev.keyCode === 27) {\n\t\t\tev.preventDefault();\n\t\t\tthat.actionClose();\n\t\t}\n\n\t\t// dialogue vidéo\n\t\t// espace | p // haut | page haut // bas | page bas // + // - // m\n\t\tif (that.has('video') && !that.has('videoiframe')) {\n\n\t\t\t// espace | p\n\t\t\tif ((ev.keyCode === 32) || (ev.keyCode === 80)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1,2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.ended || elem.paused)\n\t\t\t\t\t\telem.play();\n\t\t\t\t\telse\n\t\t\t\t\t\telem.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// haut | page haut\n\t\t\telse if ((ev.keyCode === 38) || (ev.keyCode === 33)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif (([1,2].has(elem.networkState)) && (elem.duration !== Infinity) && !isNaN(elem.duration)) {\n\t\t\t\t\tif (elem.currentTime < (elem.duration - 10))\n\t\t\t\t\t\telem.currentTime += 10;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// bas | page bas\n\t\t\telse if ((ev.keyCode === 40) || (ev.keyCode === 34)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif (([1,2].has(elem.networkState)) && (elem.duration !== Infinity) && !isNaN(elem.duration)) {\n\t\t\t\t\tif (elem.currentTime > 10)\n\t\t\t\t\t\telem.currentTime -= 10;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.currentTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// +\n\t\t\telse if (ev.keyCode === 107) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1,2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.muted)\n\t\t\t\t\t\telem.muted = false;\n\t\t\t\t\tif (elem.volume < 0.8)\n\t\t\t\t\t\telem.volume += 0.2;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.volume = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// -\n\t\t\telse if (ev.keyCode === 109) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1,2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.muted)\n\t\t\t\t\t\telem.muted = false;\n\t\t\t\t\tif (elem.volume > 0.21)\n\t\t\t\t\t\telem.volume -= 0.2;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.volume = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// m\n\t\t\telse if (ev.keyCode === 77) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1,2].has(elem.networkState)) {\n\t\t\t\t\telem.muted = !elem.muted; // inverse\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// défilement de la page pour tous (renvoi sur actionScrollBrowser)\n\t\t// espace | page haut | page bas | fin | début | haut | bas\n\t\tif ([32, 33, 34, 35, 36, 38, 40].has(ev.keyCode)) {\n\n\t\t\t// empèche le défilement\n\t\t\tif (!ev.target || (!['INPUT','TEXTAREA','OPTION','SELECT'].has(ev.target.nodeName) && !ev.target.classList.contains('scrollable'))) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tev.stopPropagation();\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onFullscreen = function (ev) {\n\n\t\tvar res = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n\t\tif (ev) apijs.log('dialog:onFullscreen:' + (res ? 'in' : 'out'));\n\n\t\tapijs.dialog[res ? 'add' : 'remove']('fullscreen');\n\t};\n\n\tthis.onIframeLoad = function (elem) { // todo\n\n\t\telem.removeAttribute('class');\n\t\tapijs.dialog.remove('loading');\n\n\t\telem.contentWindow.document.addEventListener('keydown', window.parent.apijs.dialog.onKey);\n\t\telem.contentWindow.addEventListener('DOMMouseScroll', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t\telem.contentWindow.addEventListener('mousewheel', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t\telem.contentWindow.addEventListener('touchmove', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t};\n\n\tthis.onMediaLoad = function (ev) { // todo\n\n\t\tvar that = apijs.dialog, media = that.media, src, elem, elems;\n\t\tif (ev && ev.target) {\n\t\t\tsrc = ev.target.currentSrc || ev.target.src;\n\t\t\tapijs.log('dialog:onMediaLoad:' + ev.type + ' ' + (src ? src.slice(src.lastIndexOf('/') + 1) : ''));\n\t\t}\n\n\t\tif (media && ['load', 'durationchange'].has(ev.type)) {\n\t\t\tthat.remove('loading', 'error');\n\t\t\tmedia.style.visibility = 'visible';\n\t\t\tif (!media.hasAttribute('src') && (media.nodeName === 'IMG'))\n\t\t\t\tmedia.setAttribute('src', media.imageLoader.src);\n\t\t}\n\t\telse if (media && (ev.type === 'error')) {\n\t\t\tthat.toggle('loading', 'error');\n\t\t\tmedia.removeAttribute('style');\n\t\t\t// player vidéo (désactive l'option et active la suivante)\n\t\t\telem = apijs.html('.tracks.video select');\n\t\t\tif (elem && ev && ev.target) {\n\t\t\t\telems = elem.querySelectorAll('option');\n\t\t\t\tif ((elems.length > 0) && (elem.value.length > 0)) {\n\t\t\t\t\telems[elem.value].setAttribute('disabled', 'disabled');\n\t\t\t\t\telem.selectedIndex += 1;\n\t\t\t\t\t// charge la vidéo suivante (si erreur au clic sur le select)\n\t\t\t\t\tif ((ev.target.nodeName === 'VIDEO') && (elem.value !== ''))\n\t\t\t\t\t\tmedia.videoPlayer.actionVideo(elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.actionConfirm = function () { // todo\n\n\t\t// vérifie le dialogue d'options\n\t\t// arrêt du traitement si c'est pas bon\n\t\tif (this.has('options')) {\n\t\t\tif (this.callback(false, this.args) !== true)\n\t\t\t\treturn false;\n\t\t}\n\n\t\t// verrouille le dialogue et affiche le loader\n\t\tthis.add('lock', 'loading');\n\t\tthis.htmlSvgLoader(false);\n\n\t\t// masque les boutons et le texte du dialogue\n\t\tapijs.html('div.btns').style.visibility = 'hidden';\n\t\tapijs.html('div.bbcode').style.visibility = 'hidden';\n\n\t\t// appelle la fonction de rappel\n\t\t// ne déverrouille pas le dialogue\n\t\tself.setTimeout(function () {\n\t\t\tif ((this.t2) && (this.t2.nodeName === 'FORM'))\n\t\t\t\tthis.callback(this.t2.getAttribute('action'), this.args);\n\t\t\telse if (this.t2)\n\t\t\t\tthis.callback(this.args);\n\t\t}.bind(this), 12); // pour que ci-dessus this = this\n\n\t\treturn false; // très important\n\t};\n\n\n\t// GESTION DES CONTENEURS (private return this|boolean)\n\n\tthis.init = function (type, icon, isLocked) { // todo\n\n\t\tisLocked = (isLocked === true);\n\t\tif (typeof icon == 'string') {\n\t\t\ticon = icon.replace(this.ft, '').trim();\n\t\t\ticon = (icon.length > 0) ? (isLocked ? icon + ' lock' : icon) : (isLocked ? 'lock' : null);\n\t\t}\n\t\telse if (isLocked) {\n\t\t\ticon = 'lock';\n\t\t}\n\n\t\t// préparation\n\t\tif (this.t0)\n\t\t\tthis.clear(false);\n\n\t\t// css\n\t\tthis.klass.push('start');\n\t\tthis.klass.push(type);\n\n\t\tif (self.matchMedia('prefers-reduced-motion:reduce').matches)\n\t\t\tthis.klass.push('reduce');\n\n\t\tif (typeof icon == 'string')\n\t\t\tthis.klass = this.klass.concat(icon.split(' '));\n\n\t\t// création du fragment\n\t\tthis.t0 = document.createDocumentFragment();\n\n\t\t// surveillance des touches et du navigateur\n\t\tdocument.addEventListener('keydown', this.onKey);\n\t\tself.addEventListener('beforeunload', this.onCloseBrowser);\n\t\tself.addEventListener('DOMMouseScroll', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('mousewheel', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('touchmove', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('resize', this.onResizeBrowser);\n\n\t\t// restriction de la navigation\n\t\tif (apijs.config.dialog.restrictNavigation)\n\t\t\tdocument.querySelectorAll(this.ti).forEach(function (elem) { elem.setAttribute('tabindex', '-1'); });\n\n\t\treturn this;\n\t};\n\n\tthis.show = function (focus) { // todo\n\n\t\t// design\n\t\tthis.onResizeBrowser();\n\t\tthis.onFullscreen();\n\n\t\tif ((this.height > 0) && !this.has('photo', 'video'))\n\t\t\tthis.t2.style.minHeight = this.height + 'px';\n\n\t\t// affichage du dialogue sans/sans/avec transitions CSS\n\t\tvar old = apijs.html('#Dialog');\n\t\tif (old) {\n\t\t\tthis.toggle('start', 'ready');\n\t\t\tthis.t1 = old;\n\t\t\tthis.t1.appendChild(this.t0.firstChild.firstChild);\n\t\t\tthis.t1.setAttribute('class', this.t2.getAttribute('class'));\n\t\t}\n\t\telse if (this.has('notransition')) {\n\t\t\tthis.toggle('start', 'ready');\n\t\t\tdocument.querySelector('body').appendChild(this.t0);\n\t\t}\n\t\telse {\n\t\t\tdocument.querySelector('body').appendChild(this.t0);\n\t\t\tself.setTimeout(function () { apijs.dialog.toggle('start', 'ready'); }, 12);\n\t\t}\n\n\t\t// fermeture des popups au clic\n\t\tif (apijs.config.dialog.closeOnClick && !this.has('progress', 'waiting', 'lock'))\n\t\t\tdocument.addEventListener('click', this.actionClose);\n\n\t\t// passage en plein écran\n\t\tif (this.has('photo', 'video')) {\n\n\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\tdocument.addEventListener('webkitfullscreenchange', this.onFullscreen);\n\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\tdocument.addEventListener('fullscreenchange', this.onFullscreen);\n\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\tdocument.addEventListener('mozfullscreenchange', this.onFullscreen);\n\t\t}\n\n\t\t// auto-focus\n\t\tif (focus === true)\n\t\t\tself.setTimeout(function () { apijs.html('input:not([readonly]),textarea:not([readonly]),select:not([disabled])').focus(); }, 12);\n\t\telse if (typeof focus == 'string')\n\t\t\tapijs.html(focus).focus();\n\n\t\treturn true;\n\t};\n\n\tthis.clear = function (isAll) { // todo\n\n\t\tif (isAll && this.xhr) {\n\t\t\tthis.callback = null; // très important\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\t// surveillance des touches et du navigateur (depuis initDialog)\n\t\tdocument.removeEventListener('keydown', this.onKey);\n\t\tself.removeEventListener('beforeunload', this.onCloseBrowser);\n\t\tself.removeEventListener('DOMMouseScroll', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('mousewheel', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('touchmove', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('resize', this.onResizeBrowser);\n\n\t\t// restriction de la navigation (depuis initDialog)\n\t\tif (apijs.config.dialog.restrictNavigation)\n\t\t\tdocument.querySelectorAll(this.ti).forEach(function (elem) { elem.removeAttribute('tabindex'); });\n\n\t\t// fermeture des popups au clic (depuis showDialog)\n\t\tif (apijs.config.dialog.closeOnClick)\n\t\t\tdocument.removeEventListener('click', this.actionClose);\n\n\t\t// spécial\n\t\tif (this.has('photo', 'video')) {\n\n\t\t\t// pour ne pas déclencher les fonctions\n\t\t\t// supprime tous les ontruc et les src\n\t\t\tif (this.has('video') && !this.has('videoiframe')) {\n\t\t\t\tthis.t2.querySelectorAll('video, source, track').forEach(function (elem) {\n\t\t\t\t\tfor (var name in elem) {\n\t\t\t\t\t\tif (name.indexOf('on') === 0)\n\t\t\t\t\t\t\telem[name] = null;\n\t\t\t\t\t}\n\t\t\t\t\telem.removeAttribute('src');\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.media.videoPlayer = null;\n\t\t\tthis.media.imageLoader = null;\n\n\t\t\t// passage en plein écran (depuis showDialog)\n\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\tdocument.removeEventListener('webkitfullscreenchange', this.onFullscreen);\n\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\tdocument.removeEventListener('fullscreenchange', this.onFullscreen);\n\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\tdocument.removeEventListener('mozfullscreenchange', this.onFullscreen);\n\t\t}\n\t\t// mémorise la hauteur du dialogue\n\t\telse {\n\t\t\tthis.height = parseFloat(self.getComputedStyle(this.t2).height);\n\t\t}\n\n\t\t// supprime le dialogue\n\t\tif (isAll) {\n\t\t\tthis.toggle('ready', 'end');\n\t\t\tthis.t1.remove();\n\t\t}\n\t\telse {\n\t\t\twhile (this.t1.firstChild)\n\t\t\t\tthis.t1.firstChild.remove();\n\t\t}\n\n\t\t// réinitialise toutes les variables (sauf ft/ti/ns)\n\t\tthis.klass = [];\n\t\tif (isAll) {\n\t\t\tthis.height = 0;\n\t\t\tthis.scroll = 0; // time\n\t\t\tthis.callback = null;\n\t\t\tthis.args = null;\n\t\t\tthis.xhr = null;\n\t\t}\n\t\tthis.media = null;\n\t\tthis.t0 = null; // fragment\n\t\tthis.t1 = null; // div id=apijsDialog\n\t\tthis.t2 = null; // div/form id=apijsBox\n\t\tthis.a = null;\n\t\tthis.b = null;\n\t\tthis.c = null;\n\t\tthis.d = null;\n\n\t\treturn true;\n\t};\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return this)\n\n\tthis.htmlParent = function (action, submit, drag) {\n\n\t\tthis.t1 = document.createElement('div');\n\t\tthis.t1.setAttribute('id', 'apijsDialog');\n\n\t\tif (typeof drag == 'string') {\n\n\t\t\tthis.t1.setAttribute('ondragenter', drag);\n\t\t\tthis.t1.setAttribute('ondragleave', drag);\n\t\t\tthis.t1.setAttribute('ondragover', drag);\n\t\t\tthis.t1.setAttribute('ondrop', drag);\n\n\t\t\tthis.a = document.createElement('p');\n\t\t\tthis.a.setAttribute('class', 'drag');\n\t\t\tthis.a.appendChild(apijs.i18n.translateNode(127));\n\t\t\tthis.t1.appendChild(this.a);\n\t\t}\n\n\t\tif (typeof action == 'string') {\n\t\t\tthis.t2 = document.createElement('form');\n\t\t\tthis.t2.setAttribute('action', action);\n\t\t\tthis.t2.setAttribute('method', 'post');\n\t\t\tthis.t2.setAttribute('enctype', 'multipart/form-data');\n\t\t\tthis.t2.setAttribute('onsubmit', 'return ' + submit);\n\t\t}\n\t\telse {\n\t\t\tthis.t2 = document.createElement('div');\n\t\t}\n\n\t\tthis.t2.setAttribute('id', 'apijsBox');\n\t\tthis.t1.appendChild(this.t2);\n\t\tthis.t0.appendChild(this.t1);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlContent = function (title, text) {\n\n\t\tif (title.length > 0) {\n\t\t\tthis.a = document.createElement('h1');\n\t\t\tthis.a.innerHTML = title.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\[/g, '<').replace(/]/g, '>');\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\tif (text.length > 0) {\n\t\t\tthis.a = document.createElement('div');\n\t\t\tthis.a.setAttribute('class', 'bbcode');\n\t\t\tif (text[0] !== '[') text = '[p]' + text + '[/p]';\n\t\t\tthis.a.innerHTML = text.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\[/g, '<').replace(/]/g, '>');\n\t\t\tthis.a.querySelectorAll('a.popup').forEach(function (elem) { elem.addEventListener('click', apijs.openTab); });\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnOk = function () {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'confirm');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(102));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnConfirm = function (type, click) {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', type);\n\t\t\tthis.b.setAttribute('class', 'confirm');\n\t\t\tif (type !== 'submit') this.b.setAttribute('onclick', click);\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(104));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'cancel');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(103));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnNavigation = function () {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'navigation noplaying');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('disabled', 'disabled');\n\t\t\tthis.b.setAttribute('class', 'prev');\n\t\t\tthis.b.setAttribute('id', 'apijsPrev');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.slideshow.actionPrev();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t//this.c.appendChild(apijs.i18n.translateNode(106));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('disabled', 'disabled');\n\t\t\tthis.b.setAttribute('class', 'next');\n\t\t\tthis.b.setAttribute('id', 'apijsNext');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.slideshow.actionNext();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t//this.c.appendChild(apijs.i18n.translateNode(107));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnClose = function (close) {\n\n\t\tif (close !== false) {\n\n\t\t\tthis.a = document.createElement('div');\n\t\t\tthis.a.setAttribute('class', 'close noplaying');\n\n\t\t\t\tthis.b = document.createElement('button');\n\t\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\t\tthis.b.setAttribute('class', 'close');\n\t\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(105));\n\n\t\t\t\tthis.b.appendChild(this.c);\n\n\t\t\tthis.a.appendChild(this.b);\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlUpload = function (input, isMultiple) {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns upload');\n\n\t\t\tthis.b = document.createElement('input');\n\t\t\tthis.b.setAttribute('type', 'file');\n\t\t\tthis.b.setAttribute('name', input);\n\t\t\tthis.b.setAttribute('id', 'apijsFile');\n\t\t\tif (isMultiple) this.b.setAttribute('multiple', 'multiple');\n\t\t\tthis.b.setAttribute('onchange', 'apijs.upload.actionChoose(this);');\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'browse');\n\t\t\tthis.b.setAttribute('onclick', 'this.previousSibling.click();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(isMultiple ? 109 : 108));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('div');\n\t\t\tthis.b.setAttribute('class', 'filenames scrollable');\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlSvgProgress = function () {\n\n\t\tthis.a = document.createElement('span');\n\t\tthis.a.setAttribute('class', 'info');\n\t\tthis.t2.appendChild(this.a);\n\n\t\tthis.a = document.createElement('svg');\n\t\tthis.a.setAttribute('id', 'apijsProgress');\n\n\t\t\tthis.b = document.createElement('rect');\n\t\t\tthis.b.setAttribute('class', 'auto');\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlSvgLoader = function (isDelayed) {\n\n\t\tthis.a = document.createElementNS(this.ns, 'svg');\n\t\tthis.a.setAttribute('class', 'loader');\n\n\t\t\tthis.b = document.createElementNS(this.ns, 'path');\n\t\t\tif (isDelayed !== false) this.b.setAttribute('style', 'opacity:0;');\n\t\t\tthis.b.setAttribute('d', 'M75.4 126.63a11.43 11.43 0 0 1-2.1-22.65 40.9 40.9 0 0 0 30.5-30.6 11.4 11.4 0 1 1 22.27 4.87h.02a63.77 63.77 0 0 1-47.8 48.05v-.02a11.38 11.38 0 0 1-2.93.37z');\n\n\t\t\t\tthis.c = document.createElementNS(this.ns, 'animateTransform');\n\t\t\t\tthis.c.setAttribute('attributeName', 'transform');\n\t\t\t\tthis.c.setAttribute('type', 'rotate');\n\t\t\t\tthis.c.setAttribute('from', '0 64 64');\n\t\t\t\tthis.c.setAttribute('to', '360 64 64');\n\t\t\t\tthis.c.setAttribute('dur', '5s');\n\t\t\t\tthis.c.setAttribute('repeatCount', 'indefinite');\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\t\t\tthis.c = document.createElementNS(this.ns, 'animate');\n\t\t\t\tthis.c.setAttribute('attributeName', 'opacity');\n\t\t\t\tthis.c.setAttribute('to', '1');\n\t\t\t\tthis.c.setAttribute('dur', '0.01s');\n\t\t\t\tthis.c.setAttribute('begin', '1s');\n\t\t\t\tthis.c.setAttribute('fill', 'freeze');\n\n\t\t\tif (isDelayed !== false) this.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlMedia = function (url, name, date, legend) {\n\n\t\tthis.a = document.createElement('dl');\n\t\tthis.a.setAttribute('class', 'media');\n\n\t\t\tthis.b = document.createElement('dt');\n\n\t\t\tif (this.has('photo')) {\n\t\t\t\tthis.media = document.createElement('img');\n\t\t\t\tthis.media.setAttribute('alt', legend.replace('\"', ''));\n\t\t\t}\n\t\t\telse if (url.indexOf('iframe') > 0) {\n\t\t\t\tthis.media = document.createElement('iframe');\n\t\t\t\tthis.media.setAttribute('type', 'text/html');\n\t\t\t\tthis.media.setAttribute('scrolling', 'no');\n\t\t\t\tthis.media.setAttribute('src', url);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.media = document.createElement('video');\n\t\t\t\tthis.media.setAttribute('controls', 'controls');\n\t\t\t\tthis.media.setAttribute('preload', 'metadata');\n\t\t\t}\n\n\t\t\tthis.media.setAttribute('id', 'apijsMedia');\n\t\t\tthis.b.appendChild(this.media);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('dd');\n\t\t\tthis.b.setAttribute('class', 'nomobile noplaying');\n\n\t\t\tif ((name !== 'false') || (date !== 'false')) {\n\n\t\t\t\tvar fileid = url.slice(url.lastIndexOf('/') + 1);\n\t\t\t\tthis.c = document.createElement('span');\n\n\t\t\t\t// name + date\n\t\t\t\tif ((name !== 'false') && (name !== 'auto') && (date !== 'false'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(name + ' (' + date + ') '));\n\t\t\t\t// name\n\t\t\t\telse if ((name !== 'false') && (name !== 'auto'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(name + ' '));\n\t\t\t\t// auto name + date\n\t\t\t\telse if ((name === 'auto') && (date !== 'false'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(fileid + ' (' + date + ') '));\n\t\t\t\t// auto name\n\t\t\t\telse if (name === 'auto')\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(fileid + ' '));\n\t\t\t\t// date\n\t\t\t\telse if (date !== 'false')\n\t\t\t\t\tthis.c.appendChild(document.createTextNode('(' + date + ') '));\n\n\t\t\t\tthis.b.appendChild(this.c);\n\t\t\t}\n\n\t\t\tthis.b.appendChild(document.createTextNode(legend));\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\t// au choix : photo / vidéo avec iframe / vidéo avec lecteur / vidéo simple\n\t\t// lecteur créé v5.2 / supprimé v5.3 / refait v6.0 / extrait v6.6\n\t\tif (this.has('photo')) {\n\t\t\tthis.media.imageLoader = new Image();\n\t\t\tthis.media.imageLoader.src = url;\n\t\t\tthis.media.imageLoader.onload = this.onMediaLoad;\n\t\t\tthis.media.imageLoader.onerror = this.onMediaLoad;\n\t\t}\n\t\telse if (url.indexOf('iframe') > 0) {\n\t\t\tthis.media.onload = function (ev) {\n\t\t\t\tthis.onIframeLoad(this.media);\n\t\t\t\tthis.onMediaLoad(ev);\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\t\t\tthis.add('videoiframe');\n\t\t}\n\t\telse if (apijs.startPlayer(this.media, url)) {\n\t\t\tthis.add('apijsvideoplayer');\n\t\t}\n\t\telse {\n\t\t\tthis.c = document.createElement('source');\n\t\t\tthis.c.setAttribute('src', url);\n\t\t\tthis.c.onerror = this.onMediaLoad;\n\t\t\tthis.media.appendChild(this.c);\n\t\t\tthis.media.ondurationchange = this.onMediaLoad;\n\t\t\tthis.media.onerror = this.onMediaLoad;\n\t\t\tthis.add('videosource');\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlHelp = function (isSlideshow, isVideo) {\n\n\t\tvar items, item, keys = [\n\t\t\tisSlideshow ? ['start', 149, 141] : [], // début/fin\n\t\t\tisSlideshow ? ['left', 'right', 142] : [],\n\t\t\tisVideo ? ['bottom', 'topk', 144] : [],\n\t\t\tisVideo ? ['minus', 'plus', 145] : [],\n\t\t\tisVideo ? ['M', 146] : [],\n\t\t\tisVideo ? ['P', 143] : [],\n\t\t\t['F11', 147],\n\t\t\t[150, 148] // échap\n\t\t];\n\n\t\tthis.a = document.createElement('ul');\n\t\tthis.a.setAttribute('class', 'kbd nomobile nofullscreen');\n\n\t\twhile (items = keys.shift()) {\n\n\t\t\tif (items.length > 0) {\n\n\t\t\t\tthis.b = document.createElement('li');\n\n\t\t\t\twhile (item = items.shift()) {\n\t\t\t\t\tif (items.length > 0) {\n\t\t\t\t\t\tthis.c = document.createElement('kbd');\n\t\t\t\t\t\tif (['M', 'P', 'F11'].has(item))\n\t\t\t\t\t\t\tthis.c.appendChild(document.createTextNode(item));\n\t\t\t\t\t\telse if (typeof item == 'string')\n\t\t\t\t\t\t\tthis.c.setAttribute('class', item);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(item));\n\t\t\t\t\t\tthis.b.appendChild(this.c);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.b.appendChild(apijs.i18n.translateNode(item));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.a.appendChild(this.b);\n\t\t\t}\n\t\t}\n\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlIframe = function (url) {\n\n\t\tthis.a = document.createElement('iframe');\n\t\tthis.a.setAttribute('src', url);\n\t\tthis.a.setAttribute('class', 'loading');\n\t\tthis.a.setAttribute('onload', 'apijs.dialog.onIframeLoad(this);');\n\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n};","/**\n * Created J/13/05/2010\n * Updated V/01/01/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.slideshow = function () {\n\n\t\"use strict\";\n\tthis.current = null;\n\n\n\t// AFFICHAGE DE LA BOÎTE DE DIALOGUE (public return void|boolean)\n\n\tthis.init = function () {\n\n\t\tvar i, j, elem, ids = apijs.config.slideshow.ids, hoverload = false;\n\n\t\tfor (i = 0; elem = apijs.html(ids + '.' + i, true); i++) {\n\n\t\t\thoverload = elem.classList.contains('hoverload');\n\n\t\t\tfor (j = 0; elem = apijs.html(ids + '.' + i + '.' + j, true); j++) {\n\t\t\t\telem.addEventListener('click', this.show);\n\t\t\t\tif (hoverload)\n\t\t\t\t\telem.addEventListener('mouseover', this.show);\n\t\t\t}\n\n\t\t\tif (elem = apijs.html(ids + '.' + i + '.99999', true))\n\t\t\t\telem.addEventListener('click', this.show);\n\t\t}\n\n\t\tthis.onPopState();\n\t};\n\n\tthis.onPopState = function () {\n\n\t\t// \\\\ au lieu de \\ sinon Bad or unnecessary escaping\n\t\tif (new RegExp('#(' + apijs.config.slideshow.ids + '[\\-\\\\.]\\\\d+[\\-\\\\.]\\\\d+)').test(self.location.href)) {\n\t\t\tvar id = RegExp.$1.replace(/-/g, '.');\n\t\t\tif (apijs.html(id, true) && !apijs.dialog.has('slideshow')) // Chrome 31 et Opera 19 passent 2 fois sans le !has\n\t\t\t\tapijs.slideshow.show(id, false);\n\t\t}\n\t\telse if (apijs.slideshow.current) {\n\t\t\tapijs.dialog.actionClose();\n\t\t}\n\t};\n\n\tthis.show = function (ev, push) { // todo\n\n\t\tvar source, show = false, media = {}, src, srcset, total, hash;\n\n\t\t// recherche de la source (élément a)\n\t\t// recherche des informations du média (1/4, id)\n\t\t// la source est soit une miniature (ev=click/mouseover/stringId) soit l'image principale (ev=click)\n\t\tif (typeof ev == 'string') {\n\t\t\tshow = true;\n\t\t\tsource = apijs.html(ev, true);\n\t\t\tmedia.id = ev;\n\t\t}\n\t\telse {\n\t\t\tev.preventDefault();\n\t\t\tsource = ev.target;\n\t\t\twhile (source.nodeName !== 'A')\n\t\t\t\tsource = source.parentNode;\n\n\t\t\t// stop sur miniature déjà à jour en mode gallery\n\t\t\tif ((ev.type === 'mouseover') && source.classList.contains('current'))\n\t\t\t\treturn false;\n\n\t\t\tmedia.id = source.getAttribute('id');\n\t\t}\n\n\t\t// recherche des informations du média (2/4, prefix|number|gallery)\n\t\tmedia.prefix = apijs.config.slideshow.ids + '.' + media.id.split('.')[1];\n\t\tmedia.number = parseInt(media.id.split('.')[2], 10);\n\t\tmedia.gallery = apijs.html(media.prefix + '.99999', true);\n\n\t\t// SI SOURCE N'EST PAS L'IMAGE PRINCIPALE DU MODE GALLERY\n\t\t// marque la source avec la class current\n\t\t// prend soin de supprimer les anciennes class current\n\t\t// v5.1 soit sur le lien (avant sur l'image elle même), soit sur le dl\n\t\tif (media.number !== 99999) {\n\n\t\t\tvar links = apijs.html(media.prefix, true).querySelectorAll('a[id][type]'),\n\t\t\t conts = apijs.html(media.prefix, true).querySelectorAll('dl');\n\n\t\t\tif (media.gallery || (links.length !== conts.length)) {\n\t\t\t\tlinks.forEach(function (elem) { elem.classList.remove('current'); });\n\t\t\t\tsource.setAttribute('class', 'current');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconts.forEach(function (elem) { elem.classList.remove('current'); });\n\t\t\t\tsource.parentNode.parentNode.setAttribute('class', 'current');\n\t\t\t}\n\t\t}\n\n\t\t// UNIQUEMENT EN MODE GALLERY\n\t\t// recherche des informations du média (3/4, [number]|config)\n\t\t// réaffecte la source sur la miniature et non sur l'image principale SI SOURCE = IMAGE PRINCIPALE\n\t\t// réaffecte le numéro du média sur la miniature et non sur l'image principale SI SOURCE = IMAGE PRINCIPALE\n\t\t// supprime l'adresse de l'image principale de la configuration du média (media.config = url|name|date|legend)\n\t\t// met à jour l'image principale SAUF SI SOURCE = IMAGE PRINCIPALE (puisque tout est déjà correct)\n\t\tif (media.gallery) {\n\n\t\t\tif (media.number === 99999) {\n\t\t\t\tshow = true;\n\t\t\t\tsource = (media.gallery.hasAttribute('class')) ? media.gallery.getAttribute('class') : media.prefix + '.0';\n\t\t\t\tsource = apijs.html(source, true);\n\t\t\t\tmedia.number = parseInt(source.getAttribute('id').split('.')[2], 10);\n\t\t\t\tmedia.id = media.id.replace(99999, media.number);\n\t\t\t}\n\n\t\t\tmedia.config = source.querySelector('input').getAttribute('value').split('|');\n\n\t\t\tsrc = media.config.shift();\n\t\t\tif (src.indexOf(';') > 0) {\n\t\t\t\tsrc = src.split(';');\n\t\t\t\tsrcset = src[1].trim();\n\t\t\t\tsrc = src[0].trim();\n\t\t\t}\n\n\t\t\tmedia.gallery.setAttribute('href', source.getAttribute('href'));\n\t\t\tmedia.gallery.querySelector('img').setAttribute('src', src);\n\t\t\tmedia.gallery.querySelector('img').setAttribute('srcset', srcset ? srcset : '');\n\t\t\tmedia.gallery.querySelector('img').setAttribute('alt', source.querySelector('img').getAttribute('alt'));\n\t\t\tmedia.gallery.setAttribute('class', media.id);\n\t\t}\n\t\t// UNIQUEMENT EN MODE ALBUM\n\t\t// recherche des informations du média (3/4, config)\n\t\telse {\n\t\t\tshow = true;\n\t\t\tmedia.config = source.querySelector('input').getAttribute('value').split('|');\n\t\t}\n\n\t\t// recherche des informations du média (4/4, url|type|styles)\n\t\t// défini le type de dialogue à partir du mimetype du lien de la source si cela est possible\n\t\tmedia.url = source.getAttribute('href');\n\t\tmedia.type = source.getAttribute('type').substr(0, 5).replace('image', 'dialogPhoto').replace('video', 'dialogVideo');\n\t\tmedia.type = (media.type.indexOf('dialog') === 0) ? media.type : 'dialogPhoto';\n\t\tmedia.styles = apijs.html(media.prefix, true).getAttribute('class').replace(/gallery|album/g, '').trim();\n\n\t\t// demande l'affichage du dialogue\n\t\t// lors d'un clic sur l'image principale du mode gallery\n\t\t// ou lors d'un clic sur les miniatures en mode album\n\t\t// ou lors d'un appel direct\n\t\tif (show) {\n\n\t\t\tapijs.dialog[media.type](media.url, media.config[0], media.config[1], media.config[2], media.styles);\n\n\t\t\ttotal = apijs.html(media.prefix, true).querySelectorAll('a[id][type]').length - (media.gallery ? 2 : 1);\n\t\t\tapijs.slideshow.current = {\n\t\t\t\tnumber: media.number,\n\t\t\t\tfirst: media.prefix + '.0',\n\t\t\t\tprev: (media.number > 0) ? media.prefix + '.' + (media.number - 1) : null,\n\t\t\t\tnext: (media.number < total) ? media.prefix + '.' + (media.number + 1) : null,\n\t\t\t\tlast: media.prefix + '.' + total,\n\t\t\t\ttotal: total\n\t\t\t};\n\n\t\t\t// boutons précédent et suivant\n\t\t\tif (apijs.slideshow.current.prev)\n\t\t\t\tapijs.html('#Prev').removeAttribute('disabled');\n\t\t\tif (apijs.slideshow.current.next)\n\t\t\t\tapijs.html('#Next').removeAttribute('disabled');\n\n\t\t\t// gestion de l'historique\n\t\t\t// met à jour l'ancre uniquement si l'utilisateur ne joue pas avec son historique\n\t\t\tif (apijs.config.slideshow.anchor && (typeof history.pushState == 'function') && ((typeof push == 'boolean') ? push : true)) {\n\t\t\t\thash = self.location.href;\n\t\t\t\thash = (hash.indexOf('#') > 0) ? hash.slice(0, hash.indexOf('#')) : hash;\n\t\t\t\thash += '#' + (media.prefix + '.' + ((media.number === 99999) ? 0 : media.number)).replace(/\\./g,'-');\n\t\t\t\thistory.pushState({}, '', hash);\n\t\t\t}\n\t\t}\n\n\t\treturn show;\n\t};\n\n\n\t// GESTION DES INTERACTIONS (public return boolean)\n\n\tthis.actionFirst = function () {\n\n\t\tif (this.current && (this.current.number > 0) && (this.current.number <= this.current.total))\n\t\t\treturn this.show(this.current.first);\n\n\t\treturn false;\n\t};\n\n\tthis.actionPrev = function () {\n\n\t\tif (this.current && this.current.prev && (this.current.number > 0))\n\t\t\treturn this.show(this.current.prev);\n\n\t\treturn false;\n\t};\n\n\tthis.actionNext = function () {\n\n\t\tif (this.current && this.current.next && (this.current.number < this.current.total))\n\t\t\treturn this.show(this.current.next);\n\n\t\treturn false;\n\t};\n\n\tthis.actionLast = function () {\n\n\t\tif (this.current && (this.current.number >= 0) && (this.current.number < this.current.total))\n\t\t\treturn this.show(this.current.last);\n\n\t\treturn false;\n\t};\n};","/**\n * Created L/13/04/2009\n * Updated D/18/07/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.upload = function () {\n\n\t\"use strict\";\n\tthis.title = null;\n\tthis.action = null;\n\tthis.input = null;\n\tthis.onemax = 0; // taille d'un seul fichier\n\tthis.allmax = 0; // taille de tous les fichiers\n\tthis.exts = null;\n\tthis.callback = null;\n\tthis.args = null;\n\tthis.icon = null;\n\n\tthis.files = [];\n\tthis.start = 0; // time\n\tthis.end = 0; // time\n\n\n\t// AFFICHAGE DE LA BOÎTE DE DIALOGUE (public return boolean)\n\n\tthis.sendFile = function (title, action, input, onemax, exts, callback, args, icon) {\n\n\t\tvar res = this.sendFiles(title, action, input, onemax, 0, exts, callback, args, icon);\n\t\tif (!res) console.error('apijs.upload.sendFile invalid arguments', arguments);\n\n\t\treturn res;\n\t};\n\n\tthis.sendFiles = function (title, action, input, onemax, allmax, exts, callback, args, icon) {\n\n\t\tthis.files = [];\n\t\tif (title !== true) {\n\t\t\tthis.title = title;\n\t\t\tthis.action = action;\n\t\t\tthis.input = input;\n\t\t\tthis.onemax = onemax;\n\t\t\tthis.allmax = allmax;\n\t\t\tthis.exts = (typeof exts == 'string') ? exts.split(',') : ['*'];\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\tthis.icon = icon;\n\t\t}\n\n\t\tif ((typeof this.title == 'string') && (typeof this.action == 'string') && (typeof this.input == 'string') &&\n\t\t (typeof this.onemax == 'number') && (typeof this.allmax == 'number') && (typeof this.callback == 'function')) {\n\n\t\t\tvar text, multiple = this.allmax > 0;\n\n\t\t\tif (this.exts.join() === '*')\n\t\t\t\ttext = apijs.i18n.translate(161);\n\t\t\telse if (this.exts.length === 1)\n\t\t\t\ttext = apijs.i18n.translate(162, this.exts.join());\n\t\t\telse\n\t\t\t\ttext = apijs.i18n.translate(163, this.exts.slice(0, -1).join(', '), this.exts.slice(-1));\n\n\t\t\ttext += '[br]' + apijs.i18n.translate(\n\t\t\t\tmultiple ? 165 : 164, // clef de traduction\n\t\t\t\tapijs.formatNumber(this.onemax), // taille d'un fichier\n\t\t\t\tmultiple ? apijs.formatNumber(this.allmax) : '' // taille de tous les fichiers\n\t\t\t).replace('|', '[br]');\n\n\t\t\treturn apijs.dialog.dialogFormUpload(this.title, text, this.action, this.input, multiple, this.icon);\n\t\t}\n\n\t\tif ((typeof this.allmax != 'number') || (this.allmax > 0))\n\t\t\tconsole.error('apijs.upload.sendFiles invalid arguments', arguments);\n\n\t\treturn false;\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private return void)\n\n\tthis.actionDrag = function (ev) {\n\n\t\tif (ev.type === 'dragenter') {\n\t\t\tapijs.dialog.add('drag');\n\t\t}\n\t\telse if (ev.type === 'dragleave') {\n\t\t\tapijs.dialog.remove('drag');\n\t\t}\n\t\telse if (ev.dataTransfer && ev.dataTransfer.files && (ev.dataTransfer.files.length > 0)) {\n\t\t\tthis.actionChoose(ev.dataTransfer);\n\t\t\tapijs.dialog.remove('drag');\n\t\t}\n\n\t\tev.stopPropagation();\n\t\tev.preventDefault();\n\t};\n\n\tthis.actionChoose = function (elem) {\n\n\t\tvar html = [], size = 0, btn = apijs.html('button.confirm');\n\t\tthis.files = [];\n\n\t\tif (this.exts) {\n\n\t\t\t// 1048576 octet = 1 Mo\n\t\t\tArray.prototype.forEach.call((this.allmax > 0) ? elem.files : Array.prototype.slice.call(elem.files, 0, 1), function (file, idx) {\n\n\t\t\t\tvar txt = file.size / 1048576;\n\t\t\t\ttxt = apijs.formatNumber((txt < 0.01) ? 0.01 : txt);\n\t\t\t\ttxt = ((this.allmax > 0) ? '<td class=\"nb\">' + (idx + 1) + '</td>' : '') +\n\t\t\t\t\t'<td class=\"name\">' + file.name + '</td><td class=\"size\">' + apijs.i18n.translate(166, txt) + '</td>';\n\n\t\t\t\tif ((this.exts.join() !== '*') && !this.exts.has(file.name.slice(file.name.lastIndexOf('.') + 1).toLowerCase())) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(167) + '</td>';\n\t\t\t\t}\n\t\t\t\telse if (file.size > (this.onemax * 1048576)) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(168) + '</td>';\n\t\t\t\t}\n\t\t\t\telse if (file.size <= 0) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(169) + '</td>';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttxt += '<td></td>';\n\t\t\t\t\tthis.files.push(file);\n\t\t\t\t}\n\n\t\t\t\thtml.push('<tr>' + txt + '</tr>');\n\t\t\t\tsize += file.size / 1048576;\n\n\t\t\t}, this); // pour que ci-dessus this = this\n\n\t\t\t// multiple\n\t\t\tif ((this.allmax > 0) && (size >= this.allmax)) {\n\t\t\t\thtml.push('<tr class=\"tt\"><td></td><td></td><td class=\"size\">' + apijs.i18n.translate(166, apijs.formatNumber(size)) + '</td><td class=\"err\">' + apijs.i18n.translate(168) + '</td></tr>');\n\t\t\t}\n\n\t\t\t// ok ou ko\n\t\t\tapijs.html('div.filenames').innerHTML = '<table>' + html.join('') + '</table>';\n\t\t\tif (apijs.html('div.filenames .err')) {\n\t\t\t\tbtn.setAttribute('disabled', 'disabled');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtn.removeAttribute('disabled');\n\t\t\t\tbtn.focus();\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.actionConfirm = function () {\n\n\t\tif (this.files.length > 0) {\n\n\t\t\tvar form = new FormData(), xhr = new XMLHttpRequest(), tmp;\n\t\t\txhr.open('POST', this.action + ((this.action.indexOf('?') > 0) ? '&isAjax=true' : '?isAjax=true'), true);\n\n\t\t\t// token\n\t\t\tif (typeof apijs.config.upload.tokenValue == 'string') {\n\t\t\t\txhr.setRequestHeader(apijs.config.upload.tokenName, apijs.config.upload.tokenValue);\n\t\t\t\tform.append(apijs.config.upload.tokenName, apijs.config.upload.tokenValue);\n\t\t\t}\n\n\t\t\t// champs supplémentaires\n\t\t\ttmp = apijs.serialize(apijs.dialog.t2);\n\t\t\tif (tmp.length > 3) {\n\t\t\t\ttmp.split('&').forEach(function (data) {\n\t\t\t\t\tdata = data.split('=');\n\t\t\t\t\tform.append(data[0], data[1]);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// fichier(s)\n\t\t\tthis.files.forEach(function (file, idx, files) {\n\t\t\t\tform.append(((files.length > 1) && (this.input.indexOf('[') < 0)) ? this.input + '_' + idx : this.input, file);\n\t\t\t}, this); // pour que ci-dessus this = this\n\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=637002\n\t\t\t// https://stackoverflow.com/a/15491086\n\t\t\t// loadstart - When the request starts\n\t\t\t// progress - While sending and loading data\n\t\t\t// load - When the request has successfully completed even if the server hasn't responded that it finished\n\t\t\t// loadend - When the request has completed even if the server hasn't responded that it finished processing the request\n\t\t\t// error - When the request has failed\n\t\t\t// abort - When the request has been aborted (by invoking the abort method)\n\t\t\t// timeout - When the author specified timeout has passed before the request could complete\n\t\t\txhr.onreadystatechange = function (text) {\n\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\ttext = xhr.responseText.trim();\n\t\t\t\t\tif ([0, 200].has(xhr.status)) {\n\t\t\t\t\t\tself.dispatchEvent(new CustomEvent('apijsajaxresponse', { detail: { from: 'apijs.upload.send', xhr: xhr } }));\n\t\t\t\t\t\tapijs.log('upload:onreadystatechange status:200 message:' + text);\n\t\t\t\t\t\tif (text.indexOf('success-') === 0) {\n\t\t\t\t\t\t\tthis.updateTitle();\n\t\t\t\t\t\t\tthis.callback(text.slice(8), this.args);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.onError(195, text);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tapijs.log('upload:onreadystatechange status:' + xhr.status + ' message: ' + text);\n\t\t\t\t\t\tthis.onError(194, xhr.status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\n\t\t\txhr.upload.onloadstart = this.onStart.bind(this);\n\t\t\txhr.upload.onprogress = this.onProgress.bind(this);\n\t\t\txhr.upload.onload = this.onProgress.bind(this);\n\t\t\txhr.upload.onerror = this.onError.bind(this);\n\t\t\txhr.send(form);\n\t\t}\n\t\telse {\n\t\t\tapijs.html('button.browse').focus();\n\t\t}\n\n\t\treturn false; // très important\n\t};\n\n\tthis.onStart = function () {\n\n\t\tthis.start = this.end = Math.round(new Date().getTime() / 1000);\n\t\tapijs.dialog.dialogProgress(this.title, apijs.i18n.translate(125), this.icon);\n\t};\n\n\tthis.onError = function (key, txt) {\n\n\t\tthis.updateTitle();\n\n\t\tif (typeof key == 'number')\n\t\t\ttxt = '[p]' + apijs.i18n.translate(key) + '[/p] ' + txt;\n\t\telse if (typeof txt != 'string')\n\t\t\ttxt = '[p]' + apijs.i18n.translate(193) + '[/p]';\n\n\t\ttxt += '[p]' + apijs.i18n.translate(196, 'href=\"apijs://restart\" onclick=\"apijs.upload.sendFile(true); return false;\"') + '[/p]';\n\t\tapijs.dialog.dialogInformation(this.title, txt, (typeof this.icon == 'string') ? 'upload error ' + this.icon : 'upload error');\n\t};\n\n\tthis.onProgress = function (ev) {\n\n\t\tvar percent, key, rate, time, elapsedTime, totalTime, currentTime = Math.round(new Date().getTime() / 1000), mins;\n\n\t\t// Cherche à actualiser la barre de progression toutes les 2 secondes (uniquement de 1 à 99%)\n\t\t// affiche le pourcentage, la vitesse à partir de 25 secondes, le temps restant à partir de 40 secondes ET 90 secondes de temps total\n\t\tif (ev.lengthComputable && (ev.type === 'progress') && (currentTime >= (this.end + 2))) {\n\n\t\t\tthis.end = currentTime;\n\n\t\t\t// Math.floor = entier inférieur, Math.ceil = entier supérieur, Math.round = au mieux\n\t\t\t// ev.loaded = nombre d'octet envoyé sur le serveur\n\t\t\t// ev.total = nombre d'octet à envoyer sur le serveur\n\t\t\t// pourcentage = nombre d'octet envoyé * 100 / nombre d'octet à envoyer\n\t\t\tpercent = Math.floor((ev.loaded * 100) / ev.total);\n\n\t\t\tif ((percent > 0) && (percent < 100)) {\n\n\t\t\t\tthis.updateTitle(percent);\n\n\t\t\t\t// temps écoulé = maintenant - départ\n\t\t\t\t// temps total = temps écoulé * 100 / pourcentage + 10 secondes\n\t\t\t\telapsedTime = currentTime - this.start;\n\t\t\t\ttotalTime = elapsedTime * 100 / percent + 10;\n\n\t\t\t\tif (elapsedTime > 24) {\n\n\t\t\t\t\t// temps restant = temps total - temps écoulé\n\t\t\t\t\ttime = Math.round(totalTime - elapsedTime);\n\t\t\t\t\ttime = Math.ceil(time / 10) * 10;\n\t\t\t\t\tmins = Math.ceil(time / 60);\n\n\t\t\t\t\t// vitesse = taille téléchargé / temps écoulé / 1024\n\t\t\t\t\trate = Math.round(ev.loaded / elapsedTime / 1024);\n\n\t\t\t\t\tif ((elapsedTime < 40) || (totalTime < 90)) { key = 184; time = null; } // \"§% - § ko/s\"\n\t\t\t\t\telse if (mins > 1) { key = 181; time = mins; } // \"§% - § ko/s - § minutes restantes\"\n\t\t\t\t\telse if (time > 50) { key = 182; time = 1; } // \"§% - § ko/s - § minute restante\"\n\t\t\t\t\telse { key = 183; } // \"§% - § ko/s - § secondes restantes\"\n\t\t\t\t}\n\n\t\t\t\tthis.updateProgress(percent, key, rate, time);\n\t\t\t}\n\t\t}\n\t\t// Cherche à actualiser la barre de progression lorsque l'envoi du fichier est terminé (donc à 100%)\n\t\t// affiche le pourcentage, le temps total à partir de 20 secondes, la vitesse si possible\n\t\telse if (ev.type === 'load') {\n\n\t\t\t// temps total = temps actuel - temps du départ\n\t\t\ttime = Math.round(new Date().getTime() / 1000) - this.start;\n\t\t\tmins = Math.ceil(time / 60);\n\n\t\t\t// vitesse = taille total / temps total / 1024\n\t\t\trate = Math.round(ev.loaded / time / 1024);\n\n\t\t\tif ((rate > 0) && (rate !== Infinity)) {\n\t\t\t\tif (mins > 1) { key = 185; time = mins; } // \"§% - à § ko/s en § minutes\"\n\t\t\t\telse if (time > 50) { key = 186; time = 1; } // \"§% - à § ko/s en § minute\"\n\t\t\t\telse if (time > 20) { key = 187; } // \"§% - à § ko/s en § secondes\"\n\t\t\t\telse { key = 188; time = null; } // \"§% - à § ko/s\"\n\t\t\t}\n\t\t\telse {\n\t\t\t\trate = null; time = null; // 100%\n\t\t\t}\n\n\t\t\tthis.updateTitle(100);\n\t\t\tthis.updateProgress(100, key, rate, time);\n\t\t}\n\t};\n\n\tthis.updateProgress = function (percent, key, rate, time) {\n\n\t\tvar rect = apijs.html('rect'), text = apijs.html('span.info'), data;\n\n\t\tif (percent > 99) {\n\t\t\tdata = '100%';\n\t\t\trect.setAttribute('class', 'end');\n\t\t\trect.style.width = '';\n\t\t\tvar elem = apijs.html('p');\n\t\t\telem.setAttribute('data-old', elem.textContent);\n\t\t\telem.setAttribute('data-new', apijs.i18n.translate(126));\n\t\t\telem.setAttribute('class', 'anim');\n\t\t\telem.textContent = '';\n\t\t}\n\t\telse {\n\t\t\trect.style.width = data = percent + '%';\n\t\t\tif (rect.hasAttribute('class'))\n\t\t\t\trect.removeAttribute('class');\n\t\t}\n\n\t\tif ((typeof key == 'number') && (typeof rate == 'number') && (typeof time == 'number'))\n\t\t\tdata = apijs.i18n.translate(key, percent, apijs.formatNumber(rate, false), time);\n\t\telse if ((typeof key == 'number') && (typeof rate == 'number'))\n\t\t\tdata = apijs.i18n.translate(key, percent, apijs.formatNumber(rate, false));\n\n\t\ttext.textContent = data;\n\t};\n\n\tthis.updateTitle = function (percent) {\n\n\t\tif (typeof percent == 'number') {\n\t\t\tdocument.title = (/^\\d{1,3}% - /.test(document.title)) ?\n\t\t\t\tpercent + '% - ' + document.title.slice(document.title.indexOf(' - ') + 3) : percent + '% - ' + document.title;\n\t\t}\n\t\telse if (/^\\d{1,3}% - /.test(document.title)) {\n\t\t\tdocument.title = document.title.slice(document.title.indexOf(' - ') + 3);\n\t\t}\n\t};\n};"],"names":["Array","prototype","has","needle","key","hasOwnProperty","this","window","NodeList","forEach","callback","that","i","length","call","apijs","core","version","config","lang","debug","dialog","closeOnClick","restrictNavigation","player","slideshow","ids","anchor","upload","tokenName","tokenValue","start","elem","console","info","toString","split","join","document","getElementById","Error","querySelector","getAttribute","indexOf","error","i18n","self","dispatchEvent","CustomEvent","init","querySelectorAll","startPlayer","addEventListener","onPopState","Object","keys","data","formatNumber","nb","dec","str","dgt","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","format","ignore","toFixed","replace","url","videoPlayer","parentNode","classList","add","toArray","slice","openTab","ev","preventDefault","href","open","log","txt","html","selector","id","t1","requestFullscreen","webkitFullscreenElement","webkitCancelFullScreen","mozFullScreenElement","mozCancelFullScreen","fullscreenElement","cancelFullScreen","webkitRequestFullscreen","mozRequestFullScreen","serialize","form","filter","elements","idx","name","disabled","type","options","selected","push","encodeURIComponent","value","checked","bind","cs","103","104","105","106","107","108","132","133","134","135","142","143","144","145","146","148","149","150","de","109","124","147","161","162","163","164","167","168","169","181","182","183","185","186","187","188","191","192","193","194","195","196","el","102","131","en","125","126","127","141","165","166","184","es","fr","hu","it","ja","nl","pl","pt","ptbr","ro","ru","sk","tr","uk","zh","toLowerCase","translate","word","translation","arguments","translateNode","createTextNode","apply","changeLang","select","c","root","target","t","createDocumentFragment","a","createElement","b","appendChild","textContent","attributes","attribute","setAttribute","firstChild","innerHTML","replaceChild","video","stalled","subload","autoRun","removeAttribute","onloadedmetadata","onTimeupdate","onProgress","onVideotrack","onAudiotrack","onstalled","onWaiting","onplaying","onPlay","onpause","onended","onprogress","ontimeupdate","onseeking","onseeked","onwaiting","onloadstart","oncanplay","onclick","actionPlay","onvolumechange","actionVolume","ondurationchange","onMediaLoad","onerror","htmlSvgPlayer","htmlSource","xhr","XMLHttpRequest","onreadystatechange","readyState","detail","from","childNodes","abort","status","nbv","nbt","responseText","trim","shift","htmlOption","htmlTrack","updateSelect","textTracks","send","css","total","adjust","tracks","videoTracks","auto","language","selectedIndex","Math","max","actionVideotrack","audioTracks","actionAudiotrack","hh","mm","ss","time","currentTime","duration","text","isNaN","Infinity","floor","style","width","buffer","buffered","node","remove","end","networkState","paused","ended","play","pause","offsetWidth","clientX","offsetLeft","offsetParent","volume","muted","actionPosition","enabled","blur","actionTexttrack","mode","actionVideo","src","actionFullscreen","res","d","onchange","webkitFullscreenEnabled","fullscreenEnabled","mozFullScreenEnabled","onload","lastIndexOf","track","label","klass","height","scroll","args","ft","ti","ns","media","t0","t2","dialogInformation","title","icon","htmlParent","htmlContent","htmlBtnOk","show","dialogConfirmation","htmlBtnConfirm","dialogFormOptions","action","dialogFormUpload","input","multiple","htmlUpload","dialogProgress","htmlSvgProgress","dialogWaiting","htmlSvgLoader","dialogPhoto","date","legend","htmlMedia","htmlHelp","htmlBtnClose","htmlBtnNavigation","dialogVideo","dialogIframe","close","htmlIframe","dialogAjax","update","splice","toggle","search","actionClose","history","pushState","RegExp","test","location","clear","onCloseBrowser","stopPropagation","m","returnValue","onResizeBrowser","body","clientWidth","onScrollBrowser","brk","nodeName","Date","getTime","wheelDelta","contains","scrollTop","scrollHeight","offsetHeight","onScrollIframe","defaultView","innerHeight","pageYOffset","onKey","ctrlKey","keyCode","altKey","actionLast","actionFirst","actionPrev","actionNext","onFullscreen","onIframeLoad","contentWindow","parent","passive","elems","currentSrc","visibility","hasAttribute","imageLoader","actionConfirm","setTimeout","isLocked","matchMedia","matches","concat","focus","minHeight","old","isAll","removeEventListener","parseFloat","getComputedStyle","submit","drag","click","isMultiple","isDelayed","createElementNS","fileid","Image","isSlideshow","isVideo","items","item","current","j","hoverload","$1","source","conts","prefix","number","parseInt","gallery","links","srcset","substr","styles","first","prev","next","last","hash","onemax","allmax","exts","files","sendFile","sendFiles","actionDrag","dataTransfer","actionChoose","size","btn","file","tmp","FormData","setRequestHeader","append","updateTitle","onError","onStart","round","percent","rate","elapsedTime","mins","lengthComputable","loaded","totalTime","ceil","updateProgress","rect"],"mappings":"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"}
1
+ {"version":3,"sources":["../code/apijs/src/javascripts/main.js","../code/apijs/src/javascripts/i18n.js","../code/apijs/src/javascripts/select.js","../code/apijs/src/javascripts/player.js","../code/apijs/src/javascripts/dialog.js","../code/apijs/src/javascripts/slideshow.js","../code/apijs/src/javascripts/upload.js"],"sourcesContent":["/**\n * Created J/03/12/2009\n * Updated J/23/09/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\nif (!Array.prototype.has) {\n\tArray.prototype.has = function (needle, key) {\n\t\tif (needle instanceof Array) {\n\t\t\tfor (key in needle) if (needle.hasOwnProperty(key)) {\n\t\t\t\tif (this.has(needle[key]))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor (key in this) if (this.hasOwnProperty(key)) {\n\t\t\t\tif (this[key] === needle)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n}\n\nif (window.NodeList && !NodeList.prototype.forEach) {\n\tNodeList.prototype.forEach = function (callback, that, i) {\n\t\tthat = that || window;\n\t\tfor (i = 0; i < this.length; i++)\n\t\t\tcallback.call(that, this[i], i, this);\n\t};\n}\n\nvar apijs = new (function () {\n\n\t\"use strict\";\n\tthis.core = {};\n\tthis.version = 681;\n\n\tthis.config = {\n\t\tlang: 'auto',\n\t\tdebug: false,\n\t\t//select: { },\n\t\tdialog: {\n\t\t\tcloseOnClick: false,\n\t\t\trestrictNavigation: true,\n\t\t\tplayer: true\n\t\t},\n\t\tslideshow: {\n\t\t\tids: 'slideshow',\n\t\t\tanchor: true\n\t\t},\n\t\tupload: {\n\t\t\ttokenName: 'X-CSRF-Token',\n\t\t\ttokenValue: null\n\t\t}\n\t};\n\n\tthis.start = function () {\n\n\t\tvar elem;\n\n\t\t// bonjour\n\t\tconsole.info('APIJS ' + this.version.toString().split('').join('.') + ' - hello - 1 MB/Mo = 1024 kB/ko');\n\t\tif (document.getElementById('oldBrowser'))\n\t\t\tthrow new Error('APIJS canceled, #oldBrowser detected!');\n\n\t\tif (elem = document.querySelector('link[href*=\"apijs/fontello.woff2\"]')) {\n\t\t\tif (elem.getAttribute('href').indexOf('?a3ab5acff3') < 0)\n\t\t\t\tconsole.error('APIJS warning invalid cachekey for link:fontello.woff2?x, it must be ?a3ab5acff3');\n\t\t}\n\t\tif (elem = document.querySelector('script[src*=\"apijs.min.js?v=\"]')) {\n\t\t\tif (elem.getAttribute('src').indexOf('?v=' + this.version) < 0)\n\t\t\t\tconsole.error('APIJS warning invalid cachekey for script:apijs.min.js?x, it must be ?v=' + this.version);\n\t\t}\n\n\t\t// instancie\n\t\tthis.i18n = new this.core.i18n();\n\t\t//this.select = new this.core.select();\n\t\tthis.dialog = new this.core.dialog();\n\t\tthis.upload = new this.core.upload();\n\t\tthis.slideshow = new this.core.slideshow();\n\t\tself.dispatchEvent(new CustomEvent('apijsbeforeload'));\n\n\t\t// démarre\n\t\tthis.i18n.init();\n\t\tthis.slideshow.init();\n\t\t//this.select.init();\n\t\tdocument.querySelectorAll('video.apijsplayer[data-src]').forEach(function (elem) {\n\t\t\tapijs.startPlayer(elem, elem.getAttribute('data-src'));\n\t\t});\n\n\t\tself.addEventListener('popstate', this.slideshow.onPopState);\n\t\tself.addEventListener('hashchange', this.slideshow.onPopState);\n\n\t\tif (this.config.debug) {\n\t\t\tconsole.info('APIJS available languages: ' + Object.keys(this.i18n.data).join(' '));\n\t\t\tconsole.info('APIJS language loaded: ' + this.config.lang);\n\t\t\tconsole.info('APIJS successfully started');\n\t\t}\n\n\t\t// événement\n\t\tself.dispatchEvent(new CustomEvent('apijsload'));\n\t};\n\n\tthis.formatNumber = function (nb, dec) {\n\n\t\t// par défaut 2 chiffres\n\t\tvar dgt = (typeof dec == 'number') ? dec : ((dec === false) ? 0 : 2), str;\n\n\t\t// Firefox 29+ pas 27+, (iOS) Safari 10+ pas 9+\n\t\ttry {\n\t\t\tstr = new Intl.NumberFormat(this.config.lang, { minimumFractionDigits: dgt, maximumFractionDigits: dgt }).format(nb);\n\t\t}\n\t\tcatch (ignore) {\n\t\t\tstr = nb.toFixed(dgt);\n\t\t}\n\n\t\t// conserve 00 si on veut vraiment 2 chiffres\n\t\treturn (typeof dec == 'number') ? str : str.replace(/[.,]00$/, '');\n\t};\n\n\tthis.startPlayer = function (elem, url) {\n\n\t\tif (this.config.dialog.player === true) {\n\t\t\telem.videoPlayer = new this.core.player(elem, url);\n\t\t\telem.parentNode.classList.add('apijsvideoplayer');\n\t\t\treturn true;\n\t\t}\n\n\t\tif (typeof this.config.dialog.player == 'function') {\n\t\t\tthis.config.dialog.player(elem, url);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tthis.toArray = function (data) {\n\t\treturn Array.prototype.slice.call(data, 0);\n\t};\n\n\tthis.openTab = function (ev) {\n\t\tev.preventDefault();\n\t\tif (this.href.length > 0)\n\t\t\tself.open(this.href);\n\t};\n\n\tthis.log = function (txt) {\n\t\tif (this.config.debug)\n\t\t\tconsole.info('APIJS ' + txt);\n\t};\n\n\tthis.html = function (selector, id) {\n\t\tif ((id === true) || (selector.indexOf('#') === 0))\n\t\t\treturn document.getElementById(selector.replace('#', 'apijs'));\n\t\telse if (this.dialog.t1)\n\t\t\treturn this.dialog.t1.querySelector(selector);\n\t\telse\n\t\t\treturn null;\n\t};\n\n\tthis.requestFullscreen = function (elem) {\n\t\tif (document.webkitFullscreenElement)\n\t\t\tdocument.webkitCancelFullScreen();\n\t\telse if (document.mozFullScreenElement)\n\t\t\tdocument.mozCancelFullScreen();\n\t\telse if (document.fullscreenElement)\n\t\t\tdocument.cancelFullScreen();\n\t\telse if (elem.webkitRequestFullscreen)\n\t\t\telem.webkitRequestFullscreen();\n\t\telse if (elem.requestFullscreen)\n\t\t\telem.requestFullscreen();\n\t\telse if (elem.mozRequestFullScreen)\n\t\t\telem.mozRequestFullScreen();\n\t};\n\n\tthis.serialize = function (form, filter) {\n\n\t\tvar data = [];\n\t\tfilter = (typeof filter == 'string') ? filter : '';\n\n\t\t// https://gomakethings.com/how-to-serialize-form-data-with-vanilla-js/\n\t\tArray.prototype.forEach.call(form.elements, function (elem, idx) {\n\n\t\t\tif (!elem.name || elem.disabled || ['file', 'reset', 'submit', 'button'].has(elem.type) || (elem.name.indexOf(filter) !== 0))\n\t\t\t\treturn;\n\n\t\t\tif (elem.type === 'select-multiple') {\n\t\t\t\tfor (idx = 0; idx < elem.options.length; idx++) {\n\t\t\t\t\tif (elem.options[idx].selected)\n\t\t\t\t\t\tdata.push(encodeURIComponent(elem.name) + '=' + encodeURIComponent(elem.options[idx].value));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!['checkbox', 'radio'].has(elem.type) || elem.checked) {\n\t\t\t\tdata.push(encodeURIComponent(elem.name) + '=' + encodeURIComponent(elem.value));\n\t\t\t}\n\t\t});\n\n\t\treturn data.join('&');\n\t};\n\n})();\n\nif (typeof self.addEventListener == 'function')\n\tself.addEventListener('load', apijs.start.bind(apijs));","/**\n * Created S/05/06/2010\n * Updated S/03/07/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.i18n = function () {\n\n\t\"use strict\";\n\tthis.data = {\n\t\t// https://docs.google.com/spreadsheets/d/1UUpKZ-YAAlcfvGHYwt6aUM9io390j0-fIL0vMRh1pW0/edit?usp=sharing\n\t\t// auto start\n\t\tcs: {\n\t\t\t103: \"Zrušit\",\n\t\t\t104: \"Potvrzení\",\n\t\t\t105: \"Zavřít\",\n\t\t\t106: \"Předchozí\",\n\t\t\t107: \"Následující\",\n\t\t\t108: \"Vybrat soubor\",\n\t\t\t132: \"video stopa\",\n\t\t\t133: \"zvuková stopa\",\n\t\t\t134: \"titulky\",\n\t\t\t135: \"vypnuto\",\n\t\t\t142: \"předchozí/následující\",\n\t\t\t143: \"přehrát/pozastavit\",\n\t\t\t144: \"zpět/vpřed\",\n\t\t\t145: \"snížit/zvýšit hlasitost\",\n\t\t\t146: \"ztlumit\",\n\t\t\t148: \"ukončit\",\n\t\t\t149: \"Konec\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tde: {\n\t\t\t103: \"Abbrechen\",\n\t\t\t104: \"Bestätigen\",\n\t\t\t105: \"Schließen\",\n\t\t\t106: \"Vorheriges\",\n\t\t\t107: \"Nächstes\",\n\t\t\t108: \"Datei wählen\",\n\t\t\t109: \"Dateien wählen\",\n\t\t\t124: \"Verarbeitung läuft...\",\n\t\t\t132: \"videospur\",\n\t\t\t133: \"audiospur\",\n\t\t\t134: \"untertitel\",\n\t\t\t135: \"aus\",\n\t\t\t142: \"vorheriges/nächstes\",\n\t\t\t143: \"wiedergabe/pause\",\n\t\t\t144: \"rückwärts/vorwärts\",\n\t\t\t145: \"leiser/lauter\",\n\t\t\t146: \"ton aus\",\n\t\t\t147: \"vollbild\",\n\t\t\t148: \"beenden\",\n\t\t\t149: \"Ende\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Alle Dateien wurden akzeptiert.\",\n\t\t\t162: \"Akzeptiertes Dateiformat: §.\",\n\t\t\t163: \"Akzeptiertes Dateiformate: § und §.\",\n\t\t\t164: \"Maximale Größe: § MB.\",\n\t\t\t167: \"Unerlaubtes Format\",\n\t\t\t168: \"Format zu gross\",\n\t\t\t169: \"Leere Datei\",\n\t\t\t181: \"§% - § kB/s - Noch § Minuten\",\n\t\t\t182: \"§% - § kB/s - Noch § Minute\",\n\t\t\t183: \"§% - § kB/s - Noch § Sekunden\",\n\t\t\t185: \"§% - bis § kB/s in § Minuten\",\n\t\t\t186: \"§% - bis § kB/s in § Minute\",\n\t\t\t187: \"§% - bis § kB/s in § Sekunden\",\n\t\t\t188: \"§% - bis § kB/s\",\n\t\t\t191: \"Abbrechen\",\n\t\t\t192: \"Sind Sie sicher? [span]Ja[/span] - Nein\",\n\t\t\t193: \"Es ist ein unerwarteter Fehler aufgetreten... Bitte versuchen Sie es noch einmal.\",\n\t\t\t194: \"Es ist ein Fehler beim Senden.\",\n\t\t\t195: \"Es ist ein Fehler bei der Verarbeitung.\",\n\t\t\t196: \"Wir laden Sie ein es erneut zu [a §]versuchen[/a].\"\n\t\t},\n\t\tel: {\n\t\t\t102: \"Εντάξει\",\n\t\t\t103: \"Ακύρωση\",\n\t\t\t105: \"Κλείσιμο\",\n\t\t\t106: \"Προηγούμενο\",\n\t\t\t107: \"Επόμενο\",\n\t\t\t108: \"Επιλέξτε ένα αρχείο\",\n\t\t\t131: \"βίντεο\",\n\t\t\t132: \"κομμάτι βίντεο\",\n\t\t\t133: \"κομμάτι ήχου\",\n\t\t\t134: \"υπότιτλοι\",\n\t\t\t135: \"απενεργοποίηση\",\n\t\t\t142: \"προηγούμενο/επόμενο\",\n\t\t\t143: \"αναπαραγωγή/παύση\",\n\t\t\t144: \"προς τα πίσω/εμπρός\",\n\t\t\t145: \"μείωση/αύξηση έντασης ήχου\",\n\t\t\t146: \"σίγαση\",\n\t\t\t147: \"πλήρης οθόνη\",\n\t\t\t148: \"έξοδος\",\n\t\t\t149: \"Τέλος\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\ten: {\n\t\t\t102: \"Ok\",\n\t\t\t103: \"Cancel\",\n\t\t\t104: \"Confirm\",\n\t\t\t105: \"Close\",\n\t\t\t106: \"Previous\",\n\t\t\t107: \"Next\",\n\t\t\t108: \"Choose a file\",\n\t\t\t109: \"Choose one or multiple files\",\n\t\t\t124: \"Operation in progress...\",\n\t\t\t125: \"Upload in progress...\",\n\t\t\t126: \"Processing file in progress...\",\n\t\t\t127: \"Drag and drop your files here\",\n\t\t\t131: \"video\",\n\t\t\t132: \"video track\",\n\t\t\t133: \"audio track\",\n\t\t\t134: \"subtitles\",\n\t\t\t135: \"off\",\n\t\t\t141: \"first/last\",\n\t\t\t142: \"previous/next\",\n\t\t\t143: \"play/pause\",\n\t\t\t144: \"backward/forward\",\n\t\t\t145: \"decrease/increase the volume\",\n\t\t\t146: \"mute\",\n\t\t\t147: \"full screen\",\n\t\t\t148: \"quit\",\n\t\t\t149: \"End\",\n\t\t\t150: \"Escape\",\n\t\t\t161: \"All files are accepted.\",\n\t\t\t162: \"Accepted file format: §.\",\n\t\t\t163: \"Accepted file formats: § and §.\",\n\t\t\t164: \"Maximum size: § MB.\",\n\t\t\t165: \"Maximum size by file: § MB.|Total maximum size: § MB.\",\n\t\t\t166: \"§ MB\",\n\t\t\t167: \"Format not allowed\",\n\t\t\t168: \"Size too large\",\n\t\t\t169: \"File empty\",\n\t\t\t181: \"§% - § kB/s - § minutes left\",\n\t\t\t182: \"§% - § kB/s - § minute left\",\n\t\t\t183: \"§% - § kB/s - § seconds left\",\n\t\t\t184: \"§% - § kB/s\",\n\t\t\t185: \"§% - at § kB/s in § minutes\",\n\t\t\t186: \"§% - at § kB/s in § minute\",\n\t\t\t187: \"§% - at § kB/s in § seconds\",\n\t\t\t188: \"§% - at § kB/s\",\n\t\t\t191: \"Interrupt\",\n\t\t\t192: \"Are you sure? [span]Yes[/span] - No\",\n\t\t\t193: \"It seems that an unlikely mistake just happened... Please try again.\",\n\t\t\t194: \"An error occurred while sending.\",\n\t\t\t195: \"An error occurred while processing.\",\n\t\t\t196: \"We invite you to [a §]try again[/a].\"\n\t\t},\n\t\tes: {\n\t\t\t102: \"Aceptar\",\n\t\t\t103: \"Cancelar\",\n\t\t\t104: \"Confirmar\",\n\t\t\t105: \"Cerrar\",\n\t\t\t106: \"Anterior\",\n\t\t\t107: \"Siguiente\",\n\t\t\t108: \"Elegir un fichero\",\n\t\t\t109: \"Elegir uno o varios ficheros\",\n\t\t\t124: \"Operación en curso...\",\n\t\t\t125: \"Envío en progreso...\",\n\t\t\t126: \"Tratamiento en curso...\",\n\t\t\t131: \"vídeo\",\n\t\t\t132: \"pista de vídeo\",\n\t\t\t133: \"pista de audio\",\n\t\t\t134: \"subtítulos\",\n\t\t\t135: \"desactivar\",\n\t\t\t142: \"anterior/siguiente\",\n\t\t\t143: \"reproducir/pausa\",\n\t\t\t144: \"retroceder/avanzar\",\n\t\t\t145: \"bajar/subir volumen\",\n\t\t\t146: \"silenciar\",\n\t\t\t147: \"pantalla completa\",\n\t\t\t148: \"salir\",\n\t\t\t149: \"Fin\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Se aceptan todos los archivos.\",\n\t\t\t162: \"Formato de archivo aceptado: §.\",\n\t\t\t163: \"Formatos de archivos aceptados: § y §.\",\n\t\t\t164: \"Tamaño máximo: § MB.\",\n\t\t\t165: \"Tamaño máximo por fichero: § Mo.|Tamaño máximo total: § Mo.\",\n\t\t\t167: \"Formato no autorizado\",\n\t\t\t168: \"Tamaño demasiado importante\",\n\t\t\t169: \"Fichero vacío\",\n\t\t\t181: \"§% - § kB/s - § minutos restantes\",\n\t\t\t182: \"§% - § kB/s - § minuto restantes\",\n\t\t\t183: \"§% - § kB/s - § segundos restantes\",\n\t\t\t185: \"§% - a § kB/s en § minutos\",\n\t\t\t186: \"§% - a § kB/s en § minuto\",\n\t\t\t187: \"§% - a § kB/s en § segundos\",\n\t\t\t188: \"§% - a § kB/s\",\n\t\t\t191: \"Interrumpir\",\n\t\t\t192: \"¿Está seguro(a)? [span]Sí[/span] - No\",\n\t\t\t193: \"Parece que un error improbable acabo de ocurrir... Por favor, inténtelo de nuevo.\",\n\t\t\t194: \"Se produjo un error durante el envío.\",\n\t\t\t195: \"Se produjo un error durante el procesamiento.\",\n\t\t\t196: \"Le invitamos a [a §]intentar de nuevo[/a].\"\n\t\t},\n\t\tfr: {\n\t\t\t103: \"Annuler\",\n\t\t\t104: \"Valider\",\n\t\t\t105: \"Fermer\",\n\t\t\t106: \"Précédent\",\n\t\t\t107: \"Suivant\",\n\t\t\t108: \"Choisir un fichier\",\n\t\t\t109: \"Choisir un ou plusieurs fichiers\",\n\t\t\t124: \"Opération en cours...\",\n\t\t\t125: \"Envoi en cours...\",\n\t\t\t126: \"Traitement en cours...\",\n\t\t\t127: \"Faites glisser et déposez vos fichiers ici\",\n\t\t\t131: \"vidéo\",\n\t\t\t132: \"piste vidéo\",\n\t\t\t133: \"piste audio\",\n\t\t\t134: \"sous-titres\",\n\t\t\t141: \"premier/dernier\",\n\t\t\t142: \"précédent/suivant\",\n\t\t\t143: \"lecture/pause\",\n\t\t\t144: \"reculer/avancer\",\n\t\t\t145: \"réduire/augmenter le volume\",\n\t\t\t146: \"couper le son\",\n\t\t\t147: \"plein écran\",\n\t\t\t148: \"quitter\",\n\t\t\t149: \"Fin\",\n\t\t\t150: \"Échap\",\n\t\t\t161: \"Tous les fichiers sont acceptés.\",\n\t\t\t162: \"Format de fichier accepté : §.\",\n\t\t\t163: \"Formats de fichier acceptés : § et §.\",\n\t\t\t164: \"Taille maximale : § Mo.\",\n\t\t\t165: \"Taille maximale par fichier : § Mo.|Taille maximale total : § Mo.\",\n\t\t\t166: \"§ Mo\",\n\t\t\t167: \"Format non autorisé\",\n\t\t\t168: \"Taille trop importante\",\n\t\t\t169: \"Fichier vide\",\n\t\t\t181: \"§% - § ko/s - § minutes restantes\",\n\t\t\t182: \"§% - § ko/s - § minute restante\",\n\t\t\t183: \"§% - § ko/s - § secondes restantes\",\n\t\t\t184: \"§% - § ko/s\",\n\t\t\t185: \"§% - à § ko/s en § minutes\",\n\t\t\t186: \"§% - à § ko/s en § minute\",\n\t\t\t187: \"§% - à § ko/s en § secondes\",\n\t\t\t188: \"§% - à § ko/s\",\n\t\t\t191: \"Interrompre\",\n\t\t\t192: \"Êtes-vous sûr(e) ? [span]Oui[/span] - Non\",\n\t\t\t193: \"Il semblerait qu'une erreur improbable vient de se produire... Veuillez réessayer.\",\n\t\t\t194: \"Une erreur est survenue lors de l'envoi.\",\n\t\t\t195: \"Une erreur est survenue lors du traitement.\",\n\t\t\t196: \"Nous vous invitons à [a §]réessayer[/a].\"\n\t\t},\n\t\thu: {\n\t\t\t103: \"Mégsem\",\n\t\t\t104: \"Megerősít\",\n\t\t\t105: \"Bezár\",\n\t\t\t106: \"Előző\",\n\t\t\t107: \"Következő\",\n\t\t\t108: \"Válasszon fájlt\",\n\t\t\t131: \"videó\",\n\t\t\t132: \"videosáv\",\n\t\t\t133: \"hangsáv\",\n\t\t\t134: \"feliratok\",\n\t\t\t135: \"ki\",\n\t\t\t142: \"előző/következő\",\n\t\t\t143: \"lejátszás/szünet\",\n\t\t\t144: \"vissza/előre\",\n\t\t\t145: \"hangerő csökkentés/növelése\",\n\t\t\t146: \"némítás\",\n\t\t\t147: \"teljes képernyő\",\n\t\t\t148: \"kilépés\",\n\t\t\t149: \"Befejezés\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tit: {\n\t\t\t103: \"Annulla\",\n\t\t\t104: \"Conferma\",\n\t\t\t105: \"Chiudi\",\n\t\t\t106: \"Precedente\",\n\t\t\t107: \"Successivo\",\n\t\t\t108: \"Scegli un file\",\n\t\t\t109: \"Scegli uno o più file\",\n\t\t\t124: \"Operazione in corso...\",\n\t\t\t125: \"Invio in corso...\",\n\t\t\t126: \"Trattamento in corso...\",\n\t\t\t132: \"traccia video\",\n\t\t\t133: \"traccia audio\",\n\t\t\t134: \"sottotitoli\",\n\t\t\t135: \"inattivo\",\n\t\t\t142: \"precedente/successivo\",\n\t\t\t143: \"riproduci/pausa\",\n\t\t\t144: \"indietro/avanti\",\n\t\t\t145: \"riduci/aumenta volume\",\n\t\t\t146: \"silenzio\",\n\t\t\t147: \"schermo intero\",\n\t\t\t148: \"esci\",\n\t\t\t149: \"Fine\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Tutti i file sono accettati.\",\n\t\t\t162: \"Formato del file accettato: §.\",\n\t\t\t163: \"Formati accettati: § et §.\",\n\t\t\t164: \"Dimensione massima: § MB.\",\n\t\t\t167: \"Formato non autorizzato\",\n\t\t\t168: \"Dimensione troppo importante\",\n\t\t\t169: \"File vuoto\",\n\t\t\t181: \"§% - § kB/s - § minuti rimanenti\",\n\t\t\t182: \"§% - § kB/s - § minuto rimanente\",\n\t\t\t183: \"§% - § kB/s - § secondi rimanenti\",\n\t\t\t185: \"§% - a § kB/s in § minuti\",\n\t\t\t186: \"§% - a § kB/s in § minuto\",\n\t\t\t187: \"§% - a § kB/s in § secondi\",\n\t\t\t188: \"§% - a § kB/s\",\n\t\t\t191: \"Interrompere\",\n\t\t\t192: \"Sei sicuro? [span]Si[/span] - No\",\n\t\t\t193: \"Sembra che un errore inaspettato si sia verificato... Riprova.\",\n\t\t\t194: \"Un errore si è verificato durante l'invio.\",\n\t\t\t195: \"Un errore si è verificato durante il trattamento.\",\n\t\t\t196: \"Vi invitiamo a [a §]riprovare[/a].\"\n\t\t},\n\t\tja: {\n\t\t\t103: \"キャンセル\",\n\t\t\t104: \"承認\",\n\t\t\t105: \"閉じる\",\n\t\t\t106: \"前へ\",\n\t\t\t107: \"次へ\",\n\t\t\t108: \"ファイルを選択する\",\n\t\t\t131: \"ビデオ\",\n\t\t\t132: \"ビデオトラック\",\n\t\t\t133: \"オーディオトラック\",\n\t\t\t134: \"字幕\",\n\t\t\t135: \"オフ\",\n\t\t\t142: \"前へ/次へ\",\n\t\t\t143: \"再生/一時停止\",\n\t\t\t144: \"戻る/進む\",\n\t\t\t146: \"ミュート\",\n\t\t\t147: \"全画面表示\",\n\t\t\t148: \"終了\",\n\t\t\t149: \"終了\",\n\t\t\t150: \"Esc\",\n\t\t\t166: \"§ Mo\",\n\t\t\t184: \"§% - § Ko/s\",\n\t\t\t192: \"よろしいですか?[span]はい[/span] - いいえ\"\n\t\t},\n\t\tnl: {\n\t\t\t103: \"Annuleren\",\n\t\t\t104: \"Bevestigen\",\n\t\t\t105: \"Sluiten\",\n\t\t\t106: \"Vorige\",\n\t\t\t107: \"Volgende\",\n\t\t\t108: \"Kies een bestand\",\n\t\t\t132: \"videospoor\",\n\t\t\t133: \"audiospoor\",\n\t\t\t134: \"ondertitels\",\n\t\t\t135: \"uit\",\n\t\t\t142: \"vorige/volgende\",\n\t\t\t143: \"afspelen/pauzeren\",\n\t\t\t144: \"achteruit/vooruit\",\n\t\t\t145: \"volume omlaag/omhoog\",\n\t\t\t146: \"dempen\",\n\t\t\t147: \"schermvullend\",\n\t\t\t148: \"afsluiten\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tpl: {\n\t\t\t103: \"Anuluj\",\n\t\t\t104: \"Potwierdź\",\n\t\t\t105: \"Zamknij\",\n\t\t\t106: \"Poprzedni\",\n\t\t\t107: \"Następny\",\n\t\t\t108: \"Wybierz plik\",\n\t\t\t131: \"obraz\",\n\t\t\t132: \"ścieżka obrazu\",\n\t\t\t133: \"ścieżka dźwiękowa\",\n\t\t\t134: \"napisy\",\n\t\t\t135: \"wyłączone\",\n\t\t\t142: \"poprzedni/następny\",\n\t\t\t143: \"odtwarzaj/wstrzymaj\",\n\t\t\t144: \"wstecz/przodu\",\n\t\t\t145: \"ciszej/głośniej\",\n\t\t\t146: \"wycisz\",\n\t\t\t147: \"pełny ekran\",\n\t\t\t148: \"zakończ\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tpt: {\n\t\t\t103: \"Cancelar\",\n\t\t\t104: \"Confirmar\",\n\t\t\t105: \"Fechar\",\n\t\t\t106: \"Anterior\",\n\t\t\t107: \"Seguinte\",\n\t\t\t108: \"Escolha um ficheiro\",\n\t\t\t124: \"Operação em processo...\",\n\t\t\t125: \"Envio em processo...\",\n\t\t\t126: \"Tratamento em processo...\",\n\t\t\t131: \"vídeo\",\n\t\t\t132: \"faixa de vídeo\",\n\t\t\t133: \"faixa de áudio\",\n\t\t\t134: \"legendas\",\n\t\t\t135: \"não\",\n\t\t\t142: \"anterior/seguinte\",\n\t\t\t143: \"reprodução/pausa\",\n\t\t\t144: \"recuar/avançar\",\n\t\t\t145: \"diminuir/aumentar volume\",\n\t\t\t146: \"sem som\",\n\t\t\t147: \"ecrã completo\",\n\t\t\t148: \"sair\",\n\t\t\t149: \"Fim\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Todos os ficheiros foram aceites.\",\n\t\t\t162: \"Formato do ficheiro aceite: §.\",\n\t\t\t163: \"Formatos de ficheiro aceites: § e §.\",\n\t\t\t164: \"Tamanho máximo: § MB.\",\n\t\t\t181: \"§% - § kB/s - § minutos restantes\",\n\t\t\t182: \"§% - § kB/s - § minuto restantes\",\n\t\t\t183: \"§% - § kB/s - § segundos restantes\",\n\t\t\t185: \"§% - § kB/s em § minutos\",\n\t\t\t186: \"§% - § kB/s em § minuto\",\n\t\t\t187: \"§% - § kB/s em § segundos\",\n\t\t\t188: \"§% - § kB/s\",\n\t\t\t192: \"Tem a certeza? [span]Sim[/span] - Não\",\n\t\t\t193: \"Parece ter acontecido um erro imprevisto. Por favor, tente novamente.\",\n\t\t\t194: \"Ocorreu um erro ao enviar.\",\n\t\t\t195: \"Ocorreu um erro ao processar.\",\n\t\t\t196: \"Convidamo-lo a [a §]tentar novamente[/a].\"\n\t\t},\n\t\tptbr: {\n\t\t\t107: \"Próximo\",\n\t\t\t108: \"Escolher um arquivo\",\n\t\t\t124: \"Operação em andamento...\",\n\t\t\t125: \"Envio em andamento...\",\n\t\t\t126: \"Tratamento em andamento...\",\n\t\t\t132: \"trilha de vídeo\",\n\t\t\t133: \"trilha de áudio\",\n\t\t\t135: \"desligado\",\n\t\t\t142: \"anterior/próximo\",\n\t\t\t143: \"reproduzir/pausar\",\n\t\t\t144: \"retroceder/avançar\",\n\t\t\t146: \"sem áudio\",\n\t\t\t147: \"tela inteira\",\n\t\t\t148: \"fechar\",\n\t\t\t149: \"Final\"\n\t\t},\n\t\tro: {\n\t\t\t103: \"Anuleaza\",\n\t\t\t104: \"Confirmare\",\n\t\t\t105: \"Inchide\",\n\t\t\t106: \"Anteriorul\",\n\t\t\t107: \"Urmatorul\",\n\t\t\t108: \"Alege un fișier\",\n\t\t\t132: \"pistă video\",\n\t\t\t133: \"pistă audio\",\n\t\t\t134: \"subtitluri\",\n\t\t\t135: \"oprit\",\n\t\t\t142: \"anteriorul/urmatorul\",\n\t\t\t143: \"redare/pauză\",\n\t\t\t144: \"înapoi/înaintează\",\n\t\t\t145: \"scade/crește volumul\",\n\t\t\t146: \"mut\",\n\t\t\t147: \"pe tot ecranul\",\n\t\t\t148: \"ieșire\",\n\t\t\t149: \"Sfârșit\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tru: {\n\t\t\t102: \"Ок\",\n\t\t\t103: \"Отмена\",\n\t\t\t104: \"Подтвердить\",\n\t\t\t105: \"Закрыть\",\n\t\t\t106: \"Предыдущий\",\n\t\t\t107: \"Следующий\",\n\t\t\t108: \"Выберите файл\",\n\t\t\t124: \"Операция в процессе...\",\n\t\t\t131: \"видео\",\n\t\t\t132: \"видеодорожка\",\n\t\t\t133: \"аудиодорожка\",\n\t\t\t134: \"субтитры\",\n\t\t\t135: \"выключено\",\n\t\t\t142: \"предыдущий/следующий\",\n\t\t\t143: \"воспроизведение/пауза\",\n\t\t\t144: \"назад/вперед\",\n\t\t\t145: \"понизить/повысить громкость\",\n\t\t\t146: \"выключить звук\",\n\t\t\t147: \"полноэкранный режим\",\n\t\t\t148: \"выйти\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Все файлы приняты.\",\n\t\t\t162: \"Формат файла: §.\",\n\t\t\t163: \"Форматы файлов: § и §.\",\n\t\t\t164: \"Максимальный размер: § Мб.\",\n\t\t\t166: \"§ Мб\",\n\t\t\t181: \"§% - § Кб/s - осталось § минут\",\n\t\t\t182: \"§% - § Кб/s - осталось § минут\",\n\t\t\t183: \"§% - § Кб/s - осталось § секунд\",\n\t\t\t184: \"§% - § Кб/s\",\n\t\t\t185: \"§% - § Кб/s за § минут\",\n\t\t\t186: \"§% - § Кб/s за § минут\",\n\t\t\t187: \"§% - § Кб/s за § секунд\",\n\t\t\t188: \"§% - § Кб/s\",\n\t\t\t192: \"Вы уверены? [span]Да[/span] - нет\",\n\t\t\t193: \"Кажется произошла не предусмотренная ошибка... Попробуйте еще раз.\",\n\t\t\t194: \"Возникла ошибка при отправке файла.\",\n\t\t\t195: \"Возникла ошибка при обработке файла.\"\n\t\t},\n\t\tsk: {\n\t\t\t103: \"Zrušiť\",\n\t\t\t104: \"Potvrdiť\",\n\t\t\t105: \"Zavrieť\",\n\t\t\t106: \"Dozadu\",\n\t\t\t107: \"Ďalej\",\n\t\t\t108: \"Zvoľte si súbor\",\n\t\t\t133: \"zvuková stopa\",\n\t\t\t134: \"titulky\",\n\t\t\t135: \"vypnuté\",\n\t\t\t142: \"dozadu/ďalej\",\n\t\t\t143: \"prehrať/pozastaviť\",\n\t\t\t144: \"dozadu/dopredu\",\n\t\t\t145: \"znizit/zvysit hlasitost\",\n\t\t\t146: \"stlmiť\",\n\t\t\t148: \"koniec\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\ttr: {\n\t\t\t102: \"Tamam\",\n\t\t\t103: \"İptal\",\n\t\t\t104: \"Onayla\",\n\t\t\t105: \"Kapat\",\n\t\t\t106: \"Önceki\",\n\t\t\t107: \"Sonraki\",\n\t\t\t108: \"Bir dosya seçin\",\n\t\t\t131: \"görüntü\",\n\t\t\t132: \"görüntü kaydı\",\n\t\t\t133: \"ses kaydı\",\n\t\t\t134: \"altyazılar\",\n\t\t\t135: \"kapalı\",\n\t\t\t142: \"önceki/sonraki\",\n\t\t\t143: \"duraklatma/oynatma\",\n\t\t\t144: \"geri/i̇leri\",\n\t\t\t145: \"ses kısar/açar\",\n\t\t\t146: \"sesi kapatma\",\n\t\t\t147: \"tam ekran\",\n\t\t\t148: \"çıkış\",\n\t\t\t149: \"Son\",\n\t\t\t150: \"Esc\",\n\t\t\t192: \"Emin misiniz ? [span]Evet[/span] - Hayır\"\n\t\t},\n\t\tuk: {\n\t\t\t102: \"Гаразд\",\n\t\t\t103: \"Відмінити\",\n\t\t\t104: \"Підтвердити\",\n\t\t\t105: \"Закрити\",\n\t\t\t106: \"Попередній\",\n\t\t\t107: \"Наступний\",\n\t\t\t108: \"Вибрати файл\",\n\t\t\t131: \"відео\",\n\t\t\t132: \"відеодоріжка\",\n\t\t\t133: \"звукова доріжка\",\n\t\t\t134: \"субтитри\",\n\t\t\t135: \"вимкнено\",\n\t\t\t142: \"попередній/наступний\",\n\t\t\t143: \"відтворити/призупинити\",\n\t\t\t144: \"назад/вперед\",\n\t\t\t145: \"зменшити/збільшити гучність\",\n\t\t\t146: \"вимкнути звук\",\n\t\t\t148: \"вийти\",\n\t\t\t149: \"Кінець\",\n\t\t\t150: \"Esc\",\n\t\t\t166: \"§ МБ\",\n\t\t\t184: \"§% - § кБ/s\"\n\t\t},\n\t\tzh: {\n\t\t\t102: \"确定\",\n\t\t\t103: \"取消\",\n\t\t\t104: \"确认\",\n\t\t\t105: \"关闭\",\n\t\t\t106: \"上一个\",\n\t\t\t107: \"下一个\",\n\t\t\t108: \"选择文件\",\n\t\t\t131: \"视频\",\n\t\t\t132: \"视频轨道\",\n\t\t\t133: \"音频轨道\",\n\t\t\t134: \"字幕\",\n\t\t\t135: \"关\",\n\t\t\t142: \"上一个/下一个\",\n\t\t\t143: \"播放/暂停\",\n\t\t\t144: \"快退/快进\",\n\t\t\t145: \"音量减/增\",\n\t\t\t146: \"静音\",\n\t\t\t147: \"全屏\",\n\t\t\t148: \"退出\",\n\t\t\t150: \"Esc\",\n\t\t\t192: \"您确定吗?[span]是[/span] - 否\"\n\t\t}\n\t\t// auto end\n\t};\n\n\tthis.init = function () {\n\n\t\tvar value = apijs.config.lang, html = document.querySelector('html');\n\n\t\tif (value.indexOf('auto') > -1) {\n\t\t\tvalue = html.getAttribute('xml:lang') || html.getAttribute('lang'); // pt-BR fr-FR\n\t\t\tif (typeof value == 'string') {\n\t\t\t\tvalue = value.replace(/[-_]/g, '').toLowerCase();\n\t\t\t\tvalue = value.slice(0, 4); // ptbr frfr\n\t\t\t\tif (!this.data.hasOwnProperty(value))\n\t\t\t\t\tvalue = value.slice(0, 2); // pt fr\n\t\t\t\tif (this.data.hasOwnProperty(value))\n\t\t\t\t\tapijs.config.lang = value;\n\t\t\t}\n\t\t}\n\n\t\tif (!this.data.hasOwnProperty(value))\n\t\t\tapijs.config.lang = 'en';\n\t};\n\n\n\t// TRADUIT (public return string|domelement|boolean)\n\n\tthis.translate = function (word) {\n\n\t\tvar lang = apijs.config.lang, idx = 1, translation = '';\n\n\t\t// mot clef inexistant dans la langue configurée\n\t\t// test avec la langue par défaut pour éventuellement continuer\n\t\tif (typeof this.data[lang][word] != 'string') {\n\t\t\tif ((lang.length > 3) && (typeof this.data[lang.slice(0, 2)][word] == 'string'))\n\t\t\t\tlang = lang.slice(0, 2);\n\t\t\telse if ((lang !== 'en') && (typeof this.data.en[word] == 'string'))\n\t\t\t\tlang = 'en';\n\t\t\telse\n\t\t\t\treturn word;\n\t\t}\n\n\t\t// chaîne de caractères configurable\n\t\tif (arguments.length > 1) {\n\t\t\tthis.data[lang][word].split('§').forEach(function (data) {\n\t\t\t\ttranslation += (idx < this.length) ? data + this[idx++] : data;\n\t\t\t}, arguments); // pour que ci-dessus this = arguments\n\t\t\treturn translation;\n\t\t}\n\n\t\t// chaîne de caractères simple\n\t\treturn this.data[lang][word];\n\t};\n\n\tthis.translateNode = function () {\n\n\t\t// apply fait une copie des arguments\n\t\t// c'est comme si on avait appelé this.translate directement\n\t\treturn document.createTextNode(this.translate.apply(this, arguments));\n\t};\n\n\tthis.changeLang = function (lang) {\n\n\t\tif (typeof lang == 'string') {\n\n\t\t\tif (lang.indexOf('auto') > -1) {\n\t\t\t\tapijs.config.lang = 'auto';\n\t\t\t\tthis.init();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlang = lang.replace(/[-_]/g, '');\n\n\t\t\tif (this.data.hasOwnProperty(lang)) {\n\t\t\t\tapijs.config.lang = lang;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n};","/**\n * Created L/02/03/2020\n * Updated J/19/11/2020\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.select = function () {\n\n\t\"use strict\";\n\n\tthis.init = function () {\n\n\t\tdocument.querySelectorAll('select').forEach(function (elem) {\n\t\t\telem.addEventListener('focus', apijs.select.open);\n\t\t});\n\t};\n\n\tthis.open = function (ev) {\n\n\t\tvar root = ev.target, t, a, b, c;\n\n\t\tt = document.createDocumentFragment();\n\n\t\t\ta = document.createElement('div');\n\n\t\t\t\tb = document.createElement('ul');\n\t\t\t\troot.querySelectorAll('option').forEach(function (elem) {\n\t\t\t\t\tc = document.createElement('li');\n\t\t\t\t\tc.appendChild(document.createTextNode(elem.textContent));\n\t\t\t\t\tArray.prototype.forEach.call(elem.attributes, function (attribute) {\n\t\t\t\t\t\tc.setAttribute(attribute.name, attribute.value);\n\t\t\t\t\t});\n\t\t\t\t\tthis.appendChild(c);\n\t\t\t\t}, b); // pour que ci-dessus this = b\n\n\t\t\ta.appendChild(b);\n\n\t\tt.appendChild(a);\n\n\t\tconsole.log(t.firstChild.innerHTML);\n\t\troot.parentNode.replaceChild(t.firstChild, root);\n\t};\n};","/**\n * Created D/11/01/2015\n * Updated V/23/07/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.player = function (video, url) {\n\n\t\"use strict\";\n\tthis.video = video;\n\tthis.stalled = false;\n\tthis.subload = false;\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return this|void|domelement)\n\n\tthis.autoRun = function (video, url) { // todo\n\n\t\tvideo.removeAttribute('src');\n\t\tvideo.removeAttribute('data-src');\n\t\tvideo.removeAttribute('controls');\n\t\tvideo.classList.add('apijsplayer');\n\n\t\t// https://developer.mozilla.org/fr/docs/Web/Guide/DOM/Events/evenement_medias\n\t\tvideo.onloadedmetadata = function (ev) {\n\t\t\tthis.stalled = false;\n\t\t\tthis.onTimeupdate(ev);\n\t\t\tthis.onProgress(ev);\n\t\t\tthis.onVideotrack();\n\t\t\tthis.onAudiotrack();\n\t\t}.bind(this);\n\t\tvideo.onstalled = function (ev) {\n\t\t\tthis.stalled = true;\n\t\t\tthis.onWaiting(ev);\n\t\t}.bind(this);\n\t\tvideo.onplaying = this.onPlay.bind(this);\n\t\tvideo.onpause = this.onPlay.bind(this);\n\t\tvideo.onended = this.onPlay.bind(this);\n\t\tvideo.onprogress = this.onProgress.bind(this);\n\t\tvideo.ontimeupdate = this.onTimeupdate.bind(this);\n\t\tvideo.onseeking = this.onTimeupdate.bind(this);\n\t\tvideo.onseeked = this.onWaiting.bind(this);\n\t\tvideo.onwaiting = this.onWaiting.bind(this);\n\t\tvideo.onloadstart = this.onWaiting.bind(this);\n\t\tvideo.oncanplay = this.onWaiting.bind(this);\n\t\tvideo.onclick = this.actionPlay.bind(this);\n\t\tvideo.onvolumechange = this.actionVolume.bind(this);\n\t\tvideo.ondurationchange = apijs.dialog.onMediaLoad;\n\t\tvideo.onerror = apijs.dialog.onMediaLoad;\n\n\t\t// ajoute les contrôles\n\t\tvideo.parentNode.appendChild(this.htmlSvgPlayer());\n\n\t\t// charge les sources\n\t\tif (url.indexOf('m3u') < 0) {\n\t\t\tvideo.appendChild(this.htmlSource(url));\n\t\t\treturn this;\n\t\t}\n\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tself.dispatchEvent(new CustomEvent('apijsajaxresponse', { detail: { from: 'apijsplayer.init', xhr: xhr } }));\n\t\t\t\tif (!video || (video.childNodes.length > 0)) {\n\t\t\t\t\txhr.abort();\n\t\t\t\t}\n\t\t\t\telse if ([0, 200].has(xhr.status)) {\n\n\t\t\t\t\tvar url, txt = 0, nbv = 0, nbt = 0, data = xhr.responseText.trim().split(\"\\n\");\n\t\t\t\t\twhile (typeof (url = data.shift()) == 'string') {\n\n\t\t\t\t\t\t// #APIJS#attr|name|value\n\t\t\t\t\t\tif (url.indexOf('#APIJS#attr') === 0) {\n\t\t\t\t\t\t\ttxt = url.split('|');\n\t\t\t\t\t\t\tvideo.setAttribute(txt[1], txt[2]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #APIJS#track|kind|label|srclang|src\n\t\t\t\t\t\telse if (url.indexOf('#APIJS#track|subtitles') === 0) {\n\t\t\t\t\t\t\ttxt = url.split('|');\n\t\t\t\t\t\t\tthis.html('.tracks.texttrack select').appendChild(this.htmlOption(nbt++, txt[3] + ' - ' + txt[2]));\n\t\t\t\t\t\t\tvideo.appendChild(this.htmlTrack(txt));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #EXTINF: Text\n\t\t\t\t\t\telse if (url.indexOf('#EXTINF') === 0) {\n\t\t\t\t\t\t\ttxt = url.replace(/#EXTINF:[0-9]+,/, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// http\n\t\t\t\t\t\telse if ((url.length > 5) && (url[0] !== '#')) {\n\t\t\t\t\t\t\tthis.html('.tracks.video select').appendChild(this.htmlOption(nbv++, (typeof txt == 'string') ? txt : nbv));\n\t\t\t\t\t\t\tvideo.appendChild(this.htmlSource(url));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateSelect('video', nbv);\n\t\t\t\t\tif (typeof video.textTracks == 'object')\n\t\t\t\t\t\tthis.updateSelect('texttrack', video.textTracks.length || nbt);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tapijs.dialog.onMediaLoad({ type: 'error' });\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(this);\n\t\txhr.send();\n\n\t\treturn this;\n\t};\n\n\tthis.updateSelect = function (css, total) {\n\n\t\t// s'il y une seule option on affiche pas, sauf pour les sous titres\n\t\tvar adjust = (css === 'texttrack') ? 1 : 0;\n\t\tif (total > adjust) {\n\t\t\tthis.html('.tracks.' + css).removeAttribute('style');\n\t\t\tthis.html('.tracks.' + css + ' em').textContent = '(' + total + ')';\n\t\t\tthis.html('.tracks.' + css + ' select').setAttribute('size', (total < 10) ? total + adjust : 10);\n\t\t}\n\t\telse {\n\t\t\tthis.html('.tracks.' + css).setAttribute('style', 'display:none;');\n\t\t\tthis.html('.tracks.' + css + ' select').innerHTML = '';\n\t\t}\n\t};\n\n\tthis.html = function (selector) {\n\t\treturn this.video.parentNode.querySelector(selector);\n\t};\n\n\n\t// GESTION DES ÉVÉNEMENTS (private return void)\n\n\tthis.onVideotrack = function () {\n\n\t\tvar tracks = this.video.videoTracks, select = this.html('.tracks.videotrack select'), lang = apijs.config.lang, auto = -1, idx;\n\n\t\tif (typeof tracks == 'object') {\n\n\t\t\t// si la vidéo contient plusieurs pistes vidéo\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack\n\t\t\tif (tracks.length > 1) {\n\t\t\t\tfor (idx = 0; idx < tracks.length; idx++) {\n\t\t\t\t\tif (tracks[idx].language && (tracks[idx].language.toLowerCase().replace(/[-_]/g, '').indexOf(lang) == 0))\n\t\t\t\t\t\tauto = (auto < 0) ? idx : auto;\n\t\t\t\t\tselect.appendChild(this.htmlOption(idx, tracks[idx]));\n\t\t\t\t}\n\t\t\t\tthis.updateSelect('videotrack', tracks.length);\n\t\t\t}\n\n\t\t\t// sélectionne éventuellement la piste dans la bonne langue\n\t\t\tselect.selectedIndex = Math.max(0, auto);\n\t\t\tif (auto >= 0)\n\t\t\t\tthis.actionVideotrack(auto);\n\t\t}\n\t};\n\n\tthis.onAudiotrack = function () {\n\n\t\tvar tracks = this.video.audioTracks, select = this.html('.tracks.audiotrack select'), lang = apijs.config.lang, auto = -1, idx;\n\n\t\tif (typeof tracks == 'object') {\n\n\t\t\t// si la vidéo contient plusieurs pistes audio\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack\n\t\t\tif (tracks.length > 1) {\n\t\t\t\tfor (idx = 0; idx < tracks.length; idx++) {\n\t\t\t\t\tif (tracks[idx].language && (tracks[idx].language.toLowerCase().replace(/[-_]/g, '').indexOf(lang) == 0))\n\t\t\t\t\t\tauto = (auto < 0) ? idx : auto;\n\t\t\t\t\tselect.appendChild(this.htmlOption(idx, tracks[idx]));\n\t\t\t\t}\n\t\t\t\tthis.updateSelect('audiotrack', tracks.length);\n\t\t\t}\n\n\t\t\t// sélectionne éventuellement la piste dans la bonne langue\n\t\t\tselect.selectedIndex = Math.max(0, auto);\n\t\t\tif (auto >= 0)\n\t\t\t\tthis.actionAudiotrack(auto);\n\t\t}\n\t};\n\n\tthis.onTimeupdate = function (ev) {\n\n\t\tvar time = this.video.currentTime, duration = this.video.duration, text = '--:--', hh, mm, ss;\n\n\t\tif (!isNaN(time) && (duration !== Infinity) && !isNaN(duration)) {\n\n\t\t\thh = Math.floor(time / 3600);\n\t\t\tmm = Math.floor((time % 3600) / 60);\n\t\t\tss = Math.floor(time % 60);\n\t\t\tif (ss < 10) ss = '0' + ss;\n\t\t\tif (mm < 10) mm = '0' + mm;\n\n\t\t\thh = (hh > 0) ? hh + ':' : '';\n\t\t\ttext = hh + mm + ':' + ss;\n\n\t\t\thh = Math.floor(duration / 3600);\n\t\t\tmm = Math.floor((duration % 3600) / 60);\n\t\t\tss = Math.floor(duration % 60);\n\t\t\tif (ss < 10) ss = '0' + ss;\n\t\t\tif (mm < 10) mm = '0' + mm;\n\n\t\t\thh = (hh > 0) ? hh + ':' : '';\n\t\t\ttext += ' / ' + hh + mm + ':' + ss;\n\n\t\t\tthis.html('svg.bar rect').style.width = (time / duration * 100) + '%';\n\t\t}\n\n\t\tthis.html('span.time').textContent = text;\n\n\t\t// loader stalled sauf par les tracks\n\t\tif (this.stalled && !this.subload) {\n\t\t\tthis.stalled = false;\n\t\t\tthis.onWaiting(ev);\n\t\t}\n\t};\n\n\tthis.onProgress = function () {\n\n\t\tvar video = this.video, elem = this.html('svg.bar'), idx = video.buffered.length, width, buffer;\n\n\t\tif ((idx > 0) && (video.duration !== Infinity) && !isNaN(video.duration)) {\n\n\t\t\telem.querySelectorAll('.buffer').forEach(function (node) { node.remove(); });\n\t\t\twhile (idx-- > 0) {\n\n\t\t\t\tbuffer = document.createElement('rect');\n\t\t\t\tbuffer.setAttribute('class', 'buffer');\n\n\t\t\t\twidth = (video.buffered.end(idx) - video.buffered.start(idx)) / video.duration * 100;\n\t\t\t\tif (width > 99.8)\n\t\t\t\t\tbuffer.setAttribute('style', 'left:0%; width:100%;');\n\t\t\t\telse\n\t\t\t\t\tbuffer.setAttribute('style', 'left:' + (video.buffered.start(idx) / video.duration * 100) + '%; width:' + width + '%;');\n\n\t\t\t\telem.appendChild(buffer);\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onPlay = function () { // todo\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tif (this.video.paused) {\n\t\t\t\tthis.html('span.play').textContent = '\\uE810';\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1)\n\t\t\t\t\tapijs.dialog.remove('playing');\n\t\t\t\telse\n\t\t\t\t\tthis.video.parentNode.classList.remove('playing');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.html('span.play').textContent = '\\uE811';\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1)\n\t\t\t\t\tapijs.dialog.add('playing');\n\t\t\t\telse\n\t\t\t\t\tthis.video.parentNode.classList.add('playing');\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onWaiting = function (ev) { // todo\n\t\tapijs.log('player:video:onWaiting:' + ev.type + ' stalled:' + this.stalled + '/subload:' + this.subload);\n\t\tapijs.dialog[['loadstart', 'waiting', 'seeking', 'stalled'].has(ev.type) ? 'add' : 'remove']('loading');\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private return void)\n\n\tthis.actionPlay = function () {\n\n\t\tvar video = this.video;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(video.networkState)) {\n\t\t\tif (video.ended || video.paused)\n\t\t\t\tvideo.play();\n\t\t\telse\n\t\t\t\tvideo.pause();\n\t\t}\n\t};\n\n\tthis.actionVolume = function (ev) {\n\n\t\tvar video = this.video, elem = this.html('svg.vol'), width = elem.offsetWidth, value = 0;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(video.networkState)) {\n\n\t\t\tif ((typeof ev == 'object') && !isNaN(ev.clientX)) {\n\n\t\t\t\tdo { value += elem.offsetLeft; }\n\t\t\t\twhile (elem = elem.offsetParent);\n\n\t\t\t\tvalue = ((ev.clientX - value) * 100 / width) / 100;\n\t\t\t\tvalue = (value < 0.2) ? 0 : ((value > 0.92) ? 1 : value);\n\n\t\t\t\t//if (self.getComputedStyle(this.html('svg.vol')).direction === 'rtl')\n\t\t\t\t//\tvalue = 1 - value;\n\n\t\t\t\tvideo.volume = value;\n\t\t\t\tvideo.muted = false;\n\t\t\t}\n\n\t\t\tthis.html('svg.vol rect').style.width = video.muted ? 0 : (video.volume * 100) + '%';\n\t\t}\n\t};\n\n\tthis.actionPosition = function (ev) {\n\n\t\tvar video = this.video, elem = this.html('svg.bar'), width = elem.offsetWidth, value = 0;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif (([1,2].has(video.networkState)) && (video.duration !== Infinity) && !isNaN(video.duration) && (typeof ev == 'object')) {\n\n\t\t\tdo { value += elem.offsetLeft; }\n\t\t\twhile (elem = elem.offsetParent);\n\n\t\t\tvalue = (video.duration * (ev.clientX - value) * 100 / width) / 100;\n\t\t\tvalue = (value <= 1) ? 0 : value;\n\n\t\t\t//if (self.getComputedStyle(this.html('svg.vol')).direction === 'rtl')\n\t\t\t//\tvalue = video.duration - value;\n\n\t\t\tvideo.currentTime = value;\n\t\t}\n\t};\n\n\tthis.actionVideotrack = function (ev) {\n\n\t\tvar tracks = this.video.videoTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].enabled = (idx == value);\n\n\t\t\tvideo.currentTime -= 1;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionAudiotrack = function (ev) {\n\n\t\tvar tracks = this.video.audioTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].enabled = (idx == value);\n\n\t\t\tvideo.currentTime -= 1;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionTexttrack = function (ev) {\n\n\t\tvar tracks = this.video.textTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].mode = (idx == value) ? 'showing' : 'hidden';\n\n\t\t\tthis.subload = true;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionVideo = function (ev) {\n\n\t\tthis.html('svg.bar rect').style.width = '0';\n\t\tthis.html('svg.bar').querySelectorAll('.buffer').forEach(function (node) { node.remove(); });\n\t\tthis.html('span.play').textContent = '\\uE810';\n\n\t\tthis.updateSelect('videotrack', 0);\n\t\tthis.updateSelect('audiotrack', 0);\n\n\t\tthis.video.src = this.video.querySelectorAll('source')[(typeof ev == 'object') ? ev.target.value : ev].src;\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionFullscreen = function () {\n\n\t\t// en direct\n\t\tvar res = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n\t\tthis.video.parentNode.classList[res ? 'add' : 'remove']('fullscreen');\n\t},\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return domelement)\n\n\tthis.htmlSvgPlayer = function () {\n\n\t\tvar d, c, b, a = document.createElement('div');\n\t\ta.setAttribute('class', 'apijsplayer noplaying');\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'btn play fnt');\n\t\t\tb.appendChild(document.createTextNode('\\uE810'));\n\t\t\tb.onclick = this.actionPlay.bind(this);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'svg bar');\n\n\t\t\t\tc = document.createElement('svg');\n\t\t\t\tc.setAttribute('class', 'bar');\n\t\t\t\tc.onclick = this.actionPosition.bind(this);\n\n\t\t\t\t\td = document.createElement('rect');\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'time');\n\t\t\tb.appendChild(document.createTextNode('--:--'));\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'svg vol nomobile');\n\n\t\t\t\tc = document.createElement('svg');\n\t\t\t\tc.setAttribute('class', 'vol');\n\t\t\t\tc.onclick = this.actionVolume.bind(this);\n\n\t\t\t\t\td = document.createElement('rect');\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks audiotrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(133));\n\n\t\t\t\tc = document.createElement('em');\n\t\t\t\tc.setAttribute('class', 'nomobile');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionAudiotrack.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks videotrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(132));\n\n\t\t\t\tc = document.createElement('em');\n\t\t\t\tc.setAttribute('class', 'nomobile');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionVideotrack.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks video');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(131));\n\n\t\t\t\tc = document.createElement('em');\n\t\t\t\tc.setAttribute('class', 'nomobile');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionVideo.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks texttrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(134));\n\n\t\t\t\tc = document.createElement('em');\n\t\t\t\tc.setAttribute('class', 'nomobile');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionTexttrack.bind(this);\n\n\t\t\t\t\td = document.createElement('option');\n\t\t\t\t\td.appendChild(apijs.i18n.translateNode(135)); // off\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'btn full fnt nomobile');\n\t\t\tb.appendChild(document.createTextNode('\\uE80F'));\n\t\t\tb.onclick = function () {\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1) {\n\t\t\t\t\tapijs.requestFullscreen(apijs.dialog.t1);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('webkitfullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('fullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('mozfullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\tapijs.requestFullscreen(this.video.parentNode);\n\t\t\t\t}\n\n\t\t\t}.bind(this);\n\n\t\ta.appendChild(b);\n\n\t\treturn a;\n\t};\n\n\tthis.htmlTrack = function (data) { // todo\n\n\t\tvar a = document.createElement('track');\n\t\ta.setAttribute('kind', data[1]);\n\t\ta.setAttribute('label', data[2]);\n\t\ta.setAttribute('srclang', data[3]);\n\t\ta.setAttribute('src', data[4]);\n\n\t\ta.onload = function (ev) {\n\t\t\tapijs.log('player:track:onload ' + ev.target.src.slice(ev.target.src.lastIndexOf('/') + 1));\n\t\t\tif (ev.target.track.mode === 'showing') {\n\t\t\t\tthis.onWaiting(ev);\n\t\t\t\tthis.subload = false;\n\t\t\t}\n\t\t}.bind(this);\n\n\t\ta.onerror = function (ev) {\n\t\t\tapijs.log('player:track:onerror ' + ev.target.src.slice(ev.target.src.lastIndexOf('/') + 1));\n\t\t\tif (ev.target.track.mode === 'showing') {\n\t\t\t\tthis.onWaiting(ev);\n\t\t\t\tthis.subload = false;\n\t\t\t}\n\t\t}.bind(this);\n\n\t\treturn a;\n\t};\n\n\tthis.htmlSource = function (url) {\n\n\t\tvar a = document.createElement('source');\n\t\ta.setAttribute('src', url);\n\t\ta.onerror = apijs.dialog.onMediaLoad;\n\n\t\treturn a;\n\t};\n\n\tthis.htmlOption = function (idx, txt) {\n\n\t\tif (typeof txt == 'object')\n\t\t\ttxt = (txt.label === '') ? txt.language.toLowerCase() : txt.language.toLowerCase() + ' - ' + txt.label;\n\n\t\tvar a = document.createElement('option');\n\t\ta.setAttribute('value', idx);\n\t\ta.appendChild(document.createTextNode(txt));\n\n\t\treturn a;\n\t};\n\n\n\tthis.autoRun(video, url);\n};","/**\n * Created D/12/04/2009\n * Updated J/23/09/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.dialog = function () {\n\n\t\"use strict\";\n\tthis.klass = [];\n\tthis.height = 0;\n\tthis.scroll = 0; // time\n\tthis.callback = null;\n\tthis.args = null;\n\tthis.xhr = null;\n\n\tthis.ft = /information|confirmation|options|upload|progress|waiting|photo|video|iframe|ajax|start|ready|end|reduce|mobile|tiny|fullscreen/g;\n\tthis.ti = 'a,area,button,input,textarea,select,object,iframe';\n\tthis.ns = 'http://www.w3.org/2000/svg';\n\n\tthis.media = null;\n\tthis.t0 = null; // fragment\n\tthis.t1 = null; // div id=apijsDialog\n\tthis.t2 = null; // div/form id=apijsBox\n\tthis.a = null;\n\tthis.b = null;\n\tthis.c = null;\n\tthis.d = null;\n\n\n\t// GÉNÉRATION DES BOÎTES DE DIALOGUE (public return boolean)\n\n\tthis.dialogInformation = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('information', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnOk()\n\t\t\t\t.show('button.confirm');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogInformation invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogConfirmation = function (title, text, callback, args, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof callback == 'function')) {\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\treturn this.init('confirmation', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnConfirm('button', 'apijs.dialog.actionConfirm();')\n\t\t\t\t.show('button.confirm');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogConfirmation invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogFormOptions = function (title, text, action, callback, args, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof action == 'string') && (typeof callback == 'function')) {\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\treturn this.init('options', icon)\n\t\t\t\t.htmlParent(action, 'apijs.dialog.actionConfirm();')\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnConfirm('submit')\n\t\t\t\t.show(true);\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogFormOptions invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogFormUpload = function (title, text, action, input, multiple, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof action == 'string') && (typeof input == 'string')) {\n\t\t\treturn this.init('upload', icon)\n\t\t\t\t.htmlParent(action, 'apijs.upload.actionConfirm();', 'apijs.upload.actionDrag(event);')\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlUpload(input, (typeof multiple == 'boolean') ? multiple : false)\n\t\t\t\t.htmlBtnConfirm('submit')\n\t\t\t\t.show('button.browse');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogFormUpload invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogProgress = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('progress', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlSvgProgress()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogProgress invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogWaiting = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('waiting', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogWaiting invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogPhoto = function (url, name, date, legend, icon) {\n\n\t\tvar slideshow = (typeof icon == 'string');\n\t\ticon = slideshow ? 'notransition slideshow loading ' + icon : 'notransition loading';\n\n\t\tif ((typeof url == 'string') && (typeof name == 'string') && (typeof date == 'string') && (typeof legend == 'string')) {\n\t\t\treturn this.init('photo', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlMedia(url, name, date, legend)\n\t\t\t\t.htmlHelp(slideshow, false)\n\t\t\t\t.htmlBtnClose()\n\t\t\t\t.htmlBtnNavigation()\n\t\t\t\t.htmlSvgLoader()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogPhoto invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogVideo = function (url, name, date, legend, icon) {\n\n\t\tvar slideshow = (typeof icon == 'string');\n\t\ticon = slideshow ? 'notransition slideshow loading ' + icon : 'notransition loading';\n\n\t\tif ((typeof url == 'string') && (typeof name == 'string') && (typeof date == 'string') && (typeof legend == 'string')) {\n\t\t\treturn this.init('video', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlMedia(url, name, date, legend)\n\t\t\t\t.htmlHelp(slideshow, url.indexOf('iframe') < 0) // true si pas iframe\n\t\t\t\t.htmlBtnClose()\n\t\t\t\t.htmlBtnNavigation()\n\t\t\t\t.htmlSvgLoader()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogVideo invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogIframe = function (url, close, icon) {\n\n\t\tif ((typeof url == 'string') && (typeof close == 'boolean')) {\n\t\t\treturn this.init('iframe', (typeof icon == 'string') ? icon + ' loading' : 'loading', !close)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlIframe(url)\n\t\t\t\t.htmlBtnClose(close)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogIframe invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogAjax = function (url, close, callback, args, icon) {\n\n\t\tif ((typeof url == 'string') && (typeof close == 'boolean') && (typeof callback == 'function')) {\n\t\t\t// dialogue\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\tthis.init('ajax', (typeof icon == 'string') ? icon + ' loading' : 'loading', !close)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlBtnClose(close)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t\t// ajax\n\t\t\tthis.xhr = new XMLHttpRequest();\n\t\t\tthis.xhr.open('GET', url, true);\n\t\t\tthis.xhr.onreadystatechange = function () {\n\t\t\t\tif ((this.xhr.readyState === 4) && (typeof this.callback == 'function')) {\n\t\t\t\t\tthis.callback(this.xhr, this.args);\n\t\t\t\t\tthis.remove('loading');\n\t\t\t\t}\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\t\t\tthis.xhr.send();\n\t\t\treturn this;\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogAjax invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\n\t// GESTION DES CLASSES CSS (public sauf update private, return this sauf has return true)\n\n\tthis.update = function () {\n\n\t\t// il n'est pas question de mettre à jour les attributs class sans l'une des 3 classes de base\n\t\tif (this.has('start', 'ready', 'end')) {\n\t\t\tif (this.t1)\n\t\t\t\tthis.t1.setAttribute('class', this.klass.join(' '));\n\t\t\tif (this.t2)\n\t\t\t\tthis.t2.setAttribute('class', this.klass.join(' '));\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.add = function () {\n\n\t\tArray.prototype.forEach.call(arguments, function (css) {\n\t\t\tif (typeof css != 'string')\n\t\t\t\tconsole.error('apijs.dialog.add argument is not a string', css);\n\t\t\tif (this.klass.indexOf(css) < 0)\n\t\t\t\tthis.klass.push(css);\n\t\t}, this); // pour que ci-dessus this = this\n\n\t\treturn this.update();\n\t};\n\n\tthis.remove = function () {\n\n\t\tArray.prototype.forEach.call(arguments, function (css) {\n\t\t\tif (typeof css != 'string')\n\t\t\t\tconsole.error('apijs.dialog.remove argument is not a string', css);\n\t\t\tif (this.klass.indexOf(css) > -1)\n\t\t\t\tthis.klass.splice(this.klass.indexOf(css), 1);\n\t\t}, this); // pour que ci-dessus this = this\n\n\t\treturn this.update();\n\t};\n\n\tthis.toggle = function (search, replace) {\n\n\t\tif ((typeof search != 'string') || (typeof replace != 'string'))\n\t\t\tconsole.error('apijs.dialog.toggle argument is not a string', search, replace);\n\n\t\tif (this.has(search))\n\t\t\tthis.remove(search);\n\t\tif (!this.has(replace))\n\t\t\tthis.add(replace);\n\n\t\treturn this.update();\n\t};\n\n\tthis.has = function () {\n\t\treturn this.klass.has(apijs.toArray(arguments)); // true if one found\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private sauf actionClose)\n\n\tthis.actionClose = function (ev) {\n\n\t\t// \\\\ au lieu de \\ sinon Bad or unnecessary escaping\n\t\tif (apijs.config.slideshow.anchor && (typeof history.pushState == 'function')) {\n\t\t\tif (new RegExp('#(' + apijs.config.slideshow.ids + '[\\-\\\\.]\\\\d+[\\-\\\\.]\\\\d+)').test(self.location.href))\n\t\t\t\thistory.pushState({}, '', self.location.href.slice(0, self.location.href.indexOf('#')));\n\t\t}\n\n\t\tif (typeof ev == 'object') {\n\t\t\tif ((ev.target.getAttribute('id') === 'apijsDialog') && !apijs.dialog.has('photo', 'video', 'progress', 'waiting', 'lock'))\n\t\t\t\tapijs.dialog.clear(true);\n\t\t}\n\t\telse if (this.t1) {\n\t\t\tthis.clear(true);\n\t\t}\n\t};\n\n\tthis.onCloseBrowser = function (ev) {\n\n\t\tif (apijs.dialog.has('progress', 'waiting', 'lock')) {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\t\t\tev.m = apijs.i18n.translate(124);\n\t\t\tev.returnValue = ev.m; // Gecko, Trident, Chrome 34+\n\t\t\treturn ev.m; // Gecko, WebKit, Chrome\n\t\t}\n\t};\n\n\tthis.onResizeBrowser = function () {\n\n\t\tvar add, body = document.querySelector('body');\n\n\t\tadd = body.clientWidth <= (apijs.dialog.has('photo', 'video') ? 900 : 460);\n\t\tapijs.dialog[add ? 'add' : 'remove']('mobile');\n\n\t\tadd = body.clientWidth <= 300;\n\t\tapijs.dialog[add ? 'add' : 'remove']('tiny');\n\t};\n\n\tthis.onScrollBrowser = function (ev) {\n\n\t\tvar that = apijs.dialog, elem = ev.target, brk = false;\n\n\t\t// dialogues du diaporama (suivant/précédent)\n\t\tif (that.has('slideshow') && !that.has('playing') &&\n\t\t !['OPTION', 'SELECT'].has(elem.nodeName) && ['DOMMouseScroll','mousewheel','panleft','panright'].has(ev.type)) {\n\n\t\t\telem = new Date().getTime() / 1000;\n\t\t\tif ((that.scroll < 1) || (elem > (1 + that.scroll))) {\n\t\t\t\tthat.scroll = elem;\n\t\t\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\t\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\t\t\t\tapijs.slideshow[((ev.type === 'panleft') || brk) ? 'actionNext' : 'actionPrev']();\n\t\t\t}\n\t\t}\n\t\t// autorise éventuellement le défilement\n\t\t// recherche l'éventuel élément scrollable\n\t\telse {\n\t\t\tif (elem.nodeName === 'OPTION') {\n\t\t\t\telem = elem.parentNode;\n\t\t\t}\n\t\t\telse if (!['TEXTAREA', 'SELECT'].has(elem.nodeName)) {\n\t\t\t\twhile ((brk !== true) && (elem.nodeName !== 'HTML')) {\n\t\t\t\t\tif (elem.classList.contains('scrollable'))\n\t\t\t\t\t\tbrk = true;\n\t\t\t\t\telse\n\t\t\t\t\t\telem = elem.parentNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// elem = select | textarea | scrollable\n\t\t\tif (elem.nodeName !== 'HTML') {\n\t\t\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\t\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\t\t\t\tif ((brk && (elem.scrollTop < (elem.scrollHeight - elem.offsetHeight))) || (!brk && (elem.scrollTop > 0)))\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// empèche le défilement\n\t\tev.preventDefault();\n\t\tev.stopPropagation();\n\t};\n\n\tthis.onScrollIframe = function (ev) {\n\n\t\tvar elem = ev.target, brk;\n\t\twhile (elem.parentNode)\n\t\t\telem = elem.parentNode;\n\n\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\n\t\t// empèche le défilement (elem = iframe document)\n\t\tif (\n\t\t\t(brk && ((elem.defaultView.innerHeight + elem.defaultView.pageYOffset) >= (elem.body.offsetHeight - 1))) ||\n\t\t\t(!brk && (elem.defaultView.pageYOffset <= 0))\n\t\t) {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\t\t}\n\t};\n\n\tthis.onKey = function (ev) {\n\n\t\tvar that = apijs.dialog, elem = that.media;\n\n\t\t// dialogues d'attente et de progresssion ou tout autre dialogue verrouillé\n\t\t// ctrl + q | ctrl + w | ctrl + r | ctrl + f4 | ctrl + f5 // alt + f4 // échap | f5\n\t\tif (that.has('progress', 'waiting', 'lock')) {\n\n\t\t\tif ((ev.ctrlKey && [81, 87, 82, 115, 116].has(ev.keyCode)) || (ev.altKey && (ev.keyCode === 115)) || [27, 116].has(ev.keyCode))\n\t\t\t\tev.preventDefault();\n\t\t}\n\t\t// dialogues photo et vidéo\n\t\t// f11 (ne fonctionne plus sur Opera 74 Windows)\n\t\telse if (that.has('photo', 'video') && (ev.keyCode === 122)) {\n\t\t\tev.preventDefault();\n\t\t\tapijs.requestFullscreen(that.t1);\n\t\t}\n\t\t// dialogues photo et vidéo du diaporama\n\t\t// échap // fin // début // gauche // droite\n\t\telse if (that.has('slideshow')) {\n\n\t\t\tif (ev.keyCode === 27) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tthat.actionClose();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 35) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionLast();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 36) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionFirst();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 37) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionPrev();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 39) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionNext();\n\t\t\t}\n\t\t}\n\t\t// pour tous les autres\n\t\t// échap\n\t\telse if (ev.keyCode === 27) {\n\t\t\tev.preventDefault();\n\t\t\tthat.actionClose();\n\t\t}\n\n\t\t// dialogue vidéo\n\t\t// espace | p // haut | page haut // bas | page bas // + // - // m\n\t\tif (that.has('video') && !that.has('videoiframe')) {\n\n\t\t\t// espace | p\n\t\t\tif ((ev.keyCode === 32) || (ev.keyCode === 80)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1,2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.ended || elem.paused)\n\t\t\t\t\t\telem.play();\n\t\t\t\t\telse\n\t\t\t\t\t\telem.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// haut | page haut\n\t\t\telse if ((ev.keyCode === 38) || (ev.keyCode === 33)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif (([1,2].has(elem.networkState)) && (elem.duration !== Infinity) && !isNaN(elem.duration)) {\n\t\t\t\t\tif (elem.currentTime < (elem.duration - 10))\n\t\t\t\t\t\telem.currentTime += 10;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// bas | page bas\n\t\t\telse if ((ev.keyCode === 40) || (ev.keyCode === 34)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif (([1,2].has(elem.networkState)) && (elem.duration !== Infinity) && !isNaN(elem.duration)) {\n\t\t\t\t\tif (elem.currentTime > 10)\n\t\t\t\t\t\telem.currentTime -= 10;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.currentTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// +\n\t\t\telse if (ev.keyCode === 107) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1,2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.muted)\n\t\t\t\t\t\telem.muted = false;\n\t\t\t\t\tif (elem.volume < 0.8)\n\t\t\t\t\t\telem.volume += 0.2;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.volume = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// -\n\t\t\telse if (ev.keyCode === 109) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1,2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.muted)\n\t\t\t\t\t\telem.muted = false;\n\t\t\t\t\tif (elem.volume > 0.21)\n\t\t\t\t\t\telem.volume -= 0.2;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.volume = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// m\n\t\t\telse if (ev.keyCode === 77) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1,2].has(elem.networkState)) {\n\t\t\t\t\telem.muted = !elem.muted; // inverse\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// défilement de la page pour tous (renvoi sur actionScrollBrowser)\n\t\t// espace | page haut | page bas | fin | début | haut | bas\n\t\tif ([32, 33, 34, 35, 36, 38, 40].has(ev.keyCode)) {\n\n\t\t\t// empèche le défilement\n\t\t\tif (!ev.target || (!['INPUT','TEXTAREA','OPTION','SELECT'].has(ev.target.nodeName) && !ev.target.classList.contains('scrollable'))) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tev.stopPropagation();\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onFullscreen = function (ev) {\n\n\t\tvar res = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n\t\tif (ev) apijs.log('dialog:onFullscreen:' + (res ? 'in' : 'out'));\n\n\t\tapijs.dialog[res ? 'add' : 'remove']('fullscreen');\n\t};\n\n\tthis.onIframeLoad = function (elem) { // todo\n\n\t\telem.removeAttribute('class');\n\t\tapijs.dialog.remove('loading');\n\n\t\telem.contentWindow.document.addEventListener('keydown', window.parent.apijs.dialog.onKey);\n\t\telem.contentWindow.addEventListener('DOMMouseScroll', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t\telem.contentWindow.addEventListener('mousewheel', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t\telem.contentWindow.addEventListener('touchmove', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t};\n\n\tthis.onMediaLoad = function (ev) { // todo\n\n\t\tvar that = apijs.dialog, media = that.media, src, elem, elems;\n\t\tif (ev && ev.target) {\n\t\t\tsrc = ev.target.currentSrc || ev.target.src;\n\t\t\tapijs.log('dialog:onMediaLoad:' + ev.type + ' ' + (src ? src.slice(src.lastIndexOf('/') + 1) : ''));\n\t\t}\n\n\t\tif (media && ['load', 'durationchange'].has(ev.type)) {\n\t\t\tthat.remove('loading', 'error');\n\t\t\tmedia.style.visibility = 'visible';\n\t\t\tif (!media.hasAttribute('src') && (media.nodeName === 'IMG'))\n\t\t\t\tmedia.setAttribute('src', media.imageLoader.src);\n\t\t}\n\t\telse if (media && (ev.type === 'error')) {\n\t\t\tthat.toggle('loading', 'error');\n\t\t\tmedia.removeAttribute('style');\n\t\t\t// player vidéo (désactive l'option et active la suivante)\n\t\t\telem = apijs.html('.tracks.video select');\n\t\t\tif (elem && ev && ev.target) {\n\t\t\t\telems = elem.querySelectorAll('option');\n\t\t\t\tif ((elems.length > 0) && (elem.value.length > 0)) {\n\t\t\t\t\telems[elem.value].setAttribute('disabled', 'disabled');\n\t\t\t\t\telem.selectedIndex += 1;\n\t\t\t\t\t// charge la vidéo suivante (si erreur au clic sur le select)\n\t\t\t\t\tif ((ev.target.nodeName === 'VIDEO') && (elem.value !== ''))\n\t\t\t\t\t\tmedia.videoPlayer.actionVideo(elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.actionConfirm = function () { // todo\n\n\t\t// vérifie le dialogue d'options\n\t\t// arrêt du traitement si c'est pas bon\n\t\tif (this.has('options')) {\n\t\t\tif (this.callback(false, this.args) !== true)\n\t\t\t\treturn false;\n\t\t}\n\n\t\t// verrouille le dialogue et affiche le loader\n\t\tthis.add('lock', 'loading');\n\t\tthis.htmlSvgLoader(false);\n\n\t\t// masque les boutons et le texte du dialogue\n\t\tapijs.html('div.btns').style.visibility = 'hidden';\n\t\tapijs.html('div.bbcode').style.visibility = 'hidden';\n\n\t\t// appelle la fonction de rappel\n\t\t// ne déverrouille pas le dialogue\n\t\tself.setTimeout(function () {\n\t\t\tif ((this.t2) && (this.t2.nodeName === 'FORM'))\n\t\t\t\tthis.callback(this.t2.getAttribute('action'), this.args);\n\t\t\telse if (this.t2)\n\t\t\t\tthis.callback(this.args);\n\t\t}.bind(this), 12); // pour que ci-dessus this = this\n\n\t\treturn false; // très important\n\t};\n\n\n\t// GESTION DES CONTENEURS (private return this|boolean)\n\n\tthis.init = function (type, icon, isLocked) { // todo\n\n\t\tisLocked = (isLocked === true);\n\t\tif (typeof icon == 'string') {\n\t\t\ticon = icon.replace(this.ft, '').trim();\n\t\t\ticon = (icon.length > 0) ? (isLocked ? icon + ' lock' : icon) : (isLocked ? 'lock' : null);\n\t\t}\n\t\telse if (isLocked) {\n\t\t\ticon = 'lock';\n\t\t}\n\n\t\t// préparation\n\t\tif (this.t0)\n\t\t\tthis.clear(false);\n\n\t\t// css\n\t\tthis.klass.push('start');\n\t\tthis.klass.push(type);\n\n\t\tif (self.matchMedia('prefers-reduced-motion:reduce').matches)\n\t\t\tthis.klass.push('reduce');\n\n\t\tif (typeof icon == 'string')\n\t\t\tthis.klass = this.klass.concat(icon.split(' '));\n\n\t\t// création du fragment\n\t\tthis.t0 = document.createDocumentFragment();\n\n\t\t// surveillance des touches et du navigateur\n\t\tdocument.addEventListener('keydown', this.onKey);\n\t\tself.addEventListener('beforeunload', this.onCloseBrowser);\n\t\tself.addEventListener('DOMMouseScroll', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('mousewheel', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('touchmove', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('resize', this.onResizeBrowser);\n\n\t\t// restriction de la navigation\n\t\tif (apijs.config.dialog.restrictNavigation)\n\t\t\tdocument.querySelectorAll(this.ti).forEach(function (elem) { elem.setAttribute('tabindex', '-1'); });\n\n\t\treturn this;\n\t};\n\n\tthis.show = function (focus) { // todo\n\n\t\t// design\n\t\tthis.onResizeBrowser();\n\t\tthis.onFullscreen();\n\n\t\tif ((this.height > 0) && !this.has('photo', 'video'))\n\t\t\tthis.t2.style.minHeight = this.height + 'px';\n\n\t\t// affichage du dialogue sans/sans/avec transitions CSS\n\t\tvar old = apijs.html('#Dialog');\n\t\tif (old) {\n\t\t\tthis.toggle('start', 'ready');\n\t\t\tthis.t1 = old;\n\t\t\t// avant la vie était simple : this.t1.appendChild(this.t0.firstChild.firstChild);\n\t\t\t// maintenant il peut y avoir un second élément en plus de la div id=apijsBox (p.drag)\n\t\t\t// https://stackoverflow.com/a/24775765/2980105\n\t\t\tArray.prototype.slice.call(this.t0.firstChild.childNodes).forEach(function (node) {\n\t\t\t\tthis.t1.appendChild(node);\n\t\t\t}, this); // pour que ci-dessus this = this\n\t\t\tthis.t1.setAttribute('class', this.t2.getAttribute('class'));\n\t\t}\n\t\telse if (this.has('notransition')) {\n\t\t\tthis.toggle('start', 'ready');\n\t\t\tdocument.querySelector('body').appendChild(this.t0);\n\t\t}\n\t\telse {\n\t\t\tdocument.querySelector('body').appendChild(this.t0);\n\t\t\tself.setTimeout(function () { apijs.dialog.toggle('start', 'ready'); }, 12);\n\t\t}\n\n\t\t// fermeture des popups au clic\n\t\tif (apijs.config.dialog.closeOnClick && !this.has('progress', 'waiting', 'lock'))\n\t\t\tdocument.addEventListener('click', this.actionClose);\n\n\t\t// passage en plein écran\n\t\tif (this.has('photo', 'video')) {\n\n\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\tdocument.addEventListener('webkitfullscreenchange', this.onFullscreen);\n\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\tdocument.addEventListener('fullscreenchange', this.onFullscreen);\n\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\tdocument.addEventListener('mozfullscreenchange', this.onFullscreen);\n\t\t}\n\n\t\t// auto-focus\n\t\tif (focus === true)\n\t\t\tself.setTimeout(function () { apijs.html('input:not([readonly]),textarea:not([readonly]),select:not([disabled])').focus(); }, 12);\n\t\telse if (typeof focus == 'string')\n\t\t\tapijs.html(focus).focus();\n\n\t\treturn true;\n\t};\n\n\tthis.clear = function (isAll) { // todo\n\n\t\tif (isAll && this.xhr) {\n\t\t\tthis.callback = null; // très important\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\t// surveillance des touches et du navigateur (depuis initDialog)\n\t\tdocument.removeEventListener('keydown', this.onKey);\n\t\tself.removeEventListener('beforeunload', this.onCloseBrowser);\n\t\tself.removeEventListener('DOMMouseScroll', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('mousewheel', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('touchmove', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('resize', this.onResizeBrowser);\n\n\t\t// restriction de la navigation (depuis initDialog)\n\t\tif (apijs.config.dialog.restrictNavigation)\n\t\t\tdocument.querySelectorAll(this.ti).forEach(function (elem) { elem.removeAttribute('tabindex'); });\n\n\t\t// fermeture des popups au clic (depuis showDialog)\n\t\tif (apijs.config.dialog.closeOnClick)\n\t\t\tdocument.removeEventListener('click', this.actionClose);\n\n\t\t// spécial\n\t\tif (this.has('photo', 'video')) {\n\n\t\t\t// pour ne pas déclencher les fonctions\n\t\t\t// supprime tous les ontruc et les src\n\t\t\tif (this.has('video') && !this.has('videoiframe')) {\n\t\t\t\tthis.t2.querySelectorAll('video, source, track').forEach(function (elem) {\n\t\t\t\t\tfor (var name in elem) {\n\t\t\t\t\t\tif (name.indexOf('on') === 0)\n\t\t\t\t\t\t\telem[name] = null;\n\t\t\t\t\t}\n\t\t\t\t\telem.removeAttribute('src');\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.media.videoPlayer = null;\n\t\t\tthis.media.imageLoader = null;\n\n\t\t\t// passage en plein écran (depuis showDialog)\n\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\tdocument.removeEventListener('webkitfullscreenchange', this.onFullscreen);\n\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\tdocument.removeEventListener('fullscreenchange', this.onFullscreen);\n\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\tdocument.removeEventListener('mozfullscreenchange', this.onFullscreen);\n\t\t}\n\t\t// mémorise la hauteur du dialogue\n\t\telse {\n\t\t\tthis.height = parseFloat(self.getComputedStyle(this.t2).height);\n\t\t}\n\n\t\t// supprime le dialogue\n\t\tif (isAll) {\n\t\t\tthis.toggle('ready', 'end');\n\t\t\tthis.t1.remove();\n\t\t}\n\t\telse {\n\t\t\twhile (this.t1.firstChild)\n\t\t\t\tthis.t1.firstChild.remove();\n\t\t}\n\n\t\t// réinitialise toutes les variables (sauf ft/ti/ns)\n\t\tthis.klass = [];\n\t\tif (isAll) {\n\t\t\tthis.height = 0;\n\t\t\tthis.scroll = 0; // time\n\t\t\tthis.callback = null;\n\t\t\tthis.args = null;\n\t\t\tthis.xhr = null;\n\t\t}\n\t\tthis.media = null;\n\t\tthis.t0 = null; // fragment\n\t\tthis.t1 = null; // div id=apijsDialog\n\t\tthis.t2 = null; // div/form id=apijsBox\n\t\tthis.a = null;\n\t\tthis.b = null;\n\t\tthis.c = null;\n\t\tthis.d = null;\n\n\t\treturn true;\n\t};\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return this)\n\n\tthis.htmlParent = function (action, submit, drag) {\n\n\t\tthis.t1 = document.createElement('div');\n\t\tthis.t1.setAttribute('id', 'apijsDialog');\n\n\t\tif (typeof drag == 'string') {\n\n\t\t\tthis.t1.setAttribute('ondragenter', drag);\n\t\t\tthis.t1.setAttribute('ondragleave', drag);\n\t\t\tthis.t1.setAttribute('ondragover', drag);\n\t\t\tthis.t1.setAttribute('ondrop', drag);\n\n\t\t\tthis.a = document.createElement('p');\n\t\t\tthis.a.setAttribute('class', 'drag');\n\t\t\tthis.a.appendChild(apijs.i18n.translateNode(127));\n\t\t\tthis.t1.appendChild(this.a);\n\t\t}\n\n\t\tif (typeof action == 'string') {\n\t\t\tthis.t2 = document.createElement('form');\n\t\t\tthis.t2.setAttribute('action', action);\n\t\t\tthis.t2.setAttribute('method', 'post');\n\t\t\tthis.t2.setAttribute('enctype', 'multipart/form-data');\n\t\t\tthis.t2.setAttribute('onsubmit', 'return ' + submit);\n\t\t}\n\t\telse {\n\t\t\tthis.t2 = document.createElement('div');\n\t\t}\n\n\t\tthis.t2.setAttribute('id', 'apijsBox');\n\t\tthis.t1.appendChild(this.t2);\n\t\tthis.t0.appendChild(this.t1);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlContent = function (title, text) {\n\n\t\tif (title.length > 0) {\n\t\t\tthis.a = document.createElement('h1');\n\t\t\tthis.a.innerHTML = title.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\[/g, '<').replace(/]/g, '>');\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\tif (text.length > 0) {\n\t\t\tthis.a = document.createElement('div');\n\t\t\tthis.a.setAttribute('class', 'bbcode');\n\t\t\tif (text[0] !== '[') text = '[p]' + text + '[/p]';\n\t\t\tthis.a.innerHTML = text.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\[/g, '<').replace(/]/g, '>');\n\t\t\tthis.a.querySelectorAll('a.popup').forEach(function (elem) { elem.addEventListener('click', apijs.openTab); });\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnOk = function () {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'confirm');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(102));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnConfirm = function (type, click) {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', type);\n\t\t\tthis.b.setAttribute('class', 'confirm');\n\t\t\tif (type !== 'submit') this.b.setAttribute('onclick', click);\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(104));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'cancel');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(103));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnNavigation = function () {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'navigation noplaying');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('disabled', 'disabled');\n\t\t\tthis.b.setAttribute('class', 'prev');\n\t\t\tthis.b.setAttribute('id', 'apijsPrev');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.slideshow.actionPrev();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t//this.c.appendChild(apijs.i18n.translateNode(106));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('disabled', 'disabled');\n\t\t\tthis.b.setAttribute('class', 'next');\n\t\t\tthis.b.setAttribute('id', 'apijsNext');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.slideshow.actionNext();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t//this.c.appendChild(apijs.i18n.translateNode(107));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnClose = function (close) {\n\n\t\tif (close !== false) {\n\n\t\t\tthis.a = document.createElement('div');\n\t\t\tthis.a.setAttribute('class', 'close noplaying');\n\n\t\t\t\tthis.b = document.createElement('button');\n\t\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\t\tthis.b.setAttribute('class', 'close');\n\t\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(105));\n\n\t\t\t\tthis.b.appendChild(this.c);\n\n\t\t\tthis.a.appendChild(this.b);\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlUpload = function (input, isMultiple) {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns upload');\n\n\t\t\tthis.b = document.createElement('input');\n\t\t\tthis.b.setAttribute('type', 'file');\n\t\t\tthis.b.setAttribute('name', input);\n\t\t\tthis.b.setAttribute('id', 'apijsFile');\n\t\t\tif (isMultiple) this.b.setAttribute('multiple', 'multiple');\n\t\t\tthis.b.setAttribute('onchange', 'apijs.upload.actionChoose(this);');\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'browse');\n\t\t\tthis.b.setAttribute('onclick', 'this.previousSibling.click();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(isMultiple ? 109 : 108));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('div');\n\t\t\tthis.b.setAttribute('class', 'filenames scrollable');\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlSvgProgress = function () {\n\n\t\tthis.a = document.createElement('span');\n\t\tthis.a.setAttribute('class', 'info');\n\t\tthis.t2.appendChild(this.a);\n\n\t\tthis.a = document.createElement('svg');\n\t\tthis.a.setAttribute('id', 'apijsProgress');\n\n\t\t\tthis.b = document.createElement('rect');\n\t\t\tthis.b.setAttribute('class', 'auto');\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlSvgLoader = function (isDelayed) {\n\n\t\tthis.a = document.createElementNS(this.ns, 'svg');\n\t\tthis.a.setAttribute('class', 'loader');\n\n\t\t\tthis.b = document.createElementNS(this.ns, 'path');\n\t\t\tif (isDelayed !== false) this.b.setAttribute('style', 'opacity:0;');\n\t\t\tthis.b.setAttribute('d', 'M75.4 126.63a11.43 11.43 0 0 1-2.1-22.65 40.9 40.9 0 0 0 30.5-30.6 11.4 11.4 0 1 1 22.27 4.87h.02a63.77 63.77 0 0 1-47.8 48.05v-.02a11.38 11.38 0 0 1-2.93.37z');\n\n\t\t\t\tthis.c = document.createElementNS(this.ns, 'animateTransform');\n\t\t\t\tthis.c.setAttribute('attributeName', 'transform');\n\t\t\t\tthis.c.setAttribute('type', 'rotate');\n\t\t\t\tthis.c.setAttribute('from', '0 64 64');\n\t\t\t\tthis.c.setAttribute('to', '360 64 64');\n\t\t\t\tthis.c.setAttribute('dur', '5s');\n\t\t\t\tthis.c.setAttribute('repeatCount', 'indefinite');\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\t\t\tthis.c = document.createElementNS(this.ns, 'animate');\n\t\t\t\tthis.c.setAttribute('attributeName', 'opacity');\n\t\t\t\tthis.c.setAttribute('to', '1');\n\t\t\t\tthis.c.setAttribute('dur', '0.01s');\n\t\t\t\tthis.c.setAttribute('begin', '1s');\n\t\t\t\tthis.c.setAttribute('fill', 'freeze');\n\n\t\t\tif (isDelayed !== false) this.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlMedia = function (url, name, date, legend) {\n\n\t\tthis.a = document.createElement('dl');\n\t\tthis.a.setAttribute('class', 'media');\n\n\t\t\tthis.b = document.createElement('dt');\n\n\t\t\tif (this.has('photo')) {\n\t\t\t\tthis.media = document.createElement('img');\n\t\t\t\tthis.media.setAttribute('alt', legend.replace('\"', ''));\n\t\t\t}\n\t\t\telse if (url.indexOf('iframe') > 0) {\n\t\t\t\tthis.media = document.createElement('iframe');\n\t\t\t\tthis.media.setAttribute('type', 'text/html');\n\t\t\t\tthis.media.setAttribute('scrolling', 'no');\n\t\t\t\tthis.media.setAttribute('src', url);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.media = document.createElement('video');\n\t\t\t\tthis.media.setAttribute('controls', 'controls');\n\t\t\t\tthis.media.setAttribute('preload', 'metadata');\n\t\t\t}\n\n\t\t\tthis.media.setAttribute('id', 'apijsMedia');\n\t\t\tthis.b.appendChild(this.media);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('dd');\n\t\t\tthis.b.setAttribute('class', 'nomobile noplaying');\n\n\t\t\tif ((name !== 'false') || (date !== 'false')) {\n\n\t\t\t\tvar fileid = url.slice(url.lastIndexOf('/') + 1);\n\t\t\t\tthis.c = document.createElement('span');\n\n\t\t\t\t// name + date\n\t\t\t\tif ((name !== 'false') && (name !== 'auto') && (date !== 'false'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(name + ' (' + date + ') '));\n\t\t\t\t// name\n\t\t\t\telse if ((name !== 'false') && (name !== 'auto'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(name + ' '));\n\t\t\t\t// auto name + date\n\t\t\t\telse if ((name === 'auto') && (date !== 'false'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(fileid + ' (' + date + ') '));\n\t\t\t\t// auto name\n\t\t\t\telse if (name === 'auto')\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(fileid + ' '));\n\t\t\t\t// date\n\t\t\t\telse if (date !== 'false')\n\t\t\t\t\tthis.c.appendChild(document.createTextNode('(' + date + ') '));\n\n\t\t\t\tthis.b.appendChild(this.c);\n\t\t\t}\n\n\t\t\tthis.b.appendChild(document.createTextNode(legend));\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\t// au choix : photo / vidéo avec iframe / vidéo avec lecteur / vidéo simple\n\t\t// lecteur créé v5.2 / supprimé v5.3 / refait v6.0 / extrait v6.6\n\t\tif (this.has('photo')) {\n\t\t\tthis.media.imageLoader = new Image();\n\t\t\tthis.media.imageLoader.src = url;\n\t\t\tthis.media.imageLoader.onload = this.onMediaLoad;\n\t\t\tthis.media.imageLoader.onerror = this.onMediaLoad;\n\t\t}\n\t\telse if (url.indexOf('iframe') > 0) {\n\t\t\tthis.media.onload = function (ev) {\n\t\t\t\tthis.onIframeLoad(this.media);\n\t\t\t\tthis.onMediaLoad(ev);\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\t\t\tthis.add('videoiframe');\n\t\t}\n\t\telse if (apijs.startPlayer(this.media, url)) {\n\t\t\tthis.add('apijsvideoplayer');\n\t\t}\n\t\telse {\n\t\t\tthis.c = document.createElement('source');\n\t\t\tthis.c.setAttribute('src', url);\n\t\t\tthis.c.onerror = this.onMediaLoad;\n\t\t\tthis.media.appendChild(this.c);\n\t\t\tthis.media.ondurationchange = this.onMediaLoad;\n\t\t\tthis.media.onerror = this.onMediaLoad;\n\t\t\tthis.add('videosource');\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlHelp = function (isSlideshow, isVideo) {\n\n\t\tvar items, item, keys = [\n\t\t\tisSlideshow ? ['start', 149, 141] : [], // début/fin\n\t\t\tisSlideshow ? ['left', 'right', 142] : [],\n\t\t\tisVideo ? ['bottom', 'topk', 144] : [],\n\t\t\tisVideo ? ['minus', 'plus', 145] : [],\n\t\t\tisVideo ? ['M', 146] : [],\n\t\t\tisVideo ? ['P', 143] : [],\n\t\t\t['F11', 147],\n\t\t\t[150, 148] // échap\n\t\t];\n\n\t\tthis.a = document.createElement('ul');\n\t\tthis.a.setAttribute('class', 'kbd nomobile nofullscreen');\n\n\t\twhile (items = keys.shift()) {\n\n\t\t\tif (items.length > 0) {\n\n\t\t\t\tthis.b = document.createElement('li');\n\n\t\t\t\twhile (item = items.shift()) {\n\t\t\t\t\tif (items.length > 0) {\n\t\t\t\t\t\tthis.c = document.createElement('kbd');\n\t\t\t\t\t\tif (['M', 'P', 'F11'].has(item))\n\t\t\t\t\t\t\tthis.c.appendChild(document.createTextNode(item));\n\t\t\t\t\t\telse if (typeof item == 'string')\n\t\t\t\t\t\t\tthis.c.setAttribute('class', item);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(item));\n\t\t\t\t\t\tthis.b.appendChild(this.c);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.b.appendChild(apijs.i18n.translateNode(item));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.a.appendChild(this.b);\n\t\t\t}\n\t\t}\n\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlIframe = function (url) {\n\n\t\tthis.a = document.createElement('iframe');\n\t\tthis.a.setAttribute('src', url);\n\t\tthis.a.setAttribute('class', 'loading');\n\t\tthis.a.setAttribute('onload', 'apijs.dialog.onIframeLoad(this);');\n\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n};","/**\n * Created J/13/05/2010\n * Updated V/01/01/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.slideshow = function () {\n\n\t\"use strict\";\n\tthis.current = null;\n\n\n\t// AFFICHAGE DE LA BOÎTE DE DIALOGUE (public return void|boolean)\n\n\tthis.init = function () {\n\n\t\tvar i, j, elem, ids = apijs.config.slideshow.ids, hoverload = false;\n\n\t\tfor (i = 0; elem = apijs.html(ids + '.' + i, true); i++) {\n\n\t\t\thoverload = elem.classList.contains('hoverload');\n\n\t\t\tfor (j = 0; elem = apijs.html(ids + '.' + i + '.' + j, true); j++) {\n\t\t\t\telem.addEventListener('click', this.show);\n\t\t\t\tif (hoverload)\n\t\t\t\t\telem.addEventListener('mouseover', this.show);\n\t\t\t}\n\n\t\t\tif (elem = apijs.html(ids + '.' + i + '.99999', true))\n\t\t\t\telem.addEventListener('click', this.show);\n\t\t}\n\n\t\tthis.onPopState();\n\t};\n\n\tthis.onPopState = function () {\n\n\t\t// \\\\ au lieu de \\ sinon Bad or unnecessary escaping\n\t\tif (new RegExp('#(' + apijs.config.slideshow.ids + '[\\-\\\\.]\\\\d+[\\-\\\\.]\\\\d+)').test(self.location.href)) {\n\t\t\tvar id = RegExp.$1.replace(/-/g, '.');\n\t\t\tif (apijs.html(id, true) && !apijs.dialog.has('slideshow')) // Chrome 31 et Opera 19 passent 2 fois sans le !has\n\t\t\t\tapijs.slideshow.show(id, false);\n\t\t}\n\t\telse if (apijs.slideshow.current) {\n\t\t\tapijs.dialog.actionClose();\n\t\t}\n\t};\n\n\tthis.show = function (ev, push) { // todo\n\n\t\tvar source, show = false, media = {}, src, srcset, total, hash;\n\n\t\t// recherche de la source (élément a)\n\t\t// recherche des informations du média (1/4, id)\n\t\t// la source est soit une miniature (ev=click/mouseover/stringId) soit l'image principale (ev=click)\n\t\tif (typeof ev == 'string') {\n\t\t\tshow = true;\n\t\t\tsource = apijs.html(ev, true);\n\t\t\tmedia.id = ev;\n\t\t}\n\t\telse {\n\t\t\tev.preventDefault();\n\t\t\tsource = ev.target;\n\t\t\twhile (source.nodeName !== 'A')\n\t\t\t\tsource = source.parentNode;\n\n\t\t\t// stop sur miniature déjà à jour en mode gallery\n\t\t\tif ((ev.type === 'mouseover') && source.classList.contains('current'))\n\t\t\t\treturn false;\n\n\t\t\tmedia.id = source.getAttribute('id');\n\t\t}\n\n\t\t// recherche des informations du média (2/4, prefix|number|gallery)\n\t\tmedia.prefix = apijs.config.slideshow.ids + '.' + media.id.split('.')[1];\n\t\tmedia.number = parseInt(media.id.split('.')[2], 10);\n\t\tmedia.gallery = apijs.html(media.prefix + '.99999', true);\n\n\t\t// SI SOURCE N'EST PAS L'IMAGE PRINCIPALE DU MODE GALLERY\n\t\t// marque la source avec la class current\n\t\t// prend soin de supprimer les anciennes class current\n\t\t// v5.1 soit sur le lien (avant sur l'image elle même), soit sur le dl\n\t\tif (media.number !== 99999) {\n\n\t\t\tvar links = apijs.html(media.prefix, true).querySelectorAll('a[id][type]'),\n\t\t\t conts = apijs.html(media.prefix, true).querySelectorAll('dl');\n\n\t\t\tif (media.gallery || (links.length !== conts.length)) {\n\t\t\t\tlinks.forEach(function (elem) { elem.classList.remove('current'); });\n\t\t\t\tsource.setAttribute('class', 'current');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconts.forEach(function (elem) { elem.classList.remove('current'); });\n\t\t\t\tsource.parentNode.parentNode.setAttribute('class', 'current');\n\t\t\t}\n\t\t}\n\n\t\t// UNIQUEMENT EN MODE GALLERY\n\t\t// recherche des informations du média (3/4, [number]|config)\n\t\t// réaffecte la source sur la miniature et non sur l'image principale SI SOURCE = IMAGE PRINCIPALE\n\t\t// réaffecte le numéro du média sur la miniature et non sur l'image principale SI SOURCE = IMAGE PRINCIPALE\n\t\t// supprime l'adresse de l'image principale de la configuration du média (media.config = url|name|date|legend)\n\t\t// met à jour l'image principale SAUF SI SOURCE = IMAGE PRINCIPALE (puisque tout est déjà correct)\n\t\tif (media.gallery) {\n\n\t\t\tif (media.number === 99999) {\n\t\t\t\tshow = true;\n\t\t\t\tsource = (media.gallery.hasAttribute('class')) ? media.gallery.getAttribute('class') : media.prefix + '.0';\n\t\t\t\tsource = apijs.html(source, true);\n\t\t\t\tmedia.number = parseInt(source.getAttribute('id').split('.')[2], 10);\n\t\t\t\tmedia.id = media.id.replace(99999, media.number);\n\t\t\t}\n\n\t\t\tmedia.config = source.querySelector('input').getAttribute('value').split('|');\n\n\t\t\tsrc = media.config.shift();\n\t\t\tif (src.indexOf(';') > 0) {\n\t\t\t\tsrc = src.split(';');\n\t\t\t\tsrcset = src[1].trim();\n\t\t\t\tsrc = src[0].trim();\n\t\t\t}\n\n\t\t\tmedia.gallery.setAttribute('href', source.getAttribute('href'));\n\t\t\tmedia.gallery.querySelector('img').setAttribute('src', src);\n\t\t\tmedia.gallery.querySelector('img').setAttribute('srcset', srcset ? srcset : '');\n\t\t\tmedia.gallery.querySelector('img').setAttribute('alt', source.querySelector('img').getAttribute('alt'));\n\t\t\tmedia.gallery.setAttribute('class', media.id);\n\t\t}\n\t\t// UNIQUEMENT EN MODE ALBUM\n\t\t// recherche des informations du média (3/4, config)\n\t\telse {\n\t\t\tshow = true;\n\t\t\tmedia.config = source.querySelector('input').getAttribute('value').split('|');\n\t\t}\n\n\t\t// recherche des informations du média (4/4, url|type|styles)\n\t\t// défini le type de dialogue à partir du mimetype du lien de la source si cela est possible\n\t\tmedia.url = source.getAttribute('href');\n\t\tmedia.type = source.getAttribute('type').substr(0, 5).replace('image', 'dialogPhoto').replace('video', 'dialogVideo');\n\t\tmedia.type = (media.type.indexOf('dialog') === 0) ? media.type : 'dialogPhoto';\n\t\tmedia.styles = apijs.html(media.prefix, true).getAttribute('class').replace(/gallery|album/g, '').trim();\n\n\t\t// demande l'affichage du dialogue\n\t\t// lors d'un clic sur l'image principale du mode gallery\n\t\t// ou lors d'un clic sur les miniatures en mode album\n\t\t// ou lors d'un appel direct\n\t\tif (show) {\n\n\t\t\tapijs.dialog[media.type](media.url, media.config[0], media.config[1], media.config[2], media.styles);\n\n\t\t\ttotal = apijs.html(media.prefix, true).querySelectorAll('a[id][type]').length - (media.gallery ? 2 : 1);\n\t\t\tapijs.slideshow.current = {\n\t\t\t\tnumber: media.number,\n\t\t\t\tfirst: media.prefix + '.0',\n\t\t\t\tprev: (media.number > 0) ? media.prefix + '.' + (media.number - 1) : null,\n\t\t\t\tnext: (media.number < total) ? media.prefix + '.' + (media.number + 1) : null,\n\t\t\t\tlast: media.prefix + '.' + total,\n\t\t\t\ttotal: total\n\t\t\t};\n\n\t\t\t// boutons précédent et suivant\n\t\t\tif (apijs.slideshow.current.prev)\n\t\t\t\tapijs.html('#Prev').removeAttribute('disabled');\n\t\t\tif (apijs.slideshow.current.next)\n\t\t\t\tapijs.html('#Next').removeAttribute('disabled');\n\n\t\t\t// gestion de l'historique\n\t\t\t// met à jour l'ancre uniquement si l'utilisateur ne joue pas avec son historique\n\t\t\tif (apijs.config.slideshow.anchor && (typeof history.pushState == 'function') && ((typeof push == 'boolean') ? push : true)) {\n\t\t\t\thash = self.location.href;\n\t\t\t\thash = (hash.indexOf('#') > 0) ? hash.slice(0, hash.indexOf('#')) : hash;\n\t\t\t\thash += '#' + (media.prefix + '.' + ((media.number === 99999) ? 0 : media.number)).replace(/\\./g,'-');\n\t\t\t\thistory.pushState({}, '', hash);\n\t\t\t}\n\t\t}\n\n\t\treturn show;\n\t};\n\n\n\t// GESTION DES INTERACTIONS (public return boolean)\n\n\tthis.actionFirst = function () {\n\n\t\tif (this.current && (this.current.number > 0) && (this.current.number <= this.current.total))\n\t\t\treturn this.show(this.current.first);\n\n\t\treturn false;\n\t};\n\n\tthis.actionPrev = function () {\n\n\t\tif (this.current && this.current.prev && (this.current.number > 0))\n\t\t\treturn this.show(this.current.prev);\n\n\t\treturn false;\n\t};\n\n\tthis.actionNext = function () {\n\n\t\tif (this.current && this.current.next && (this.current.number < this.current.total))\n\t\t\treturn this.show(this.current.next);\n\n\t\treturn false;\n\t};\n\n\tthis.actionLast = function () {\n\n\t\tif (this.current && (this.current.number >= 0) && (this.current.number < this.current.total))\n\t\t\treturn this.show(this.current.last);\n\n\t\treturn false;\n\t};\n};","/**\n * Created L/13/04/2009\n * Updated J/23/09/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.upload = function () {\n\n\t\"use strict\";\n\tthis.title = null;\n\tthis.action = null;\n\tthis.input = null;\n\tthis.onemax = 0; // taille d'un seul fichier\n\tthis.allmax = 0; // taille de tous les fichiers\n\tthis.exts = null;\n\tthis.callback = null;\n\tthis.args = null;\n\tthis.icon = null;\n\n\tthis.files = [];\n\tthis.start = 0; // time\n\tthis.end = 0; // time\n\n\n\t// AFFICHAGE DE LA BOÎTE DE DIALOGUE (public return boolean)\n\n\tthis.sendFile = function (title, action, input, onemax, exts, callback, args, icon) {\n\n\t\tvar res = this.sendFiles(title, action, input, onemax, 0, exts, callback, args, icon);\n\t\tif (!res) console.error('apijs.upload.sendFile invalid arguments', arguments);\n\n\t\treturn res;\n\t};\n\n\tthis.sendFiles = function (title, action, input, onemax, allmax, exts, callback, args, icon) {\n\n\t\tthis.files = [];\n\t\tif (title !== true) {\n\t\t\tthis.title = title;\n\t\t\tthis.action = action;\n\t\t\tthis.input = input;\n\t\t\tthis.onemax = onemax;\n\t\t\tthis.allmax = allmax;\n\t\t\tthis.exts = (typeof exts == 'string') ? exts.split(',') : ['*'];\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\tthis.icon = icon;\n\t\t}\n\n\t\tif ((typeof this.title == 'string') && (typeof this.action == 'string') && (typeof this.input == 'string') &&\n\t\t (typeof this.onemax == 'number') && (typeof this.allmax == 'number') && (typeof this.callback == 'function')) {\n\n\t\t\tvar text, multiple = this.allmax > 0;\n\n\t\t\tif (this.exts.join() === '*')\n\t\t\t\ttext = apijs.i18n.translate(161);\n\t\t\telse if (this.exts.length === 1)\n\t\t\t\ttext = apijs.i18n.translate(162, this.exts.join());\n\t\t\telse\n\t\t\t\ttext = apijs.i18n.translate(163, this.exts.slice(0, -1).join(', '), this.exts.slice(-1));\n\n\t\t\ttext += '[br]' + apijs.i18n.translate(\n\t\t\t\tmultiple ? 165 : 164, // clef de traduction\n\t\t\t\tapijs.formatNumber(this.onemax), // taille d'un fichier\n\t\t\t\tmultiple ? apijs.formatNumber(this.allmax) : '' // taille de tous les fichiers\n\t\t\t).replace('|', '[br]');\n\n\t\t\treturn apijs.dialog.dialogFormUpload(this.title, text, this.action, this.input, multiple, this.icon);\n\t\t}\n\n\t\tif ((typeof this.allmax != 'number') || (this.allmax > 0))\n\t\t\tconsole.error('apijs.upload.sendFiles invalid arguments', arguments);\n\n\t\treturn false;\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private return void)\n\n\tthis.actionDrag = function (ev) {\n\n\t\tif (ev.type === 'dragenter') {\n\t\t\tapijs.dialog.add('drag');\n\t\t}\n\t\telse if (ev.type === 'dragleave') {\n\t\t\tapijs.dialog.remove('drag');\n\t\t}\n\t\telse if (ev.dataTransfer && ev.dataTransfer.files && (ev.dataTransfer.files.length > 0)) {\n\t\t\tthis.actionChoose(ev.dataTransfer);\n\t\t\tapijs.dialog.remove('drag');\n\t\t}\n\n\t\tev.stopPropagation();\n\t\tev.preventDefault();\n\t};\n\n\tthis.actionChoose = function (elem) {\n\n\t\tvar html = [], size = 0, btn = apijs.html('button.confirm');\n\t\tthis.files = [];\n\n\t\tif (this.exts) {\n\n\t\t\t// 1048576 octet = 1 Mo\n\t\t\t//Array.prototype.forEach.call((this.allmax > 0) ? elem.files : Array.prototype.slice.call(elem.files, 0, 1), function (file, idx) {\n\t\t\tArray.prototype.slice.call(elem.files, 0, (this.allmax > 0) ? 999 : 1).forEach(function (file, idx) {\n\n\t\t\t\tvar txt = file.size / 1048576;\n\t\t\t\ttxt = apijs.formatNumber((txt < 0.01) ? 0.01 : txt);\n\t\t\t\ttxt = ((this.allmax > 0) ? '<td class=\"nb\">' + (idx + 1) + '</td>' : '') +\n\t\t\t\t\t'<td class=\"name\">' + file.name + '</td><td class=\"size\">' + apijs.i18n.translate(166, txt) + '</td>';\n\n\t\t\t\tif ((this.exts.join() !== '*') && !this.exts.has(file.name.slice(file.name.lastIndexOf('.') + 1).toLowerCase())) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(167) + '</td>';\n\t\t\t\t}\n\t\t\t\telse if (file.size > (this.onemax * 1048576)) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(168) + '</td>';\n\t\t\t\t}\n\t\t\t\telse if (file.size <= 0) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(169) + '</td>';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttxt += '<td></td>';\n\t\t\t\t\tthis.files.push(file);\n\t\t\t\t}\n\n\t\t\t\thtml.push('<tr>' + txt + '</tr>');\n\t\t\t\tsize += file.size / 1048576;\n\n\t\t\t}, this); // pour que ci-dessus this = this\n\n\t\t\t// multiple\n\t\t\tif ((this.allmax > 0) && (size >= this.allmax)) {\n\t\t\t\thtml.push('<tr class=\"tt\"><td></td><td></td><td class=\"size\">' + apijs.i18n.translate(166, apijs.formatNumber(size)) + '</td><td class=\"err\">' + apijs.i18n.translate(168) + '</td></tr>');\n\t\t\t}\n\n\t\t\t// ok ou ko\n\t\t\tapijs.html('div.filenames').innerHTML = '<table>' + html.join('') + '</table>';\n\t\t\tif (apijs.html('div.filenames .err')) {\n\t\t\t\tbtn.setAttribute('disabled', 'disabled');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtn.removeAttribute('disabled');\n\t\t\t\tbtn.focus();\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.actionConfirm = function () {\n\n\t\tif (this.files.length > 0) {\n\n\t\t\tvar form = new FormData(), xhr = new XMLHttpRequest(), tmp;\n\t\t\txhr.open('POST', this.action + ((this.action.indexOf('?') > 0) ? '&isAjax=true' : '?isAjax=true'), true);\n\n\t\t\t// token\n\t\t\tif (typeof apijs.config.upload.tokenValue == 'string') {\n\t\t\t\txhr.setRequestHeader(apijs.config.upload.tokenName, apijs.config.upload.tokenValue);\n\t\t\t\tform.append(apijs.config.upload.tokenName, apijs.config.upload.tokenValue);\n\t\t\t}\n\n\t\t\t// champs supplémentaires\n\t\t\ttmp = apijs.serialize(apijs.dialog.t2);\n\t\t\tif (tmp.length > 3) {\n\t\t\t\ttmp.split('&').forEach(function (data) {\n\t\t\t\t\tdata = data.split('=');\n\t\t\t\t\tform.append(data[0], data[1]);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// fichier(s)\n\t\t\tthis.files.forEach(function (file, idx, files) {\n\t\t\t\tform.append(((files.length > 1) && (this.input.indexOf('[') < 0)) ? this.input + '_' + idx : this.input, file);\n\t\t\t}, this); // pour que ci-dessus this = this\n\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=637002\n\t\t\t// https://stackoverflow.com/a/15491086\n\t\t\t// loadstart - When the request starts\n\t\t\t// progress - While sending and loading data\n\t\t\t// load - When the request has successfully completed even if the server hasn't responded that it finished\n\t\t\t// loadend - When the request has completed even if the server hasn't responded that it finished processing the request\n\t\t\t// error - When the request has failed\n\t\t\t// abort - When the request has been aborted (by invoking the abort method)\n\t\t\t// timeout - When the author specified timeout has passed before the request could complete\n\t\t\txhr.onreadystatechange = function (text) {\n\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\ttext = xhr.responseText.trim();\n\t\t\t\t\tif ([0, 200].has(xhr.status)) {\n\t\t\t\t\t\tself.dispatchEvent(new CustomEvent('apijsajaxresponse', { detail: { from: 'apijs.upload.send', xhr: xhr } }));\n\t\t\t\t\t\tapijs.log('upload:onreadystatechange status:200 message:' + text);\n\t\t\t\t\t\tif (text.indexOf('success-') === 0) {\n\t\t\t\t\t\t\tthis.updateTitle();\n\t\t\t\t\t\t\tthis.callback(text.slice(8), this.args);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.onError(195, text);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tapijs.log('upload:onreadystatechange status:' + xhr.status + ' message: ' + text);\n\t\t\t\t\t\tthis.onError(194, xhr.status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\n\t\t\txhr.upload.onloadstart = this.onStart.bind(this);\n\t\t\txhr.upload.onprogress = this.onProgress.bind(this);\n\t\t\txhr.upload.onload = this.onProgress.bind(this);\n\t\t\txhr.upload.onerror = this.onError.bind(this);\n\t\t\txhr.send(form);\n\t\t}\n\t\telse {\n\t\t\tapijs.html('button.browse').focus();\n\t\t}\n\n\t\treturn false; // très important\n\t};\n\n\tthis.onStart = function () {\n\n\t\tthis.start = this.end = Math.round(new Date().getTime() / 1000);\n\t\tapijs.dialog.dialogProgress(this.title, apijs.i18n.translate(125), this.icon);\n\t};\n\n\tthis.onError = function (key, txt) {\n\n\t\tthis.updateTitle();\n\n\t\tif (typeof key == 'number')\n\t\t\ttxt = '[p]' + apijs.i18n.translate(key) + '[/p] ' + txt;\n\t\telse if (typeof txt != 'string')\n\t\t\ttxt = '[p]' + apijs.i18n.translate(193) + '[/p]';\n\n\t\ttxt += '[p]' + apijs.i18n.translate(196, 'href=\"apijs://restart\" onclick=\"apijs.upload.sendFile(true); return false;\"') + '[/p]';\n\t\tapijs.dialog.dialogInformation(this.title, txt, (typeof this.icon == 'string') ? 'upload error ' + this.icon : 'upload error');\n\t};\n\n\tthis.onProgress = function (ev) {\n\n\t\tvar percent, key, rate, time, elapsedTime, totalTime, currentTime = Math.round(new Date().getTime() / 1000), mins;\n\n\t\t// Cherche à actualiser la barre de progression toutes les 2 secondes (uniquement de 1 à 99%)\n\t\t// affiche le pourcentage, la vitesse à partir de 25 secondes, le temps restant à partir de 40 secondes ET 90 secondes de temps total\n\t\tif (ev.lengthComputable && (ev.type === 'progress') && (currentTime >= (this.end + 2))) {\n\n\t\t\tthis.end = currentTime;\n\n\t\t\t// Math.floor = entier inférieur, Math.ceil = entier supérieur, Math.round = au mieux\n\t\t\t// ev.loaded = nombre d'octet envoyé sur le serveur\n\t\t\t// ev.total = nombre d'octet à envoyer sur le serveur\n\t\t\t// pourcentage = nombre d'octet envoyé * 100 / nombre d'octet à envoyer\n\t\t\tpercent = Math.floor((ev.loaded * 100) / ev.total);\n\n\t\t\tif ((percent > 0) && (percent < 100)) {\n\n\t\t\t\tthis.updateTitle(percent);\n\n\t\t\t\t// temps écoulé = maintenant - départ\n\t\t\t\t// temps total = temps écoulé * 100 / pourcentage + 10 secondes\n\t\t\t\telapsedTime = currentTime - this.start;\n\t\t\t\ttotalTime = elapsedTime * 100 / percent + 10;\n\n\t\t\t\tif (elapsedTime > 24) {\n\n\t\t\t\t\t// temps restant = temps total - temps écoulé\n\t\t\t\t\ttime = Math.round(totalTime - elapsedTime);\n\t\t\t\t\ttime = Math.ceil(time / 10) * 10;\n\t\t\t\t\tmins = Math.ceil(time / 60);\n\n\t\t\t\t\t// vitesse = taille téléchargé / temps écoulé / 1024\n\t\t\t\t\trate = Math.round(ev.loaded / elapsedTime / 1024);\n\n\t\t\t\t\tif ((elapsedTime < 40) || (totalTime < 90)) { key = 184; time = null; } // \"§% - § ko/s\"\n\t\t\t\t\telse if (mins > 1) { key = 181; time = mins; } // \"§% - § ko/s - § minutes restantes\"\n\t\t\t\t\telse if (time > 50) { key = 182; time = 1; } // \"§% - § ko/s - § minute restante\"\n\t\t\t\t\telse { key = 183; } // \"§% - § ko/s - § secondes restantes\"\n\t\t\t\t}\n\n\t\t\t\tthis.updateProgress(percent, key, rate, time);\n\t\t\t}\n\t\t}\n\t\t// Cherche à actualiser la barre de progression lorsque l'envoi du fichier est terminé (donc à 100%)\n\t\t// affiche le pourcentage, le temps total à partir de 20 secondes, la vitesse si possible\n\t\telse if (ev.type === 'load') {\n\n\t\t\t// temps total = temps actuel - temps du départ\n\t\t\ttime = Math.round(new Date().getTime() / 1000) - this.start;\n\t\t\tmins = Math.ceil(time / 60);\n\n\t\t\t// vitesse = taille total / temps total / 1024\n\t\t\trate = Math.round(ev.loaded / time / 1024);\n\n\t\t\tif ((rate > 0) && (rate !== Infinity)) {\n\t\t\t\tif (mins > 1) { key = 185; time = mins; } // \"§% - à § ko/s en § minutes\"\n\t\t\t\telse if (time > 50) { key = 186; time = 1; } // \"§% - à § ko/s en § minute\"\n\t\t\t\telse if (time > 20) { key = 187; } // \"§% - à § ko/s en § secondes\"\n\t\t\t\telse { key = 188; time = null; } // \"§% - à § ko/s\"\n\t\t\t}\n\t\t\telse {\n\t\t\t\trate = null; time = null; // 100%\n\t\t\t}\n\n\t\t\tthis.updateTitle(100);\n\t\t\tthis.updateProgress(100, key, rate, time);\n\t\t}\n\t};\n\n\tthis.updateProgress = function (percent, key, rate, time) {\n\n\t\tvar rect = apijs.html('rect'), text = apijs.html('span.info'), data;\n\n\t\tif (percent > 99) {\n\t\t\tdata = '100%';\n\t\t\trect.setAttribute('class', 'end');\n\t\t\trect.style.width = '';\n\t\t\tvar elem = apijs.html('p');\n\t\t\telem.setAttribute('data-old', elem.textContent);\n\t\t\telem.setAttribute('data-new', apijs.i18n.translate(126));\n\t\t\telem.setAttribute('class', 'anim');\n\t\t\telem.textContent = '';\n\t\t}\n\t\telse {\n\t\t\trect.style.width = data = percent + '%';\n\t\t\tif (rect.hasAttribute('class'))\n\t\t\t\trect.removeAttribute('class');\n\t\t}\n\n\t\tif ((typeof key == 'number') && (typeof rate == 'number') && (typeof time == 'number'))\n\t\t\tdata = apijs.i18n.translate(key, percent, apijs.formatNumber(rate, false), time);\n\t\telse if ((typeof key == 'number') && (typeof rate == 'number'))\n\t\t\tdata = apijs.i18n.translate(key, percent, apijs.formatNumber(rate, false));\n\n\t\ttext.textContent = data;\n\t};\n\n\tthis.updateTitle = function (percent) {\n\n\t\tif (typeof percent == 'number') {\n\t\t\tdocument.title = (/^\\d{1,3}% - /.test(document.title)) ?\n\t\t\t\tpercent + '% - ' + document.title.slice(document.title.indexOf(' - ') + 3) : percent + '% - ' + document.title;\n\t\t}\n\t\telse if (/^\\d{1,3}% - /.test(document.title)) {\n\t\t\tdocument.title = document.title.slice(document.title.indexOf(' - ') + 3);\n\t\t}\n\t};\n};"],"names":["Array","prototype","has","needle","key","hasOwnProperty","this","window","NodeList","forEach","callback","that","i","length","call","apijs","core","version","config","lang","debug","dialog","closeOnClick","restrictNavigation","player","slideshow","ids","anchor","upload","tokenName","tokenValue","start","elem","console","info","toString","split","join","document","getElementById","Error","querySelector","getAttribute","indexOf","error","i18n","self","dispatchEvent","CustomEvent","init","querySelectorAll","startPlayer","addEventListener","onPopState","Object","keys","data","formatNumber","nb","dec","str","dgt","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","format","ignore","toFixed","replace","url","videoPlayer","parentNode","classList","add","toArray","slice","openTab","ev","preventDefault","href","open","log","txt","html","selector","id","t1","requestFullscreen","webkitFullscreenElement","webkitCancelFullScreen","mozFullScreenElement","mozCancelFullScreen","fullscreenElement","cancelFullScreen","webkitRequestFullscreen","mozRequestFullScreen","serialize","form","filter","elements","idx","name","disabled","type","options","selected","push","encodeURIComponent","value","checked","bind","cs","103","104","105","106","107","108","132","133","134","135","142","143","144","145","146","148","149","150","de","109","124","147","161","162","163","164","167","168","169","181","182","183","185","186","187","188","191","192","193","194","195","196","el","102","131","en","125","126","127","141","165","166","184","es","fr","hu","it","ja","nl","pl","pt","ptbr","ro","ru","sk","tr","uk","zh","toLowerCase","translate","word","translation","arguments","translateNode","createTextNode","apply","changeLang","select","c","root","target","t","createDocumentFragment","a","createElement","b","appendChild","textContent","attributes","attribute","setAttribute","firstChild","innerHTML","replaceChild","video","stalled","subload","autoRun","removeAttribute","onloadedmetadata","onTimeupdate","onProgress","onVideotrack","onAudiotrack","onstalled","onWaiting","onplaying","onPlay","onpause","onended","onprogress","ontimeupdate","onseeking","onseeked","onwaiting","onloadstart","oncanplay","onclick","actionPlay","onvolumechange","actionVolume","ondurationchange","onMediaLoad","onerror","htmlSvgPlayer","htmlSource","xhr","XMLHttpRequest","onreadystatechange","readyState","detail","from","childNodes","abort","status","nbv","nbt","responseText","trim","shift","htmlOption","htmlTrack","updateSelect","textTracks","send","css","total","adjust","tracks","videoTracks","auto","language","selectedIndex","Math","max","actionVideotrack","audioTracks","actionAudiotrack","hh","mm","ss","time","currentTime","duration","text","isNaN","Infinity","floor","style","width","buffer","buffered","node","remove","end","networkState","paused","ended","play","pause","offsetWidth","clientX","offsetLeft","offsetParent","volume","muted","actionPosition","enabled","blur","actionTexttrack","mode","actionVideo","src","actionFullscreen","res","d","onchange","webkitFullscreenEnabled","fullscreenEnabled","mozFullScreenEnabled","onload","lastIndexOf","track","label","klass","height","scroll","args","ft","ti","ns","media","t0","t2","dialogInformation","title","icon","htmlParent","htmlContent","htmlBtnOk","show","dialogConfirmation","htmlBtnConfirm","dialogFormOptions","action","dialogFormUpload","input","multiple","htmlUpload","dialogProgress","htmlSvgProgress","dialogWaiting","htmlSvgLoader","dialogPhoto","date","legend","htmlMedia","htmlHelp","htmlBtnClose","htmlBtnNavigation","dialogVideo","dialogIframe","close","htmlIframe","dialogAjax","update","splice","toggle","search","actionClose","history","pushState","RegExp","test","location","clear","onCloseBrowser","stopPropagation","m","returnValue","onResizeBrowser","body","clientWidth","onScrollBrowser","brk","nodeName","Date","getTime","wheelDelta","contains","scrollTop","scrollHeight","offsetHeight","onScrollIframe","defaultView","innerHeight","pageYOffset","onKey","ctrlKey","keyCode","altKey","actionLast","actionFirst","actionPrev","actionNext","onFullscreen","onIframeLoad","contentWindow","parent","passive","elems","currentSrc","visibility","hasAttribute","imageLoader","actionConfirm","setTimeout","isLocked","matchMedia","matches","concat","focus","minHeight","old","isAll","removeEventListener","parseFloat","getComputedStyle","submit","drag","click","isMultiple","isDelayed","createElementNS","fileid","Image","isSlideshow","isVideo","items","item","current","j","hoverload","$1","source","conts","prefix","number","parseInt","gallery","links","srcset","substr","styles","first","prev","next","last","hash","onemax","allmax","exts","files","sendFile","sendFiles","actionDrag","dataTransfer","actionChoose","size","btn","file","tmp","FormData","setRequestHeader","append","updateTitle","onError","onStart","round","percent","rate","elapsedTime","mins","lengthComputable","loaded","totalTime","ceil","updateProgress","rect"],"mappings":";;;;;GAkBKA;MAAMC,UAAUC,MACpBF,MAAMC,UAAUC,IAAM,SAAUC,EAAQC,GACvC,GAAID,aAAkBH,OACrB,IAAKI,KAAOD,EAAQ,GAAIA,EAAOE,eAAeD,IACzCE,KAAKJ,IAAIC,EAAOC,IACnB,OAAO,OAIT,IAAKA,KAAOE,KAAM,GAAIA,KAAKD,eAAeD,IACrCE,KAAKF,KAASD,EACjB,OAAO,EAGV,OAAO,IAILI,OAAOC,WAAaA,SAASP,UAAUQ,UAC1CD,SAASP,UAAUQ,QAAU,SAAUC,EAAUC,EAAMC,GAEtD,IADAD,EAAOA,GAAQJ,OACVK,EAAI,EAAGA,EAAIN,KAAKO,OAAQD,IAC5BF,EAASI,KAAKH,EAAML,KAAKM,GAAIA,EAAGN,QAInC,IAAIS,MAAQ,IAAI,wBAGfT,KAAKU,KAAO,GACZV,KAAKW,QAAU,IAEfX,KAAKY,OAAS,CACbC,KAAM,OACNC,OAAO,EAEPC,OAAQ,CACPC,cAAc,EACdC,oBAAoB,EACpBC,QAAQ,GAETC,UAAW,CACVC,IAAK,YACLC,QAAQ,GAETC,OAAQ,CACPC,UAAW,eACXC,WAAY,OAIdxB,KAAKyB,MAAQ,WAEZ,IAAIC,EAIJ,GADAC,QAAQC,KAAK,SAAW5B,KAAKW,QAAQkB,WAAWC,MAAM,IAAIC,KAAK,KAAO,mCAClEC,SAASC,eAAe,cAC3B,MAAM,IAAIC,MAAM,0CAEbR,EAAOM,SAASG,cAAc,wCAC7BT,EAAKU,aAAa,QAAQC,QAAQ,eAAiB,GACtDV,QAAQW,MAAM,qFAEZZ,EAAOM,SAASG,cAAc,oCAC7BT,EAAKU,aAAa,OAAOC,QAAQ,MAAQrC,KAAKW,SAAW,GAC5DgB,QAAQW,MAAM,2EAA6EtC,KAAKW,SAIlGX,KAAKuC,KAAO,IAAIvC,KAAKU,KAAK6B,KAE1BvC,KAAKe,OAAS,IAAIf,KAAKU,KAAKK,OAC5Bf,KAAKsB,OAAS,IAAItB,KAAKU,KAAKY,OAC5BtB,KAAKmB,UAAY,IAAInB,KAAKU,KAAKS,UAC/BqB,KAAKC,cAAc,IAAIC,YAAY,oBAGnC1C,KAAKuC,KAAKI,OACV3C,KAAKmB,UAAUwB,OAEfX,SAASY,iBAAiB,+BAA+BzC,QAAQ,SAAUuB,GAC1EjB,MAAMoC,YAAYnB,EAAMA,EAAKU,aAAa,eAG3CI,KAAKM,iBAAiB,WAAY9C,KAAKmB,UAAU4B,YACjDP,KAAKM,iBAAiB,aAAc9C,KAAKmB,UAAU4B,YAE/C/C,KAAKY,OAAOE,QACfa,QAAQC,KAAK,8BAAgCoB,OAAOC,KAAKjD,KAAKuC,KAAKW,MAAMnB,KAAK,MAC9EJ,QAAQC,KAAK,0BAA4B5B,KAAKY,OAAOC,MACrDc,QAAQC,KAAK,+BAIdY,KAAKC,cAAc,IAAIC,YAAY,eAGpC1C,KAAKmD,aAAe,SAAUC,EAAIC,GAGjC,IAAsEC,EAAlEC,EAAqB,iBAAPF,EAAmBA,GAAgB,IAARA,EAAiB,EAAI,EAGlE,IACCC,EAAM,IAAIE,KAAKC,aAAazD,KAAKY,OAAOC,KAAM,CAAE6C,sBAAuBH,EAAKI,sBAAuBJ,IAAOK,OAAOR,GAElH,MAAOS,GACNP,EAAMF,EAAGU,QAAQP,GAIlB,MAAsB,iBAAPF,EAAmBC,EAAMA,EAAIS,QAAQ,UAAW,KAGhE/D,KAAK6C,YAAc,SAAUnB,EAAMsC,GAElC,OAAkC,IAA9BhE,KAAKY,OAAOG,OAAOG,QACtBQ,EAAKuC,YAAc,IAAIjE,KAAKU,KAAKQ,OAAOQ,EAAMsC,GAC9CtC,EAAKwC,WAAWC,UAAUC,IAAI,qBACvB,GAGgC,mBAA7BpE,KAAKY,OAAOG,OAAOG,SAC7BlB,KAAKY,OAAOG,OAAOG,OAAOQ,EAAMsC,IACzB,IAMThE,KAAKqE,QAAU,SAAUnB,GACxB,OAAOxD,MAAMC,UAAU2E,MAAM9D,KAAK0C,EAAM,IAGzClD,KAAKuE,QAAU,SAAUC,GACxBA,EAAGC,iBACoB,EAAnBzE,KAAK0E,KAAKnE,QACbiC,KAAKmC,KAAK3E,KAAK0E,OAGjB1E,KAAK4E,IAAM,SAAUC,GAChB7E,KAAKY,OAAOE,OACfa,QAAQC,KAAK,SAAWiD,IAG1B7E,KAAK8E,KAAO,SAAUC,EAAUC,GAC/B,OAAY,IAAPA,GAA2C,IAA1BD,EAAS1C,QAAQ,KAC/BL,SAASC,eAAe8C,EAAShB,QAAQ,IAAK,UAC7C/D,KAAKe,OAAOkE,GACbjF,KAAKe,OAAOkE,GAAG9C,cAAc4C,GAE7B,MAGT/E,KAAKkF,kBAAoB,SAAUxD,GAC9BM,SAASmD,wBACZnD,SAASoD,yBACDpD,SAASqD,qBACjBrD,SAASsD,sBACDtD,SAASuD,kBACjBvD,SAASwD,mBACD9D,EAAK+D,wBACb/D,EAAK+D,0BACG/D,EAAKwD,kBACbxD,EAAKwD,oBACGxD,EAAKgE,sBACbhE,EAAKgE,wBAGP1F,KAAK2F,UAAY,SAAUC,EAAMC,GAEhC,IAAI3C,EAAO,GAoBX,OAnBA2C,EAA6B,iBAAVA,EAAsBA,EAAS,GAGlDnG,MAAMC,UAAUQ,QAAQK,KAAKoF,EAAKE,SAAU,SAAUpE,EAAMqE,GAE3D,GAAKrE,EAAKsE,OAAQtE,EAAKuE,WAAY,CAAC,OAAQ,QAAS,SAAU,UAAUrG,IAAI8B,EAAKwE,OAAwC,IAA9BxE,EAAKsE,KAAK3D,QAAQwD,GAG9G,GAAkB,oBAAdnE,EAAKwE,KACR,IAAKH,EAAM,EAAGA,EAAMrE,EAAKyE,QAAQ5F,OAAQwF,IACpCrE,EAAKyE,QAAQJ,GAAKK,UACrBlD,EAAKmD,KAAKC,mBAAmB5E,EAAKsE,MAAQ,IAAMM,mBAAmB5E,EAAKyE,QAAQJ,GAAKQ,YAG9E,CAAC,WAAY,SAAS3G,IAAI8B,EAAKwE,QAASxE,EAAK8E,SACtDtD,EAAKmD,KAAKC,mBAAmB5E,EAAKsE,MAAQ,IAAMM,mBAAmB5E,EAAK6E,UAInErD,EAAKnB,KAAK,OAKiB,mBAAzBS,KAAKM,kBACfN,KAAKM,iBAAiB,OAAQrC,MAAMgB,MAAMgF,KAAKhG,QCtMhDA,MAAMC,KAAK6B,KAAO,wBAGjBvC,KAAKkD,KAAO,CAGXwD,GAAI,CACHC,IAAK,SACLC,IAAK,YACLC,IAAK,SACLC,IAAK,YACLC,IAAK,cACLC,IAAK,gBACLC,IAAK,cACLC,IAAK,gBACLC,IAAK,UACLC,IAAK,UACLC,IAAK,wBACLC,IAAK,qBACLC,IAAK,aACLC,IAAK,0BACLC,IAAK,UACLC,IAAK,UACLC,IAAK,QACLC,IAAK,OAENC,GAAI,CACHlB,IAAK,YACLC,IAAK,aACLC,IAAK,YACLC,IAAK,aACLC,IAAK,WACLC,IAAK,eACLc,IAAK,iBACLC,IAAK,wBACLd,IAAK,YACLC,IAAK,YACLC,IAAK,aACLC,IAAK,MACLC,IAAK,sBACLC,IAAK,mBACLC,IAAK,qBACLC,IAAK,gBACLC,IAAK,UACLO,IAAK,WACLN,IAAK,UACLC,IAAK,OACLC,IAAK,MACLK,IAAK,kCACLC,IAAK,+BACLC,IAAK,sCACLC,IAAK,wBACLC,IAAK,qBACLC,IAAK,kBACLC,IAAK,cACLC,IAAK,+BACLC,IAAK,8BACLC,IAAK,gCACLC,IAAK,+BACLC,IAAK,8BACLC,IAAK,gCACLC,IAAK,kBACLC,IAAK,YACLC,IAAK,0CACLC,IAAK,oFACLC,IAAK,iCACLC,IAAK,0CACLC,IAAK,sDAENC,GAAI,CACHC,IAAK,UACL3C,IAAK,UACLE,IAAK,WACLC,IAAK,cACLC,IAAK,UACLC,IAAK,sBACLuC,IAAK,SACLtC,IAAK,iBACLC,IAAK,eACLC,IAAK,YACLC,IAAK,iBACLC,IAAK,sBACLC,IAAK,oBACLC,IAAK,sBACLC,IAAK,6BACLC,IAAK,SACLO,IAAK,eACLN,IAAK,SACLC,IAAK,QACLC,IAAK,OAEN4B,GAAI,CACHF,IAAK,KACL3C,IAAK,SACLC,IAAK,UACLC,IAAK,QACLC,IAAK,WACLC,IAAK,OACLC,IAAK,gBACLc,IAAK,+BACLC,IAAK,2BACL0B,IAAK,wBACLC,IAAK,iCACLC,IAAK,gCACLJ,IAAK,QACLtC,IAAK,cACLC,IAAK,cACLC,IAAK,YACLC,IAAK,MACLwC,IAAK,aACLvC,IAAK,gBACLC,IAAK,aACLC,IAAK,mBACLC,IAAK,+BACLC,IAAK,OACLO,IAAK,cACLN,IAAK,OACLC,IAAK,MACLC,IAAK,SACLK,IAAK,0BACLC,IAAK,2BACLC,IAAK,kCACLC,IAAK,sBACLyB,IAAK,wDACLC,IAAK,OACLzB,IAAK,qBACLC,IAAK,iBACLC,IAAK,aACLC,IAAK,+BACLC,IAAK,8BACLC,IAAK,+BACLqB,IAAK,cACLpB,IAAK,8BACLC,IAAK,6BACLC,IAAK,8BACLC,IAAK,iBACLC,IAAK,YACLC,IAAK,sCACLC,IAAK,uEACLC,IAAK,mCACLC,IAAK,sCACLC,IAAK,wCAENY,GAAI,CACHV,IAAK,UACL3C,IAAK,WACLC,IAAK,YACLC,IAAK,SACLC,IAAK,WACLC,IAAK,YACLC,IAAK,oBACLc,IAAK,+BACLC,IAAK,wBACL0B,IAAK,uBACLC,IAAK,0BACLH,IAAK,QACLtC,IAAK,iBACLC,IAAK,iBACLC,IAAK,aACLC,IAAK,aACLC,IAAK,qBACLC,IAAK,mBACLC,IAAK,qBACLC,IAAK,sBACLC,IAAK,YACLO,IAAK,oBACLN,IAAK,QACLC,IAAK,MACLC,IAAK,MACLK,IAAK,iCACLC,IAAK,kCACLC,IAAK,yCACLC,IAAK,uBACLyB,IAAK,8DACLxB,IAAK,wBACLC,IAAK,8BACLC,IAAK,gBACLC,IAAK,oCACLC,IAAK,mCACLC,IAAK,qCACLC,IAAK,6BACLC,IAAK,4BACLC,IAAK,8BACLC,IAAK,gBACLC,IAAK,cACLC,IAAK,wCACLC,IAAK,oFACLC,IAAK,wCACLC,IAAK,gDACLC,IAAK,8CAENa,GAAI,CACHtD,IAAK,UACLC,IAAK,UACLC,IAAK,SACLC,IAAK,YACLC,IAAK,UACLC,IAAK,qBACLc,IAAK,mCACLC,IAAK,wBACL0B,IAAK,oBACLC,IAAK,yBACLC,IAAK,6CACLJ,IAAK,QACLtC,IAAK,cACLC,IAAK,cACLC,IAAK,cACLyC,IAAK,kBACLvC,IAAK,oBACLC,IAAK,gBACLC,IAAK,kBACLC,IAAK,8BACLC,IAAK,gBACLO,IAAK,cACLN,IAAK,UACLC,IAAK,MACLC,IAAK,QACLK,IAAK,mCACLC,IAAK,iCACLC,IAAK,wCACLC,IAAK,0BACLyB,IAAK,oEACLC,IAAK,OACLzB,IAAK,sBACLC,IAAK,yBACLC,IAAK,eACLC,IAAK,oCACLC,IAAK,kCACLC,IAAK,qCACLqB,IAAK,cACLpB,IAAK,6BACLC,IAAK,4BACLC,IAAK,8BACLC,IAAK,gBACLC,IAAK,cACLC,IAAK,4CACLC,IAAK,qFACLC,IAAK,2CACLC,IAAK,8CACLC,IAAK,4CAENc,GAAI,CACHvD,IAAK,SACLC,IAAK,YACLC,IAAK,QACLC,IAAK,QACLC,IAAK,YACLC,IAAK,kBACLuC,IAAK,QACLtC,IAAK,WACLC,IAAK,UACLC,IAAK,YACLC,IAAK,KACLC,IAAK,kBACLC,IAAK,mBACLC,IAAK,eACLC,IAAK,8BACLC,IAAK,UACLO,IAAK,kBACLN,IAAK,UACLC,IAAK,YACLC,IAAK,OAENuC,GAAI,CACHxD,IAAK,UACLC,IAAK,WACLC,IAAK,SACLC,IAAK,aACLC,IAAK,aACLC,IAAK,iBACLc,IAAK,wBACLC,IAAK,yBACL0B,IAAK,oBACLC,IAAK,0BACLzC,IAAK,gBACLC,IAAK,gBACLC,IAAK,cACLC,IAAK,WACLC,IAAK,wBACLC,IAAK,kBACLC,IAAK,kBACLC,IAAK,wBACLC,IAAK,WACLO,IAAK,iBACLN,IAAK,OACLC,IAAK,OACLC,IAAK,MACLK,IAAK,+BACLC,IAAK,iCACLC,IAAK,6BACLC,IAAK,4BACLC,IAAK,0BACLC,IAAK,+BACLC,IAAK,aACLC,IAAK,mCACLC,IAAK,mCACLC,IAAK,oCACLC,IAAK,4BACLC,IAAK,4BACLC,IAAK,6BACLC,IAAK,gBACLC,IAAK,eACLC,IAAK,mCACLC,IAAK,iEACLC,IAAK,6CACLC,IAAK,oDACLC,IAAK,sCAENgB,GAAI,CACHzD,IAAK,QACLC,IAAK,KACLC,IAAK,MACLC,IAAK,KACLC,IAAK,KACLC,IAAK,YACLuC,IAAK,MACLtC,IAAK,UACLC,IAAK,YACLC,IAAK,KACLC,IAAK,KACLC,IAAK,QACLC,IAAK,UACLC,IAAK,QACLE,IAAK,OACLO,IAAK,QACLN,IAAK,KACLC,IAAK,KACLC,IAAK,MACLkC,IAAK,OACLC,IAAK,cACLf,IAAK,iCAENqB,GAAI,CACH1D,IAAK,YACLC,IAAK,aACLC,IAAK,UACLC,IAAK,SACLC,IAAK,WACLC,IAAK,mBACLC,IAAK,aACLC,IAAK,aACLC,IAAK,cACLC,IAAK,MACLC,IAAK,kBACLC,IAAK,oBACLC,IAAK,oBACLC,IAAK,uBACLC,IAAK,SACLO,IAAK,gBACLN,IAAK,YACLE,IAAK,OAEN0C,GAAI,CACH3D,IAAK,SACLC,IAAK,YACLC,IAAK,UACLC,IAAK,YACLC,IAAK,WACLC,IAAK,eACLuC,IAAK,QACLtC,IAAK,iBACLC,IAAK,oBACLC,IAAK,SACLC,IAAK,YACLC,IAAK,qBACLC,IAAK,sBACLC,IAAK,gBACLC,IAAK,kBACLC,IAAK,SACLO,IAAK,cACLN,IAAK,UACLE,IAAK,OAEN2C,GAAI,CACH5D,IAAK,WACLC,IAAK,YACLC,IAAK,SACLC,IAAK,WACLC,IAAK,WACLC,IAAK,sBACLe,IAAK,0BACL0B,IAAK,uBACLC,IAAK,4BACLH,IAAK,QACLtC,IAAK,iBACLC,IAAK,iBACLC,IAAK,WACLC,IAAK,MACLC,IAAK,oBACLC,IAAK,mBACLC,IAAK,iBACLC,IAAK,2BACLC,IAAK,UACLO,IAAK,gBACLN,IAAK,OACLC,IAAK,MACLC,IAAK,MACLK,IAAK,oCACLC,IAAK,iCACLC,IAAK,uCACLC,IAAK,wBACLI,IAAK,oCACLC,IAAK,mCACLC,IAAK,qCACLC,IAAK,2BACLC,IAAK,0BACLC,IAAK,4BACLC,IAAK,cACLE,IAAK,wCACLC,IAAK,wEACLC,IAAK,6BACLC,IAAK,gCACLC,IAAK,6CAENoB,KAAM,CACLzD,IAAK,UACLC,IAAK,sBACLe,IAAK,2BACL0B,IAAK,wBACLC,IAAK,6BACLzC,IAAK,kBACLC,IAAK,kBACLE,IAAK,YACLC,IAAK,mBACLC,IAAK,oBACLC,IAAK,qBACLE,IAAK,YACLO,IAAK,eACLN,IAAK,SACLC,IAAK,SAEN8C,GAAI,CACH9D,IAAK,WACLC,IAAK,aACLC,IAAK,UACLC,IAAK,aACLC,IAAK,YACLC,IAAK,kBACLC,IAAK,cACLC,IAAK,cACLC,IAAK,aACLC,IAAK,QACLC,IAAK,uBACLC,IAAK,eACLC,IAAK,oBACLC,IAAK,uBACLC,IAAK,MACLO,IAAK,iBACLN,IAAK,SACLC,IAAK,UACLC,IAAK,OAEN8C,GAAI,CACHpB,IAAK,KACL3C,IAAK,SACLC,IAAK,cACLC,IAAK,UACLC,IAAK,aACLC,IAAK,YACLC,IAAK,gBACLe,IAAK,yBACLwB,IAAK,QACLtC,IAAK,eACLC,IAAK,eACLC,IAAK,WACLC,IAAK,YACLC,IAAK,uBACLC,IAAK,wBACLC,IAAK,eACLC,IAAK,8BACLC,IAAK,iBACLO,IAAK,sBACLN,IAAK,QACLE,IAAK,MACLK,IAAK,qBACLC,IAAK,mBACLC,IAAK,yBACLC,IAAK,6BACL0B,IAAK,OACLtB,IAAK,iCACLC,IAAK,iCACLC,IAAK,kCACLqB,IAAK,cACLpB,IAAK,yBACLC,IAAK,yBACLC,IAAK,0BACLC,IAAK,cACLE,IAAK,oCACLC,IAAK,qEACLC,IAAK,sCACLC,IAAK,wCAENwB,GAAI,CACHhE,IAAK,SACLC,IAAK,WACLC,IAAK,UACLC,IAAK,SACLC,IAAK,QACLC,IAAK,kBACLE,IAAK,gBACLC,IAAK,UACLC,IAAK,UACLC,IAAK,eACLC,IAAK,qBACLC,IAAK,iBACLC,IAAK,0BACLC,IAAK,SACLC,IAAK,SACLE,IAAK,OAENgD,GAAI,CACHtB,IAAK,QACL3C,IAAK,QACLC,IAAK,SACLC,IAAK,QACLC,IAAK,SACLC,IAAK,UACLC,IAAK,kBACLuC,IAAK,UACLtC,IAAK,gBACLC,IAAK,YACLC,IAAK,aACLC,IAAK,SACLC,IAAK,iBACLC,IAAK,qBACLC,IAAK,cACLC,IAAK,iBACLC,IAAK,eACLO,IAAK,YACLN,IAAK,QACLC,IAAK,MACLC,IAAK,MACLoB,IAAK,4CAEN6B,GAAI,CACHvB,IAAK,SACL3C,IAAK,YACLC,IAAK,cACLC,IAAK,UACLC,IAAK,aACLC,IAAK,YACLC,IAAK,eACLuC,IAAK,QACLtC,IAAK,eACLC,IAAK,kBACLC,IAAK,WACLC,IAAK,WACLC,IAAK,uBACLC,IAAK,yBACLC,IAAK,eACLC,IAAK,8BACLC,IAAK,gBACLC,IAAK,QACLC,IAAK,SACLC,IAAK,MACLkC,IAAK,OACLC,IAAK,eAENe,GAAI,CACHxB,IAAK,KACL3C,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,MACLC,IAAK,MACLC,IAAK,OACLuC,IAAK,KACLtC,IAAK,OACLC,IAAK,OACLC,IAAK,KACLC,IAAK,IACLC,IAAK,UACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,KACLO,IAAK,KACLN,IAAK,KACLE,IAAK,MACLoB,IAAK,4BAKPhJ,KAAK2C,KAAO,WAEX,IAAI4D,EAAQ9F,MAAMG,OAAOC,KAAMiE,EAAO9C,SAASG,cAAc,SAEhC,EAAzBoE,EAAMlE,QAAQ,SAEG,iBADpBkE,EAAQzB,EAAK1C,aAAa,aAAe0C,EAAK1C,aAAa,WAG1DmE,GADAA,EAAQA,EAAMxC,QAAQ,QAAS,IAAIgH,eACrBzG,MAAM,EAAG,GAClBtE,KAAKkD,KAAKnD,eAAewG,KAC7BA,EAAQA,EAAMjC,MAAM,EAAG,IACpBtE,KAAKkD,KAAKnD,eAAewG,KAC5B9F,MAAMG,OAAOC,KAAO0F,IAIlBvG,KAAKkD,KAAKnD,eAAewG,KAC7B9F,MAAMG,OAAOC,KAAO,OAMtBb,KAAKgL,UAAY,SAAUC,GAE1B,IAAIpK,EAAOJ,MAAMG,OAAOC,KAAMkF,EAAM,EAAGmF,EAAc,GAIrD,GAAoC,iBAAzBlL,KAAKkD,KAAKrC,GAAMoK,GAC1B,GAAmB,EAAdpK,EAAKN,QAA4D,iBAArCP,KAAKkD,KAAKrC,EAAKyD,MAAM,EAAG,IAAI2G,GAC5DpK,EAAOA,EAAKyD,MAAM,EAAG,OACjB,CAAA,GAAc,OAATzD,GAAgD,iBAAtBb,KAAKkD,KAAKsG,GAAGyB,GAGhD,OAAOA,EAFPpK,EAAO,KAMT,OAAuB,EAAnBsK,UAAU5K,QACbP,KAAKkD,KAAKrC,GAAMoK,GAAMnJ,MAAM,KAAK3B,QAAQ,SAAU+C,GAClDgI,GAAgBnF,EAAM/F,KAAKO,OAAU2C,EAAOlD,KAAK+F,KAAS7C,GACxDiI,WACID,GAIDlL,KAAKkD,KAAKrC,GAAMoK,IAGxBjL,KAAKoL,cAAgB,WAIpB,OAAOpJ,SAASqJ,eAAerL,KAAKgL,UAAUM,MAAMtL,KAAMmL,aAG3DnL,KAAKuL,WAAa,SAAU1K,GAE3B,GAAmB,iBAARA,EAAkB,CAE5B,IAA4B,EAAxBA,EAAKwB,QAAQ,QAGhB,OAFA5B,MAAMG,OAAOC,KAAO,OACpBb,KAAK2C,QACE,EAKR,GAFA9B,EAAOA,EAAKkD,QAAQ,QAAS,IAEzB/D,KAAKkD,KAAKnD,eAAec,GAE5B,OADAJ,MAAMG,OAAOC,KAAOA,GACb,EAIT,OAAO,ICnpBTJ,MAAMC,KAAK8K,OAAS,wBAInBxL,KAAK2C,KAAO,WAEXX,SAASY,iBAAiB,UAAUzC,QAAQ,SAAUuB,GACrDA,EAAKoB,iBAAiB,QAASrC,MAAM+K,OAAO7G,SAI9C3E,KAAK2E,KAAO,SAAUH,GAErB,IAA+BiH,EAA3BC,EAAOlH,EAAGmH,OAEdC,EAAI5J,SAAS6J,yBAEZC,EAAI9J,SAAS+J,cAAc,OAE1BC,EAAIhK,SAAS+J,cAAc,MAC3BL,EAAK9I,iBAAiB,UAAUzC,QAAQ,SAAUuB,IACjD+J,EAAIzJ,SAAS+J,cAAc,OACzBE,YAAYjK,SAASqJ,eAAe3J,EAAKwK,cAC3CxM,MAAMC,UAAUQ,QAAQK,KAAKkB,EAAKyK,WAAY,SAAUC,GACvDX,EAAEY,aAAaD,EAAUpG,KAAMoG,EAAU7F,SAE1CvG,KAAKiM,YAAYR,IACfO,GAEJF,EAAEG,YAAYD,GAEfJ,EAAEK,YAAYH,GAEdnK,QAAQiD,IAAIgH,EAAEU,WAAWC,WACzBb,EAAKxH,WAAWsI,aAAaZ,EAAEU,WAAYZ,KClC7CjL,MAAMC,KAAKQ,OAAS,SAAUuL,EAAOzI,gBAGpChE,KAAKyM,MAAUA,EACfzM,KAAK0M,SAAU,EACf1M,KAAK2M,SAAU,EAKf3M,KAAK4M,QAAU,SAAUH,EAAOzI,GAsC/B,GApCAyI,EAAMI,gBAAgB,OACtBJ,EAAMI,gBAAgB,YACtBJ,EAAMI,gBAAgB,YACtBJ,EAAMtI,UAAUC,IAAI,eAGpBqI,EAAMK,iBAAmB,SAAUtI,GAClCxE,KAAK0M,SAAU,EACf1M,KAAK+M,aAAavI,GAClBxE,KAAKgN,WAAWxI,GAChBxE,KAAKiN,eACLjN,KAAKkN,gBACJzG,KAAKzG,MACPyM,EAAMU,UAAY,SAAU3I,GAC3BxE,KAAK0M,SAAU,EACf1M,KAAKoN,UAAU5I,IACdiC,KAAKzG,MACPyM,EAAMY,UAAmBrN,KAAKsN,OAAO7G,KAAKzG,MAC1CyM,EAAMc,QAAmBvN,KAAKsN,OAAO7G,KAAKzG,MAC1CyM,EAAMe,QAAmBxN,KAAKsN,OAAO7G,KAAKzG,MAC1CyM,EAAMgB,WAAmBzN,KAAKgN,WAAWvG,KAAKzG,MAC9CyM,EAAMiB,aAAmB1N,KAAK+M,aAAatG,KAAKzG,MAChDyM,EAAMkB,UAAmB3N,KAAK+M,aAAatG,KAAKzG,MAChDyM,EAAMmB,SAAmB5N,KAAKoN,UAAU3G,KAAKzG,MAC7CyM,EAAMoB,UAAmB7N,KAAKoN,UAAU3G,KAAKzG,MAC7CyM,EAAMqB,YAAmB9N,KAAKoN,UAAU3G,KAAKzG,MAC7CyM,EAAMsB,UAAmB/N,KAAKoN,UAAU3G,KAAKzG,MAC7CyM,EAAMuB,QAAmBhO,KAAKiO,WAAWxH,KAAKzG,MAC9CyM,EAAMyB,eAAmBlO,KAAKmO,aAAa1H,KAAKzG,MAChDyM,EAAM2B,iBAAmB3N,MAAMM,OAAOsN,YACtC5B,EAAM6B,QAAmB7N,MAAMM,OAAOsN,YAGtC5B,EAAMvI,WAAW+H,YAAYjM,KAAKuO,iBAG9BvK,EAAI3B,QAAQ,OAAS,EAExB,OADAoK,EAAMR,YAAYjM,KAAKwO,WAAWxK,IAC3BhE,KAGR,IAAIyO,EAAM,IAAIC,eA8Cd,OA7CAD,EAAI9J,KAAK,MAAOX,GAAK,GACrByK,EAAIE,mBAAqB,WACxB,GAAuB,IAAnBF,EAAIG,WAEP,GADApM,KAAKC,cAAc,IAAIC,YAAY,oBAAqB,CAAEmM,OAAQ,CAAEC,KAAM,mBAAoBL,IAAKA,OAC9FhC,GAAoC,EAA1BA,EAAMsC,WAAWxO,OAC/BkO,EAAIO,aAEA,GAAI,CAAC,EAAG,KAAKpP,IAAI6O,EAAIQ,QAAS,CAGlC,IADA,IAAIjL,EAAKa,EAAM,EAAGqK,EAAM,EAAGC,EAAM,EAAGjM,EAAOuL,EAAIW,aAAaC,OAAOvN,MAAM,MACnC,iBAAvBkC,EAAMd,EAAKoM,UAGU,IAA/BtL,EAAI3B,QAAQ,gBACfwC,EAAMb,EAAIlC,MAAM,KAChB2K,EAAMJ,aAAaxH,EAAI,GAAIA,EAAI,KAGmB,IAA1Cb,EAAI3B,QAAQ,2BACpBwC,EAAMb,EAAIlC,MAAM,KAChB9B,KAAK8E,KAAK,4BAA4BmH,YAAYjM,KAAKuP,WAAWJ,IAAOtK,EAAI,GAAK,MAAQA,EAAI,KAC9F4H,EAAMR,YAAYjM,KAAKwP,UAAU3K,KAGE,IAA3Bb,EAAI3B,QAAQ,WACpBwC,EAAMb,EAAID,QAAQ,kBAAmB,IAGf,EAAbC,EAAIzD,QAA2B,MAAXyD,EAAI,KACjChE,KAAK8E,KAAK,wBAAwBmH,YAAYjM,KAAKuP,WAAWL,IAAsB,iBAAPrK,EAAmBA,EAAMqK,IACtGzC,EAAMR,YAAYjM,KAAKwO,WAAWxK,KAIpChE,KAAKyP,aAAa,QAASP,GACI,iBAApBzC,EAAMiD,YAChB1P,KAAKyP,aAAa,YAAahD,EAAMiD,WAAWnP,QAAU4O,QAG3D1O,MAAMM,OAAOsN,YAAY,CAAEnI,KAAM,WAGlCO,KAAKzG,MACPyO,EAAIkB,OAEG3P,MAGRA,KAAKyP,aAAe,SAAUG,EAAKC,GAGlC,IAAIC,EAAkB,cAARF,EAAuB,EAAI,EAC7BE,EAARD,GACH7P,KAAK8E,KAAK,WAAa8K,GAAK/C,gBAAgB,SAC5C7M,KAAK8E,KAAK,WAAa8K,EAAM,OAAO1D,YAAc,IAAM2D,EAAQ,IAChE7P,KAAK8E,KAAK,WAAa8K,EAAM,WAAWvD,aAAa,OAASwD,EAAQ,GAAMA,EAAQC,EAAS,MAG7F9P,KAAK8E,KAAK,WAAa8K,GAAKvD,aAAa,QAAS,iBAClDrM,KAAK8E,KAAK,WAAa8K,EAAM,WAAWrD,UAAY,KAItDvM,KAAK8E,KAAO,SAAUC,GACrB,OAAO/E,KAAKyM,MAAMvI,WAAW/B,cAAc4C,IAM5C/E,KAAKiN,aAAe,WAEnB,IAA2HlH,EAAvHgK,EAAS/P,KAAKyM,MAAMuD,YAAaxE,EAASxL,KAAK8E,KAAK,6BAA8BjE,EAAOJ,MAAMG,OAAOC,KAAMoP,GAAQ,EAExH,GAAqB,iBAAVF,EAAoB,CAI9B,GAAoB,EAAhBA,EAAOxP,OAAY,CACtB,IAAKwF,EAAM,EAAGA,EAAMgK,EAAOxP,OAAQwF,IAC9BgK,EAAOhK,GAAKmK,UAAsF,GAAzEH,EAAOhK,GAAKmK,SAASnF,cAAchH,QAAQ,QAAS,IAAI1B,QAAQxB,KAC5FoP,EAAQA,EAAO,EAAKlK,EAAMkK,GAC3BzE,EAAOS,YAAYjM,KAAKuP,WAAWxJ,EAAKgK,EAAOhK,KAEhD/F,KAAKyP,aAAa,aAAcM,EAAOxP,QAIxCiL,EAAO2E,cAAgBC,KAAKC,IAAI,EAAGJ,GACvB,GAARA,GACHjQ,KAAKsQ,iBAAiBL,KAIzBjQ,KAAKkN,aAAe,WAEnB,IAA2HnH,EAAvHgK,EAAS/P,KAAKyM,MAAM8D,YAAa/E,EAASxL,KAAK8E,KAAK,6BAA8BjE,EAAOJ,MAAMG,OAAOC,KAAMoP,GAAQ,EAExH,GAAqB,iBAAVF,EAAoB,CAI9B,GAAoB,EAAhBA,EAAOxP,OAAY,CACtB,IAAKwF,EAAM,EAAGA,EAAMgK,EAAOxP,OAAQwF,IAC9BgK,EAAOhK,GAAKmK,UAAsF,GAAzEH,EAAOhK,GAAKmK,SAASnF,cAAchH,QAAQ,QAAS,IAAI1B,QAAQxB,KAC5FoP,EAAQA,EAAO,EAAKlK,EAAMkK,GAC3BzE,EAAOS,YAAYjM,KAAKuP,WAAWxJ,EAAKgK,EAAOhK,KAEhD/F,KAAKyP,aAAa,aAAcM,EAAOxP,QAIxCiL,EAAO2E,cAAgBC,KAAKC,IAAI,EAAGJ,GACvB,GAARA,GACHjQ,KAAKwQ,iBAAiBP,KAIzBjQ,KAAK+M,aAAe,SAAUvI,GAE7B,IAAmFiM,EAAIC,EAAIC,EAAvFC,EAAO5Q,KAAKyM,MAAMoE,YAAaC,EAAW9Q,KAAKyM,MAAMqE,SAAUC,EAAO,QAErEC,MAAMJ,IAAUE,IAAaG,EAAAA,GAAcD,MAAMF,KASrDC,GADAN,EAAW,GANXA,EAAKL,KAAKc,MAAMN,EAAO,OAMPH,EAAK,IAAM,KAFdC,GAHbA,EAAKN,KAAKc,MAAON,EAAO,KAAQ,KAGvB,GAAS,IAAMF,EAGZA,GAAK,KAJJC,GADbA,EAAKP,KAAKc,MAAMN,EAAO,KACd,GAAS,IAAMD,EAIDA,GASvBI,GAAQ,OADRN,EAAW,GANXA,EAAKL,KAAKc,MAAMJ,EAAW,OAMXL,EAAK,IAAM,KAFdC,GAHbA,EAAKN,KAAKc,MAAOJ,EAAW,KAAQ,KAG3B,GAAS,IAAMJ,EAGHA,GAAK,KAJbC,GADbA,EAAKP,KAAKc,MAAMJ,EAAW,KAClB,GAAS,IAAMH,EAIQA,GAEhC3Q,KAAK8E,KAAK,gBAAgBqM,MAAMC,MAASR,EAAOE,EAAW,IAAO,KAGnE9Q,KAAK8E,KAAK,aAAaoH,YAAc6E,EAGjC/Q,KAAK0M,UAAY1M,KAAK2M,UACzB3M,KAAK0M,SAAU,EACf1M,KAAKoN,UAAU5I,KAIjBxE,KAAKgN,WAAa,WAEjB,IAAkFoE,EAAOC,EAArF5E,EAAQzM,KAAKyM,MAAO/K,EAAO1B,KAAK8E,KAAK,WAAYiB,EAAM0G,EAAM6E,SAAS/Q,OAE1E,GAAW,EAANwF,GAAa0G,EAAMqE,WAAaG,EAAAA,IAAcD,MAAMvE,EAAMqE,UAG9D,IADApP,EAAKkB,iBAAiB,WAAWzC,QAAQ,SAAUoR,GAAQA,EAAKC,WACjD,EAARzL,MAENsL,EAASrP,SAAS+J,cAAc,SACzBM,aAAa,QAAS,UAGjB,MADZ+E,GAAS3E,EAAM6E,SAASG,IAAI1L,GAAO0G,EAAM6E,SAAS7P,MAAMsE,IAAQ0G,EAAMqE,SAAW,KAEhFO,EAAOhF,aAAa,QAAS,wBAE7BgF,EAAOhF,aAAa,QAAS,QAAWI,EAAM6E,SAAS7P,MAAMsE,GAAO0G,EAAMqE,SAAW,IAAO,YAAcM,EAAQ,MAEnH1P,EAAKuK,YAAYoF,IAKpBrR,KAAKsN,OAAS,WAGT,CAAC,EAAE,GAAG1N,IAAII,KAAKyM,MAAMiF,gBAEpB1R,KAAKyM,MAAMkF,QACd3R,KAAK8E,KAAK,aAAaoH,YAAc,KAEjCzL,MAAMM,OAAOkE,GAChBxE,MAAMM,OAENf,KAAKyM,MAAMvI,WAAWC,WAFTqN,OAAO,aAKrBxR,KAAK8E,KAAK,aAAaoH,YAAc,KAEjCzL,MAAMM,OAAOkE,GAChBxE,MAAMM,OAENf,KAAKyM,MAAMvI,WAAWC,WAFTC,IAAI,cAOrBpE,KAAKoN,UAAY,SAAU5I,GAC1B/D,MAAMmE,IAAI,0BAA4BJ,EAAG0B,KAAO,aAAelG,KAAK0M,QAAU,YAAc1M,KAAK2M,SACjGlM,MAAMM,OAAO,CAAC,YAAa,UAAW,UAAW,WAAWnB,IAAI4E,EAAG0B,MAAQ,MAAQ,UAAU,YAM9FlG,KAAKiO,WAAa,WAEjB,IAAIxB,EAAQzM,KAAKyM,MAGb,CAAC,EAAE,GAAG7M,IAAI6M,EAAMiF,gBACfjF,EAAMmF,OAASnF,EAAMkF,OACxBlF,EAAMoF,OAENpF,EAAMqF,UAIT9R,KAAKmO,aAAe,SAAU3J,GAE7B,IAAIiI,EAAQzM,KAAKyM,MAAO/K,EAAO1B,KAAK8E,KAAK,WAAYsM,EAAQ1P,EAAKqQ,YAAaxL,EAAQ,EAGvF,GAAI,CAAC,EAAE,GAAG3G,IAAI6M,EAAMiF,cAAe,CAElC,GAAkB,iBAANlN,IAAoBwM,MAAMxM,EAAGwN,SAAU,CAElD,KAAKzL,GAAS7E,EAAKuQ,WACZvQ,EAAOA,EAAKwQ,eAEnB3L,EAAgC,KAAtB/B,EAAGwN,QAAUzL,GAAe6K,EAAS,IAM/C3E,EAAM0F,OALN5L,EAASA,EAAQ,GAAO,EAAc,IAARA,EAAgB,EAAIA,EAMlDkG,EAAM2F,OAAS,EAGhBpS,KAAK8E,KAAK,gBAAgBqM,MAAMC,MAAQ3E,EAAM2F,MAAQ,EAAoB,IAAf3F,EAAM0F,OAAgB,MAInFnS,KAAKqS,eAAiB,SAAU7N,GAE/B,IAAIiI,EAAQzM,KAAKyM,MAAO/K,EAAO1B,KAAK8E,KAAK,WAAYsM,EAAQ1P,EAAKqQ,YAAaxL,EAAQ,EAGvF,GAAK,CAAC,EAAE,GAAG3G,IAAI6M,EAAMiF,eAAmBjF,EAAMqE,WAAaG,EAAAA,IAAcD,MAAMvE,EAAMqE,WAA2B,iBAANtM,EAAiB,CAE1H,KAAK+B,GAAS7E,EAAKuQ,WACZvQ,EAAOA,EAAKwQ,eAEnB3L,EAASkG,EAAMqE,UAAYtM,EAAGwN,QAAUzL,GAAS,IAAM6K,EAAS,IAMhE3E,EAAMoE,YALNtK,EAASA,GAAS,EAAK,EAAIA,IAS7BvG,KAAKsQ,iBAAmB,SAAU9L,GAEjC,IAA6FuB,EAAzFgK,EAAS/P,KAAKyM,MAAMuD,YAAazJ,EAAsB,iBAAN/B,EAAkBA,EAAGmH,OAAOpF,MAAQ/B,EAGzF,GAAI,CAAC,EAAE,GAAG5E,IAAII,KAAKyM,MAAMiF,cAAe,CAEvC,IAAK3L,EAAM,EAAGA,EAAMgK,EAAOxP,OAAQwF,IAClCgK,EAAOhK,GAAKuM,QAAWvM,GAAOQ,IAE/BkG,EAAMoE,YAGU,iBAANrM,GACVA,EAAGmH,OAAO4G,QAGZvS,KAAKwQ,iBAAmB,SAAUhM,GAEjC,IAA6FuB,EAAzFgK,EAAS/P,KAAKyM,MAAM8D,YAAahK,EAAsB,iBAAN/B,EAAkBA,EAAGmH,OAAOpF,MAAQ/B,EAGzF,GAAI,CAAC,EAAE,GAAG5E,IAAII,KAAKyM,MAAMiF,cAAe,CAEvC,IAAK3L,EAAM,EAAGA,EAAMgK,EAAOxP,OAAQwF,IAClCgK,EAAOhK,GAAKuM,QAAWvM,GAAOQ,IAE/BkG,EAAMoE,YAGU,iBAANrM,GACVA,EAAGmH,OAAO4G,QAGZvS,KAAKwS,gBAAkB,SAAUhO,GAEhC,IAA4FuB,EAAxFgK,EAAS/P,KAAKyM,MAAMiD,WAAYnJ,EAAsB,iBAAN/B,EAAkBA,EAAGmH,OAAOpF,MAAQ/B,EAGxF,GAAI,CAAC,EAAE,GAAG5E,IAAII,KAAKyM,MAAMiF,cAAe,CAEvC,IAAK3L,EAAM,EAAGA,EAAMgK,EAAOxP,OAAQwF,IAClCgK,EAAOhK,GAAK0M,KAAQ1M,GAAOQ,EAAS,UAAY,SAEjDvG,KAAK2M,SAAU,EAGC,iBAANnI,GACVA,EAAGmH,OAAO4G,QAGZvS,KAAK0S,YAAc,SAAUlO,GAE5BxE,KAAK8E,KAAK,gBAAgBqM,MAAMC,MAAQ,IACxCpR,KAAK8E,KAAK,WAAWlC,iBAAiB,WAAWzC,QAAQ,SAAUoR,GAAQA,EAAKC,WAChFxR,KAAK8E,KAAK,aAAaoH,YAAc,IAErClM,KAAKyP,aAAa,aAAc,GAChCzP,KAAKyP,aAAa,aAAc,GAEhCzP,KAAKyM,MAAMkG,IAAM3S,KAAKyM,MAAM7J,iBAAiB,UAAwB,iBAAN4B,EAAkBA,EAAGmH,OAAOpF,MAAQ/B,GAAImO,IACtF,iBAANnO,GACVA,EAAGmH,OAAO4G,QAGZvS,KAAK4S,iBAAmB,WAGvB,IAAIC,EAAM7Q,SAASuD,mBAAqBvD,SAASqD,sBAAwBrD,SAASmD,wBAClFnF,KAAKyM,MAAMvI,WAAWC,UAAU0O,EAAM,MAAQ,UAAU,eAMzD7S,KAAKuO,cAAgB,WAEpB,IAAIuE,EAAGrH,EAAGO,EAAGF,EAAI9J,SAAS+J,cAAc,OAiJxC,OAhJAD,EAAEO,aAAa,QAAS,0BAEvBL,EAAIhK,SAAS+J,cAAc,SACzBM,aAAa,QAAS,gBACxBL,EAAEC,YAAYjK,SAASqJ,eAAe,MACtCW,EAAEgC,QAAUhO,KAAKiO,WAAWxH,KAAKzG,MAElC8L,EAAEG,YAAYD,IAEbA,EAAIhK,SAAS+J,cAAc,SACzBM,aAAa,QAAS,YAEvBZ,EAAIzJ,SAAS+J,cAAc,QACzBM,aAAa,QAAS,OACxBZ,EAAEuC,QAAUhO,KAAKqS,eAAe5L,KAAKzG,MAEpC8S,EAAI9Q,SAAS+J,cAAc,QAE5BN,EAAEQ,YAAY6G,GAEf9G,EAAEC,YAAYR,GAEfK,EAAEG,YAAYD,IAEbA,EAAIhK,SAAS+J,cAAc,SACzBM,aAAa,QAAS,QACxBL,EAAEC,YAAYjK,SAASqJ,eAAe,UAEvCS,EAAEG,YAAYD,IAEbA,EAAIhK,SAAS+J,cAAc,SACzBM,aAAa,QAAS,qBAEvBZ,EAAIzJ,SAAS+J,cAAc,QACzBM,aAAa,QAAS,OACxBZ,EAAEuC,QAAUhO,KAAKmO,aAAa1H,KAAKzG,MAElC8S,EAAI9Q,SAAS+J,cAAc,QAE5BN,EAAEQ,YAAY6G,GAEf9G,EAAEC,YAAYR,GAEfK,EAAEG,YAAYD,IAEbA,EAAIhK,SAAS+J,cAAc,UACzBM,aAAa,QAAS,qBACxBL,EAAEK,aAAa,QAAS,iBACxBL,EAAEC,YAAYxL,MAAM8B,KAAK6I,cAAc,OAEtCK,EAAIzJ,SAAS+J,cAAc,OACzBM,aAAa,QAAS,YAEzBL,EAAEC,YAAYR,IAEbA,EAAIzJ,SAAS+J,cAAc,WACzBM,aAAa,OAAQ,OACvBZ,EAAEsH,SAAW/S,KAAKwQ,iBAAiB/J,KAAKzG,MAEzCgM,EAAEC,YAAYR,GAEfK,EAAEG,YAAYD,IAEbA,EAAIhK,SAAS+J,cAAc,UACzBM,aAAa,QAAS,qBACxBL,EAAEK,aAAa,QAAS,iBACxBL,EAAEC,YAAYxL,MAAM8B,KAAK6I,cAAc,OAEtCK,EAAIzJ,SAAS+J,cAAc,OACzBM,aAAa,QAAS,YAEzBL,EAAEC,YAAYR,IAEbA,EAAIzJ,SAAS+J,cAAc,WACzBM,aAAa,OAAQ,OACvBZ,EAAEsH,SAAW/S,KAAKsQ,iBAAiB7J,KAAKzG,MAEzCgM,EAAEC,YAAYR,GAEfK,EAAEG,YAAYD,IAEbA,EAAIhK,SAAS+J,cAAc,UACzBM,aAAa,QAAS,gBACxBL,EAAEK,aAAa,QAAS,iBACxBL,EAAEC,YAAYxL,MAAM8B,KAAK6I,cAAc,OAEtCK,EAAIzJ,SAAS+J,cAAc,OACzBM,aAAa,QAAS,YAEzBL,EAAEC,YAAYR,IAEbA,EAAIzJ,SAAS+J,cAAc,WACzBM,aAAa,OAAQ,OACvBZ,EAAEsH,SAAW/S,KAAK0S,YAAYjM,KAAKzG,MAEpCgM,EAAEC,YAAYR,GAEfK,EAAEG,YAAYD,IAEbA,EAAIhK,SAAS+J,cAAc,UACzBM,aAAa,QAAS,oBACxBL,EAAEK,aAAa,QAAS,iBACxBL,EAAEC,YAAYxL,MAAM8B,KAAK6I,cAAc,OAEtCK,EAAIzJ,SAAS+J,cAAc,OACzBM,aAAa,QAAS,YAEzBL,EAAEC,YAAYR,IAEbA,EAAIzJ,SAAS+J,cAAc,WACzBM,aAAa,OAAQ,OACvBZ,EAAEsH,SAAW/S,KAAKwS,gBAAgB/L,KAAKzG,OAEtC8S,EAAI9Q,SAAS+J,cAAc,WACzBE,YAAYxL,MAAM8B,KAAK6I,cAAc,MAExCK,EAAEQ,YAAY6G,GAEf9G,EAAEC,YAAYR,GAEfK,EAAEG,YAAYD,IAEbA,EAAIhK,SAAS+J,cAAc,SACzBM,aAAa,QAAS,yBACxBL,EAAEC,YAAYjK,SAASqJ,eAAe,MACtCW,EAAEgC,QAAU,WAEPvN,MAAMM,OAAOkE,GAChBxE,MAAMyE,kBAAkBzE,MAAMM,OAAOkE,KAGjCjD,SAASgR,wBACZhR,SAASc,iBAAiB,yBAA0B9C,KAAK4S,iBAAiBnM,KAAKzG,OACvEgC,SAASiR,kBACjBjR,SAASc,iBAAiB,mBAAoB9C,KAAK4S,iBAAiBnM,KAAKzG,OACjEgC,SAASkR,sBACjBlR,SAASc,iBAAiB,sBAAuB9C,KAAK4S,iBAAiBnM,KAAKzG,OAC7ES,MAAMyE,kBAAkBlF,KAAKyM,MAAMvI,cAGnCuC,KAAKzG,MAER8L,EAAEG,YAAYD,GAEPF,GAGR9L,KAAKwP,UAAY,SAAUtM,GAE1B,IAAI4I,EAAI9J,SAAS+J,cAAc,SAsB/B,OArBAD,EAAEO,aAAa,OAAQnJ,EAAK,IAC5B4I,EAAEO,aAAa,QAASnJ,EAAK,IAC7B4I,EAAEO,aAAa,UAAWnJ,EAAK,IAC/B4I,EAAEO,aAAa,MAAOnJ,EAAK,IAE3B4I,EAAEqH,OAAS,SAAU3O,GACpB/D,MAAMmE,IAAI,uBAAyBJ,EAAGmH,OAAOgH,IAAIrO,MAAME,EAAGmH,OAAOgH,IAAIS,YAAY,KAAO,IAC3D,YAAzB5O,EAAGmH,OAAO0H,MAAMZ,OACnBzS,KAAKoN,UAAU5I,GACfxE,KAAK2M,SAAU,IAEflG,KAAKzG,MAEP8L,EAAEwC,QAAU,SAAU9J,GACrB/D,MAAMmE,IAAI,wBAA0BJ,EAAGmH,OAAOgH,IAAIrO,MAAME,EAAGmH,OAAOgH,IAAIS,YAAY,KAAO,IAC5D,YAAzB5O,EAAGmH,OAAO0H,MAAMZ,OACnBzS,KAAKoN,UAAU5I,GACfxE,KAAK2M,SAAU,IAEflG,KAAKzG,MAEA8L,GAGR9L,KAAKwO,WAAa,SAAUxK,GAE3B,IAAI8H,EAAI9J,SAAS+J,cAAc,UAI/B,OAHAD,EAAEO,aAAa,MAAOrI,GACtB8H,EAAEwC,QAAU7N,MAAMM,OAAOsN,YAElBvC,GAGR9L,KAAKuP,WAAa,SAAUxJ,EAAKlB,GAEd,iBAAPA,IACVA,EAAqB,KAAdA,EAAIyO,MAAgBzO,EAAIqL,SAASnF,cAAgBlG,EAAIqL,SAASnF,cAAgB,MAAQlG,EAAIyO,OAElG,IAAIxH,EAAI9J,SAAS+J,cAAc,UAI/B,OAHAD,EAAEO,aAAa,QAAStG,GACxB+F,EAAEG,YAAYjK,SAASqJ,eAAexG,IAE/BiH,GAIR9L,KAAK4M,QAAQH,EAAOzI,ICplBrBvD,MAAMC,KAAKK,OAAS,wBAGnBf,KAAKuT,MAAW,GAChBvT,KAAKwT,OAAW,EAChBxT,KAAKyT,OAAW,EAChBzT,KAAKI,SAAW,KAChBJ,KAAK0T,KAAW,KAChB1T,KAAKyO,IAAW,KAEhBzO,KAAK2T,GAAK,kIACV3T,KAAK4T,GAAK,oDACV5T,KAAK6T,GAAK,6BAEV7T,KAAK8T,MAAQ,KACb9T,KAAK+T,GAAK,KACV/T,KAAKiF,GAAK,KACVjF,KAAKgU,GAAK,KACVhU,KAAK8L,EAAK,KACV9L,KAAKgM,EAAK,KACVhM,KAAKyL,EAAK,KACVzL,KAAK8S,EAAK,KAKV9S,KAAKiU,kBAAoB,SAAUC,EAAOnD,EAAMoD,GAE/C,MAAqB,iBAATD,GAAsC,iBAARnD,EAClC/Q,KAAK2C,KAAK,cAAewR,GAC9BC,aACAC,YAAYH,EAAOnD,GACnBuD,YACAC,KAAK,mBAGR5S,QAAQW,MAAM,mDAAoD6I,YAC3D,IAGRnL,KAAKwU,mBAAqB,SAAUN,EAAOnD,EAAM3Q,EAAUsT,EAAMS,GAEhE,MAAqB,iBAATD,GAAsC,iBAARnD,GAAyC,mBAAZ3Q,GACtEJ,KAAKI,SAAWA,EAChBJ,KAAK0T,KAAOA,EACL1T,KAAK2C,KAAK,eAAgBwR,GAC/BC,aACAC,YAAYH,EAAOnD,GACnB0D,eAAe,SAAU,iCACzBF,KAAK,oBAGR5S,QAAQW,MAAM,oDAAqD6I,YAC5D,IAGRnL,KAAK0U,kBAAoB,SAAUR,EAAOnD,EAAM4D,EAAQvU,EAAUsT,EAAMS,GAEvE,MAAqB,iBAATD,GAAsC,iBAARnD,GAAuC,iBAAV4D,GAA2C,mBAAZvU,GACrGJ,KAAKI,SAAWA,EAChBJ,KAAK0T,KAAOA,EACL1T,KAAK2C,KAAK,UAAWwR,GAC1BC,WAAWO,EAAQ,iCACnBN,YAAYH,EAAOnD,GACnB0D,eAAe,UACfF,MAAK,KAGR5S,QAAQW,MAAM,mDAAoD6I,YAC3D,IAGRnL,KAAK4U,iBAAmB,SAAUV,EAAOnD,EAAM4D,EAAQE,EAAOC,EAAUX,GAEvE,MAAqB,iBAATD,GAAsC,iBAARnD,GAAuC,iBAAV4D,GAAwC,iBAATE,EAC9F7U,KAAK2C,KAAK,SAAUwR,GACzBC,WAAWO,EAAQ,gCAAiC,mCACpDN,YAAYH,EAAOnD,GACnBgE,WAAWF,EAA2B,kBAAZC,GAAyBA,GACnDL,eAAe,UACfF,KAAK,kBAGR5S,QAAQW,MAAM,kDAAmD6I,YAC1D,IAGRnL,KAAKgV,eAAiB,SAAUd,EAAOnD,EAAMoD,GAE5C,MAAqB,iBAATD,GAAsC,iBAARnD,EAClC/Q,KAAK2C,KAAK,WAAYwR,GAC3BC,aACAC,YAAYH,EAAOnD,GACnBkE,kBACAV,QAGH5S,QAAQW,MAAM,gDAAiD6I,YACxD,IAGRnL,KAAKkV,cAAgB,SAAUhB,EAAOnD,EAAMoD,GAE3C,MAAqB,iBAATD,GAAsC,iBAARnD,EAClC/Q,KAAK2C,KAAK,UAAWwR,GAC1BC,aACAC,YAAYH,EAAOnD,GACnBoE,eAAc,GACdZ,QAGH5S,QAAQW,MAAM,+CAAgD6I,YACvD,IAGRnL,KAAKoV,YAAc,SAAUpR,EAAKgC,EAAMqP,EAAMC,EAAQnB,GAErD,IAAIhT,EAA4B,iBAARgT,EAGxB,OAFAA,EAAOhT,EAAY,kCAAoCgT,EAAO,uBAE3C,iBAAPnQ,GAAoC,iBAARgC,GAAqC,iBAARqP,GAAuC,iBAAVC,EAC1FtV,KAAK2C,KAAK,QAASwR,GACxBC,aACAmB,UAAUvR,EAAKgC,EAAMqP,EAAMC,GAC3BE,SAASrU,GAAW,GACpBsU,eACAC,oBACAP,gBACAZ,QAGH5S,QAAQW,MAAM,6CAA8C6I,YACrD,IAGRnL,KAAK2V,YAAc,SAAU3R,EAAKgC,EAAMqP,EAAMC,EAAQnB,GAErD,IAAIhT,EAA4B,iBAARgT,EAGxB,OAFAA,EAAOhT,EAAY,kCAAoCgT,EAAO,uBAE3C,iBAAPnQ,GAAoC,iBAARgC,GAAqC,iBAARqP,GAAuC,iBAAVC,EAC1FtV,KAAK2C,KAAK,QAASwR,GACxBC,aACAmB,UAAUvR,EAAKgC,EAAMqP,EAAMC,GAC3BE,SAASrU,EAAW6C,EAAI3B,QAAQ,UAAY,GAC5CoT,eACAC,oBACAP,gBACAZ,QAGH5S,QAAQW,MAAM,6CAA8C6I,YACrD,IAGRnL,KAAK4V,aAAe,SAAU5R,EAAK6R,EAAO1B,GAEzC,MAAmB,iBAAPnQ,GAAqC,kBAAT6R,EAChC7V,KAAK2C,KAAK,SAA0B,iBAARwR,EAAoBA,EAAO,WAAa,WAAY0B,GACrFzB,aACA0B,WAAW9R,GACXyR,aAAaI,GACbV,eAAc,GACdZ,QAGH5S,QAAQW,MAAM,8CAA+C6I,YACtD,IAGRnL,KAAK+V,WAAa,SAAU/R,EAAK6R,EAAOzV,EAAUsT,EAAMS,GAEvD,MAAmB,iBAAPnQ,GAAqC,kBAAT6R,GAA2C,mBAAZzV,GAEtEJ,KAAKI,SAAWA,EAChBJ,KAAK0T,KAAOA,EACZ1T,KAAK2C,KAAK,OAAwB,iBAARwR,EAAoBA,EAAO,WAAa,WAAY0B,GAC5EzB,aACAqB,aAAaI,GACbV,eAAc,GACdZ,OAEFvU,KAAKyO,IAAM,IAAIC,eACf1O,KAAKyO,IAAI9J,KAAK,MAAOX,GAAK,GAC1BhE,KAAKyO,IAAIE,mBAAqB,WACA,IAAxB3O,KAAKyO,IAAIG,YAA8C,mBAAjB5O,KAAKI,WAC/CJ,KAAKI,SAASJ,KAAKyO,IAAKzO,KAAK0T,MAC7B1T,KAAKwR,OAAO,aAEZ/K,KAAKzG,MACPA,KAAKyO,IAAIkB,OACF3P,OAGR2B,QAAQW,MAAM,4CAA6C6I,YACpD,IAMRnL,KAAKgW,OAAS,WAUb,OAPIhW,KAAKJ,IAAI,QAAS,QAAS,SAC1BI,KAAKiF,IACRjF,KAAKiF,GAAGoH,aAAa,QAASrM,KAAKuT,MAAMxR,KAAK,MAC3C/B,KAAKgU,IACRhU,KAAKgU,GAAG3H,aAAa,QAASrM,KAAKuT,MAAMxR,KAAK,OAGzC/B,MAGRA,KAAKoE,IAAM,WASV,OAPA1E,MAAMC,UAAUQ,QAAQK,KAAK2K,UAAW,SAAUyE,GAC/B,iBAAPA,GACVjO,QAAQW,MAAM,4CAA6CsN,GACxD5P,KAAKuT,MAAMlR,QAAQuN,GAAO,GAC7B5P,KAAKuT,MAAMlN,KAAKuJ,IACf5P,MAEIA,KAAKgW,UAGbhW,KAAKwR,OAAS,WASb,OAPA9R,MAAMC,UAAUQ,QAAQK,KAAK2K,UAAW,SAAUyE,GAC/B,iBAAPA,GACVjO,QAAQW,MAAM,+CAAgDsN,IAChC,EAA3B5P,KAAKuT,MAAMlR,QAAQuN,IACtB5P,KAAKuT,MAAM0C,OAAOjW,KAAKuT,MAAMlR,QAAQuN,GAAM,IAC1C5P,MAEIA,KAAKgW,UAGbhW,KAAKkW,OAAS,SAAUC,EAAQpS,GAU/B,MARsB,iBAAVoS,GAA0C,iBAAXpS,GAC1CpC,QAAQW,MAAM,+CAAgD6T,EAAQpS,GAEnE/D,KAAKJ,IAAIuW,IACZnW,KAAKwR,OAAO2E,GACRnW,KAAKJ,IAAImE,IACb/D,KAAKoE,IAAIL,GAEH/D,KAAKgW,UAGbhW,KAAKJ,IAAM,WACV,OAAOI,KAAKuT,MAAM3T,IAAIa,MAAM4D,QAAQ8G,aAMrCnL,KAAKoW,YAAc,SAAU5R,GAGxB/D,MAAMG,OAAOO,UAAUE,QAAuC,mBAArBgV,QAAQC,WAChD,IAAIC,OAAO,KAAO9V,MAAMG,OAAOO,UAAUC,IAAM,yBAA2BoV,KAAKhU,KAAKiU,SAAS/R,OAChG2R,QAAQC,UAAU,GAAI,GAAI9T,KAAKiU,SAAS/R,KAAKJ,MAAM,EAAG9B,KAAKiU,SAAS/R,KAAKrC,QAAQ,OAGlE,iBAANmC,EAC4B,gBAAjCA,EAAGmH,OAAOvJ,aAAa,OAA6B3B,MAAMM,OAAOnB,IAAI,QAAS,QAAS,WAAY,UAAW,SAClHa,MAAMM,OAAO2V,OAAM,GAEZ1W,KAAKiF,IACbjF,KAAK0W,OAAM,IAIb1W,KAAK2W,eAAiB,SAAUnS,GAE/B,GAAI/D,MAAMM,OAAOnB,IAAI,WAAY,UAAW,QAK3C,OAJA4E,EAAGC,iBACHD,EAAGoS,kBACHpS,EAAGqS,EAAIpW,MAAM8B,KAAKyI,UAAU,KAC5BxG,EAAGsS,YAActS,EAAGqS,EACbrS,EAAGqS,GAIZ7W,KAAK+W,gBAAkB,WAEtB,IAASC,EAAOhV,SAASG,cAAc,QAEvCiC,EAAM4S,EAAKC,cAAgBxW,MAAMM,OAAOnB,IAAI,QAAS,SAAW,IAAM,KACtEa,MAAMM,OAAOqD,EAAM,MAAQ,UAAU,UAErCA,EAAM4S,EAAKC,aAAe,IAC1BxW,MAAMM,OAAOqD,EAAM,MAAQ,UAAU,SAGtCpE,KAAKkX,gBAAkB,SAAU1S,GAEhC,IAAInE,EAAOI,MAAMM,OAAQW,EAAO8C,EAAGmH,OAAQwL,GAAM,EAGjD,GAAI9W,EAAKT,IAAI,eAAiBS,EAAKT,IAAI,aAClC,CAAC,SAAU,UAAUA,IAAI8B,EAAK0V,WAAa,CAAC,iBAAiB,aAAa,UAAU,YAAYxX,IAAI4E,EAAG0B,MAE3GxE,GAAO,IAAI2V,MAAOC,UAAY,KACzBjX,EAAKoT,OAAS,GAAO/R,EAAQ,EAAIrB,EAAKoT,UAC1CpT,EAAKoT,OAAS/R,EAGdyV,EAAmB,EAAZ3S,EAAGqK,QAAgBrK,EAAG+S,WAAa,EAC1C9W,MAAMU,UAAwB,YAAZqD,EAAG0B,MAAuBiR,EAAO,aAAe,qBAK/D,CACJ,GAAsB,WAAlBzV,EAAK0V,SACR1V,EAAOA,EAAKwC,gBAER,IAAK,CAAC,WAAY,UAAUtE,IAAI8B,EAAK0V,UACzC,MAAgB,IAARD,GAAoC,SAAlBzV,EAAK0V,UAC1B1V,EAAKyC,UAAUqT,SAAS,cAC3BL,GAAM,EAENzV,EAAOA,EAAKwC,WAKf,GAAsB,SAAlBxC,EAAK0V,YAGRD,EAAmB,EAAZ3S,EAAGqK,QAAgBrK,EAAG+S,WAAa,IAC7B7V,EAAK+V,UAAa/V,EAAKgW,aAAehW,EAAKiW,eAAqBR,GAAyB,EAAjBzV,EAAK+V,WACzF,OAKHjT,EAAGC,iBACHD,EAAGoS,mBAGJ5W,KAAK4X,eAAiB,SAAUpT,GAG/B,IADA,IAAsB2S,EAAlBzV,EAAO8C,EAAGmH,OACPjK,EAAKwC,YACXxC,EAAOA,EAAKwC,aAIbiT,EAAmB,EAAZ3S,EAAGqK,QAAgBrK,EAAG+S,WAAa,IAI/B7V,EAAKmW,YAAYC,YAAcpW,EAAKmW,YAAYE,aAAiBrW,EAAKsV,KAAKW,aAAe,IAClGR,GAAQzV,EAAKmW,YAAYE,aAAe,KAE1CvT,EAAGC,iBACHD,EAAGoS,oBAIL5W,KAAKgY,MAAQ,SAAUxT,GAEtB,IAAInE,EAAOI,MAAMM,OAAQW,EAAOrB,EAAKyT,MAIjCzT,EAAKT,IAAI,WAAY,UAAW,SAE9B4E,EAAGyT,SAAW,CAAC,GAAI,GAAI,GAAI,IAAK,KAAKrY,IAAI4E,EAAG0T,UAAc1T,EAAG2T,QAA0B,MAAf3T,EAAG0T,SAAqB,CAAC,GAAI,KAAKtY,IAAI4E,EAAG0T,WACrH1T,EAAGC,iBAIIpE,EAAKT,IAAI,QAAS,UAA4B,MAAf4E,EAAG0T,SAC1C1T,EAAGC,iBACHhE,MAAMyE,kBAAkB7E,EAAK4E,KAIrB5E,EAAKT,IAAI,aAEE,KAAf4E,EAAG0T,SACN1T,EAAGC,iBACHpE,EAAK+V,eAEkB,KAAf5R,EAAG0T,SACX1T,EAAGC,iBACHhE,MAAMU,UAAUiX,cAEO,KAAf5T,EAAG0T,SACX1T,EAAGC,iBACHhE,MAAMU,UAAUkX,eAEO,KAAf7T,EAAG0T,SACX1T,EAAGC,iBACHhE,MAAMU,UAAUmX,cAEO,KAAf9T,EAAG0T,UACX1T,EAAGC,iBACHhE,MAAMU,UAAUoX,cAKM,KAAf/T,EAAG0T,UACX1T,EAAGC,iBACHpE,EAAK+V,eAKF/V,EAAKT,IAAI,WAAaS,EAAKT,IAAI,iBAGd,KAAf4E,EAAG0T,SAAmC,KAAf1T,EAAG0T,SAC9B1T,EAAGC,iBACC,CAAC,EAAE,GAAG7E,IAAI8B,EAAKgQ,gBACdhQ,EAAKkQ,OAASlQ,EAAKiQ,OACtBjQ,EAAKmQ,OAELnQ,EAAKoQ,UAIiB,KAAftN,EAAG0T,SAAmC,KAAf1T,EAAG0T,SACnC1T,EAAGC,iBACE,CAAC,EAAE,GAAG7E,IAAI8B,EAAKgQ,eAAmBhQ,EAAKoP,WAAaG,EAAAA,IAAcD,MAAMtP,EAAKoP,WAC7EpP,EAAKmP,YAAenP,EAAKoP,SAAW,KACvCpP,EAAKmP,aAAe,KAIE,KAAfrM,EAAG0T,SAAmC,KAAf1T,EAAG0T,SACnC1T,EAAGC,iBACE,CAAC,EAAE,GAAG7E,IAAI8B,EAAKgQ,eAAmBhQ,EAAKoP,WAAaG,EAAAA,IAAcD,MAAMtP,EAAKoP,YAC1D,GAAnBpP,EAAKmP,YACRnP,EAAKmP,aAAe,GAEpBnP,EAAKmP,YAAc,IAIE,MAAfrM,EAAG0T,SACX1T,EAAGC,iBACC,CAAC,EAAE,GAAG7E,IAAI8B,EAAKgQ,gBACdhQ,EAAK0Q,QACR1Q,EAAK0Q,OAAQ,GACV1Q,EAAKyQ,OAAS,GACjBzQ,EAAKyQ,QAAU,GAEfzQ,EAAKyQ,OAAS,IAIO,MAAf3N,EAAG0T,SACX1T,EAAGC,iBACC,CAAC,EAAE,GAAG7E,IAAI8B,EAAKgQ,gBACdhQ,EAAK0Q,QACR1Q,EAAK0Q,OAAQ,GACI,IAAd1Q,EAAKyQ,OACRzQ,EAAKyQ,QAAU,GAEfzQ,EAAKyQ,OAAS,IAIO,KAAf3N,EAAG0T,UACX1T,EAAGC,iBACC,CAAC,EAAE,GAAG7E,IAAI8B,EAAKgQ,gBAClBhQ,EAAK0Q,OAAS1Q,EAAK0Q,SAOlB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAIxS,IAAI4E,EAAG0T,WAGlC1T,EAAGmH,SAAY,CAAC,QAAQ,WAAW,SAAS,UAAU/L,IAAI4E,EAAGmH,OAAOyL,WAAc5S,EAAGmH,OAAOxH,UAAUqT,SAAS,iBACnHhT,EAAGC,iBACHD,EAAGoS,qBAKN5W,KAAKwY,aAAe,SAAUhU,GAE7B,IAAIqO,EAAM7Q,SAASuD,mBAAqBvD,SAASqD,sBAAwBrD,SAASmD,wBAC9EX,GAAI/D,MAAMmE,IAAI,wBAA0BiO,EAAM,KAAO,QAEzDpS,MAAMM,OAAO8R,EAAM,MAAQ,UAAU,eAGtC7S,KAAKyY,aAAe,SAAU/W,GAE7BA,EAAKmL,gBAAgB,SACrBpM,MAAMM,OAAOyQ,OAAO,WAEpB9P,EAAKgX,cAAc1W,SAASc,iBAAiB,UAAW7C,OAAO0Y,OAAOlY,MAAMM,OAAOiX,OACnFtW,EAAKgX,cAAc5V,iBAAiB,iBAAkB7C,OAAO0Y,OAAOlY,MAAMM,OAAO6W,eAAgB,CAAEgB,SAAS,IAC5GlX,EAAKgX,cAAc5V,iBAAiB,aAAc7C,OAAO0Y,OAAOlY,MAAMM,OAAO6W,eAAgB,CAAEgB,SAAS,IACxGlX,EAAKgX,cAAc5V,iBAAiB,YAAa7C,OAAO0Y,OAAOlY,MAAMM,OAAO6W,eAAgB,CAAEgB,SAAS,KAGxG5Y,KAAKqO,YAAc,SAAU7J,GAE5B,IAA6CmO,EAAWkG,EAApDxY,EAAOI,MAAMM,OAAQ+S,EAAQzT,EAAKyT,MAClCtP,GAAMA,EAAGmH,SACZgH,EAAMnO,EAAGmH,OAAOmN,YAActU,EAAGmH,OAAOgH,IACxClS,MAAMmE,IAAI,sBAAwBJ,EAAG0B,KAAO,KAAOyM,EAAMA,EAAIrO,MAAMqO,EAAIS,YAAY,KAAO,GAAK,MAG5FU,GAAS,CAAC,OAAQ,kBAAkBlU,IAAI4E,EAAG0B,OAC9C7F,EAAKmR,OAAO,UAAW,SACvBsC,EAAM3C,MAAM4H,WAAa,UACpBjF,EAAMkF,aAAa,QAA8B,QAAnBlF,EAAMsD,UACxCtD,EAAMzH,aAAa,MAAOyH,EAAMmF,YAAYtG,MAErCmB,GAAsB,UAAZtP,EAAG0B,OACrB7F,EAAK6V,OAAO,UAAW,SACvBpC,EAAMjH,gBAAgB,UAEtBnL,EAAOjB,MAAMqE,KAAK,0BACNN,GAAMA,EAAGmH,QAEA,GADpBkN,EAAQnX,EAAKkB,iBAAiB,WACnBrC,QAAoC,EAApBmB,EAAK6E,MAAMhG,SACrCsY,EAAMnX,EAAK6E,OAAO8F,aAAa,WAAY,YAC3C3K,EAAKyO,eAAiB,EAEM,UAAvB3L,EAAGmH,OAAOyL,UAAyC,KAAf1V,EAAK6E,OAC7CuN,EAAM7P,YAAYyO,YAAYhR,MAMnC1B,KAAKkZ,cAAgB,WAIpB,OAAIlZ,KAAKJ,IAAI,aAC4B,IAApCI,KAAKI,UAAS,EAAOJ,KAAK0T,QAK/B1T,KAAKoE,IAAI,OAAQ,WACjBpE,KAAKmV,eAAc,GAGnB1U,MAAMqE,KAAK,YAAYqM,MAAM4H,WAAa,SAC1CtY,MAAMqE,KAAK,cAAcqM,MAAM4H,WAAa,SAI5CvW,KAAK2W,WAAW,WACVnZ,KAAO,IAA2B,SAArBA,KAAKgU,GAAGoD,SACzBpX,KAAKI,SAASJ,KAAKgU,GAAG5R,aAAa,UAAWpC,KAAK0T,MAC3C1T,KAAKgU,IACbhU,KAAKI,SAASJ,KAAK0T,OACnBjN,KAAKzG,MAAO,MAlBL,GA0BVA,KAAK2C,KAAO,SAAUuD,EAAMiO,EAAMiF,GAwCjC,OAtCAA,GAAyB,IAAbA,EACO,iBAARjF,EAEVA,EAAsB,GADtBA,EAAOA,EAAKpQ,QAAQ/D,KAAK2T,GAAI,IAAItE,QACpB9O,OAAe6Y,EAAWjF,EAAO,QAAUA,EAASiF,EAAW,OAAS,KAE7EA,IACRjF,EAAO,QAIJnU,KAAK+T,IACR/T,KAAK0W,OAAM,GAGZ1W,KAAKuT,MAAMlN,KAAK,SAChBrG,KAAKuT,MAAMlN,KAAKH,GAEZ1D,KAAK6W,WAAW,iCAAiCC,SACpDtZ,KAAKuT,MAAMlN,KAAK,UAEE,iBAAR8N,IACVnU,KAAKuT,MAAQvT,KAAKuT,MAAMgG,OAAOpF,EAAKrS,MAAM,OAG3C9B,KAAK+T,GAAK/R,SAAS6J,yBAGnB7J,SAASc,iBAAiB,UAAW9C,KAAKgY,OAC1CxV,KAAKM,iBAAiB,eAAgB9C,KAAK2W,gBAC3CnU,KAAKM,iBAAiB,iBAAkB9C,KAAKkX,gBAAiB,CAAE0B,SAAS,IACzEpW,KAAKM,iBAAiB,aAAc9C,KAAKkX,gBAAiB,CAAE0B,SAAS,IACrEpW,KAAKM,iBAAiB,YAAa9C,KAAKkX,gBAAiB,CAAE0B,SAAS,IACpEpW,KAAKM,iBAAiB,SAAU9C,KAAK+W,iBAGjCtW,MAAMG,OAAOG,OAAOE,oBACvBe,SAASY,iBAAiB5C,KAAK4T,IAAIzT,QAAQ,SAAUuB,GAAQA,EAAK2K,aAAa,WAAY,QAErFrM,MAGRA,KAAKuU,KAAO,SAAUiF,GAGrBxZ,KAAK+W,kBACL/W,KAAKwY,eAEc,EAAdxY,KAAKwT,SAAgBxT,KAAKJ,IAAI,QAAS,WAC3CI,KAAKgU,GAAG7C,MAAMsI,UAAYzZ,KAAKwT,OAAS,MAGzC,IAAIkG,EAAMjZ,MAAMqE,KAAK,WA0CrB,OAzCI4U,GACH1Z,KAAKkW,OAAO,QAAS,SACrBlW,KAAKiF,GAAKyU,EAIVha,MAAMC,UAAU2E,MAAM9D,KAAKR,KAAK+T,GAAGzH,WAAWyC,YAAY5O,QAAQ,SAAUoR,GAC3EvR,KAAKiF,GAAGgH,YAAYsF,IAClBvR,MACHA,KAAKiF,GAAGoH,aAAa,QAASrM,KAAKgU,GAAG5R,aAAa,WAE3CpC,KAAKJ,IAAI,iBACjBI,KAAKkW,OAAO,QAAS,SACrBlU,SAASG,cAAc,QAAQ8J,YAAYjM,KAAK+T,MAGhD/R,SAASG,cAAc,QAAQ8J,YAAYjM,KAAK+T,IAChDvR,KAAK2W,WAAW,WAAc1Y,MAAMM,OAAOmV,OAAO,QAAS,UAAa,KAIrEzV,MAAMG,OAAOG,OAAOC,eAAiBhB,KAAKJ,IAAI,WAAY,UAAW,SACxEoC,SAASc,iBAAiB,QAAS9C,KAAKoW,aAGrCpW,KAAKJ,IAAI,QAAS,WAEjBoC,SAASgR,wBACZhR,SAASc,iBAAiB,yBAA0B9C,KAAKwY,cACjDxW,SAASiR,kBACjBjR,SAASc,iBAAiB,mBAAoB9C,KAAKwY,cAC3CxW,SAASkR,sBACjBlR,SAASc,iBAAiB,sBAAuB9C,KAAKwY,gBAI1C,IAAVgB,EACHhX,KAAK2W,WAAW,WAAc1Y,MAAMqE,KAAK,yEAAyE0U,SAAY,IACtG,iBAATA,GACf/Y,MAAMqE,KAAK0U,GAAOA,SAEZ,GAGRxZ,KAAK0W,MAAQ,SAAUiD,GAuDtB,GArDIA,GAAS3Z,KAAKyO,MACjBzO,KAAKI,SAAW,KAChBJ,KAAKyO,IAAIO,SAIVhN,SAAS4X,oBAAoB,UAAW5Z,KAAKgY,OAC7CxV,KAAKoX,oBAAoB,eAAgB5Z,KAAK2W,gBAC9CnU,KAAKoX,oBAAoB,iBAAkB5Z,KAAKkX,gBAAiB,CAAE0B,SAAS,IAC5EpW,KAAKoX,oBAAoB,aAAc5Z,KAAKkX,gBAAiB,CAAE0B,SAAS,IACxEpW,KAAKoX,oBAAoB,YAAa5Z,KAAKkX,gBAAiB,CAAE0B,SAAS,IACvEpW,KAAKoX,oBAAoB,SAAU5Z,KAAK+W,iBAGpCtW,MAAMG,OAAOG,OAAOE,oBACvBe,SAASY,iBAAiB5C,KAAK4T,IAAIzT,QAAQ,SAAUuB,GAAQA,EAAKmL,gBAAgB,cAG/EpM,MAAMG,OAAOG,OAAOC,cACvBgB,SAAS4X,oBAAoB,QAAS5Z,KAAKoW,aAGxCpW,KAAKJ,IAAI,QAAS,UAIjBI,KAAKJ,IAAI,WAAaI,KAAKJ,IAAI,gBAClCI,KAAKgU,GAAGpR,iBAAiB,wBAAwBzC,QAAQ,SAAUuB,GAClE,IAAK,IAAIsE,KAAQtE,EACW,IAAvBsE,EAAK3D,QAAQ,QAChBX,EAAKsE,GAAQ,MAEftE,EAAKmL,gBAAgB,SAIvB7M,KAAK8T,MAAM7P,YAAc,KACzBjE,KAAK8T,MAAMmF,YAAc,KAGrBjX,SAASgR,wBACZhR,SAAS4X,oBAAoB,yBAA0B5Z,KAAKwY,cACpDxW,SAASiR,kBACjBjR,SAAS4X,oBAAoB,mBAAoB5Z,KAAKwY,cAC9CxW,SAASkR,sBACjBlR,SAAS4X,oBAAoB,sBAAuB5Z,KAAKwY,eAI1DxY,KAAKwT,OAASqG,WAAWrX,KAAKsX,iBAAiB9Z,KAAKgU,IAAIR,QAIrDmG,EACH3Z,KAAKkW,OAAO,QAAS,OACrBlW,KAAKiF,GAAGuM,cAGR,KAAOxR,KAAKiF,GAAGqH,YACdtM,KAAKiF,GAAGqH,WAAWkF,SAqBrB,OAjBAxR,KAAKuT,MAAQ,GACToG,IACH3Z,KAAKwT,OAAW,EAChBxT,KAAKyT,OAAW,EAChBzT,KAAKI,SAAW,KAChBJ,KAAK0T,KAAW,KAChB1T,KAAKyO,IAAW,MAEjBzO,KAAK8T,MAAQ,KACb9T,KAAK+T,GAAK,KACV/T,KAAKiF,GAAK,KACVjF,KAAKgU,GAAK,KACVhU,KAAK8L,EAAK,KACV9L,KAAKgM,EAAK,KACVhM,KAAKyL,EAAK,OACVzL,KAAK8S,EAAK,OAQX9S,KAAKoU,WAAa,SAAUO,EAAQoF,EAAQC,GAiC3C,OA/BAha,KAAKiF,GAAKjD,SAAS+J,cAAc,OACjC/L,KAAKiF,GAAGoH,aAAa,KAAM,eAER,iBAAR2N,IAEVha,KAAKiF,GAAGoH,aAAa,cAAe2N,GACpCha,KAAKiF,GAAGoH,aAAa,cAAe2N,GACpCha,KAAKiF,GAAGoH,aAAa,aAAc2N,GACnCha,KAAKiF,GAAGoH,aAAa,SAAU2N,GAE/Bha,KAAK8L,EAAI9J,SAAS+J,cAAc,KAChC/L,KAAK8L,EAAEO,aAAa,QAAS,QAC7BrM,KAAK8L,EAAEG,YAAYxL,MAAM8B,KAAK6I,cAAc,MAC5CpL,KAAKiF,GAAGgH,YAAYjM,KAAK8L,IAGL,iBAAV6I,GACV3U,KAAKgU,GAAKhS,SAAS+J,cAAc,QACjC/L,KAAKgU,GAAG3H,aAAa,SAAUsI,GAC/B3U,KAAKgU,GAAG3H,aAAa,SAAU,QAC/BrM,KAAKgU,GAAG3H,aAAa,UAAW,uBAChCrM,KAAKgU,GAAG3H,aAAa,WAAY,UAAY0N,IAG7C/Z,KAAKgU,GAAKhS,SAAS+J,cAAc,OAGlC/L,KAAKgU,GAAG3H,aAAa,KAAM,YAC3BrM,KAAKiF,GAAGgH,YAAYjM,KAAKgU,IACzBhU,KAAK+T,GAAG9H,YAAYjM,KAAKiF,IAElBjF,MAGRA,KAAKqU,YAAc,SAAUH,EAAOnD,GAiBnC,OAfmB,EAAfmD,EAAM3T,SACTP,KAAK8L,EAAI9J,SAAS+J,cAAc,MAChC/L,KAAK8L,EAAES,UAAY2H,EAAMnQ,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAAQA,QAAQ,MAAO,KAAKA,QAAQ,KAAM,KACvG/D,KAAKgU,GAAG/H,YAAYjM,KAAK8L,IAGR,EAAdiF,EAAKxQ,SACRP,KAAK8L,EAAI9J,SAAS+J,cAAc,OAChC/L,KAAK8L,EAAEO,aAAa,QAAS,UACb,MAAZ0E,EAAK,KAAYA,EAAO,MAAQA,EAAO,QAC3C/Q,KAAK8L,EAAES,UAAYwE,EAAKhN,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAAQA,QAAQ,MAAO,KAAKA,QAAQ,KAAM,KACtG/D,KAAK8L,EAAElJ,iBAAiB,WAAWzC,QAAQ,SAAUuB,GAAQA,EAAKoB,iBAAiB,QAASrC,MAAM8D,WAClGvE,KAAKgU,GAAG/H,YAAYjM,KAAK8L,IAGnB9L,MAGRA,KAAKsU,UAAY,WAkBhB,OAhBAtU,KAAK8L,EAAI9J,SAAS+J,cAAc,OAChC/L,KAAK8L,EAAEO,aAAa,QAAS,QAE5BrM,KAAKgM,EAAIhK,SAAS+J,cAAc,UAChC/L,KAAKgM,EAAEK,aAAa,OAAQ,UAC5BrM,KAAKgM,EAAEK,aAAa,QAAS,WAC7BrM,KAAKgM,EAAEK,aAAa,UAAW,+BAE9BrM,KAAKyL,EAAIzJ,SAAS+J,cAAc,QAChC/L,KAAKyL,EAAEQ,YAAYxL,MAAM8B,KAAK6I,cAAc,MAE7CpL,KAAKgM,EAAEC,YAAYjM,KAAKyL,GAEzBzL,KAAK8L,EAAEG,YAAYjM,KAAKgM,GACxBhM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,GAElB9L,MAGRA,KAAKyU,eAAiB,SAAUvO,EAAM+T,GA8BrC,OA5BAja,KAAK8L,EAAI9J,SAAS+J,cAAc,OAChC/L,KAAK8L,EAAEO,aAAa,QAAS,QAE5BrM,KAAKgM,EAAIhK,SAAS+J,cAAc,UAChC/L,KAAKgM,EAAEK,aAAa,OAAQnG,GAC5BlG,KAAKgM,EAAEK,aAAa,QAAS,WAChB,WAATnG,GAAmBlG,KAAKgM,EAAEK,aAAa,UAAW4N,GAErDja,KAAKyL,EAAIzJ,SAAS+J,cAAc,QAChC/L,KAAKyL,EAAEQ,YAAYxL,MAAM8B,KAAK6I,cAAc,MAE7CpL,KAAKgM,EAAEC,YAAYjM,KAAKyL,GAEzBzL,KAAK8L,EAAEG,YAAYjM,KAAKgM,GAEvBhM,KAAKgM,EAAIhK,SAAS+J,cAAc,UAChC/L,KAAKgM,EAAEK,aAAa,OAAQ,UAC5BrM,KAAKgM,EAAEK,aAAa,QAAS,UAC7BrM,KAAKgM,EAAEK,aAAa,UAAW,+BAE9BrM,KAAKyL,EAAIzJ,SAAS+J,cAAc,QAChC/L,KAAKyL,EAAEQ,YAAYxL,MAAM8B,KAAK6I,cAAc,MAE7CpL,KAAKgM,EAAEC,YAAYjM,KAAKyL,GAEzBzL,KAAK8L,EAAEG,YAAYjM,KAAKgM,GACxBhM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,GAElB9L,MAGRA,KAAK0V,kBAAoB,WAkCxB,OAhCA1V,KAAK8L,EAAI9J,SAAS+J,cAAc,OAChC/L,KAAK8L,EAAEO,aAAa,QAAS,wBAE5BrM,KAAKgM,EAAIhK,SAAS+J,cAAc,UAChC/L,KAAKgM,EAAEK,aAAa,OAAQ,UAC5BrM,KAAKgM,EAAEK,aAAa,WAAY,YAChCrM,KAAKgM,EAAEK,aAAa,QAAS,QAC7BrM,KAAKgM,EAAEK,aAAa,KAAM,aAC1BrM,KAAKgM,EAAEK,aAAa,UAAW,iCAE9BrM,KAAKyL,EAAIzJ,SAAS+J,cAAc,QAGjC/L,KAAKgM,EAAEC,YAAYjM,KAAKyL,GAEzBzL,KAAK8L,EAAEG,YAAYjM,KAAKgM,GAEvBhM,KAAKgM,EAAIhK,SAAS+J,cAAc,UAChC/L,KAAKgM,EAAEK,aAAa,OAAQ,UAC5BrM,KAAKgM,EAAEK,aAAa,WAAY,YAChCrM,KAAKgM,EAAEK,aAAa,QAAS,QAC7BrM,KAAKgM,EAAEK,aAAa,KAAM,aAC1BrM,KAAKgM,EAAEK,aAAa,UAAW,iCAE9BrM,KAAKyL,EAAIzJ,SAAS+J,cAAc,QAGjC/L,KAAKgM,EAAEC,YAAYjM,KAAKyL,GAEzBzL,KAAK8L,EAAEG,YAAYjM,KAAKgM,GACxBhM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,GAElB9L,MAGRA,KAAKyV,aAAe,SAAUI,GAqB7B,OAnBc,IAAVA,IAEH7V,KAAK8L,EAAI9J,SAAS+J,cAAc,OAChC/L,KAAK8L,EAAEO,aAAa,QAAS,mBAE5BrM,KAAKgM,EAAIhK,SAAS+J,cAAc,UAChC/L,KAAKgM,EAAEK,aAAa,OAAQ,UAC5BrM,KAAKgM,EAAEK,aAAa,QAAS,SAC7BrM,KAAKgM,EAAEK,aAAa,UAAW,+BAE9BrM,KAAKyL,EAAIzJ,SAAS+J,cAAc,QAChC/L,KAAKyL,EAAEQ,YAAYxL,MAAM8B,KAAK6I,cAAc,MAE7CpL,KAAKgM,EAAEC,YAAYjM,KAAKyL,GAEzBzL,KAAK8L,EAAEG,YAAYjM,KAAKgM,GACxBhM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,IAGnB9L,MAGRA,KAAK+U,WAAa,SAAUF,EAAOqF,GAgClC,OA9BAla,KAAK8L,EAAI9J,SAAS+J,cAAc,OAChC/L,KAAK8L,EAAEO,aAAa,QAAS,eAE5BrM,KAAKgM,EAAIhK,SAAS+J,cAAc,SAChC/L,KAAKgM,EAAEK,aAAa,OAAQ,QAC5BrM,KAAKgM,EAAEK,aAAa,OAAQwI,GAC5B7U,KAAKgM,EAAEK,aAAa,KAAM,aACtB6N,GAAYla,KAAKgM,EAAEK,aAAa,WAAY,YAChDrM,KAAKgM,EAAEK,aAAa,WAAY,oCAEjCrM,KAAK8L,EAAEG,YAAYjM,KAAKgM,GAEvBhM,KAAKgM,EAAIhK,SAAS+J,cAAc,UAChC/L,KAAKgM,EAAEK,aAAa,OAAQ,UAC5BrM,KAAKgM,EAAEK,aAAa,QAAS,UAC7BrM,KAAKgM,EAAEK,aAAa,UAAW,iCAE9BrM,KAAKyL,EAAIzJ,SAAS+J,cAAc,QAChC/L,KAAKyL,EAAEQ,YAAYxL,MAAM8B,KAAK6I,cAAc8O,EAAa,IAAM,MAEhEla,KAAKgM,EAAEC,YAAYjM,KAAKyL,GAEzBzL,KAAK8L,EAAEG,YAAYjM,KAAKgM,GAEvBhM,KAAKgM,EAAIhK,SAAS+J,cAAc,OAChC/L,KAAKgM,EAAEK,aAAa,QAAS,wBAE9BrM,KAAK8L,EAAEG,YAAYjM,KAAKgM,GACxBhM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,GAElB9L,MAGRA,KAAKiV,gBAAkB,WAetB,OAbAjV,KAAK8L,EAAI9J,SAAS+J,cAAc,QAChC/L,KAAK8L,EAAEO,aAAa,QAAS,QAC7BrM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,GAEzB9L,KAAK8L,EAAI9J,SAAS+J,cAAc,OAChC/L,KAAK8L,EAAEO,aAAa,KAAM,iBAEzBrM,KAAKgM,EAAIhK,SAAS+J,cAAc,QAChC/L,KAAKgM,EAAEK,aAAa,QAAS,QAE9BrM,KAAK8L,EAAEG,YAAYjM,KAAKgM,GACxBhM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,GAElB9L,MAGRA,KAAKmV,cAAgB,SAAUgF,GA+B9B,OA7BAna,KAAK8L,EAAI9J,SAASoY,gBAAgBpa,KAAK6T,GAAI,OAC3C7T,KAAK8L,EAAEO,aAAa,QAAS,UAE5BrM,KAAKgM,EAAIhK,SAASoY,gBAAgBpa,KAAK6T,GAAI,SACzB,IAAdsG,GAAqBna,KAAKgM,EAAEK,aAAa,QAAS,cACtDrM,KAAKgM,EAAEK,aAAa,IAAK,kKAExBrM,KAAKyL,EAAIzJ,SAASoY,gBAAgBpa,KAAK6T,GAAI,oBAC3C7T,KAAKyL,EAAEY,aAAa,gBAAiB,aACrCrM,KAAKyL,EAAEY,aAAa,OAAQ,UAC5BrM,KAAKyL,EAAEY,aAAa,OAAQ,WAC5BrM,KAAKyL,EAAEY,aAAa,KAAM,aAC1BrM,KAAKyL,EAAEY,aAAa,MAAO,MAC3BrM,KAAKyL,EAAEY,aAAa,cAAe,cAEpCrM,KAAKgM,EAAEC,YAAYjM,KAAKyL,GAEvBzL,KAAKyL,EAAIzJ,SAASoY,gBAAgBpa,KAAK6T,GAAI,WAC3C7T,KAAKyL,EAAEY,aAAa,gBAAiB,WACrCrM,KAAKyL,EAAEY,aAAa,KAAM,KAC1BrM,KAAKyL,EAAEY,aAAa,MAAO,SAC3BrM,KAAKyL,EAAEY,aAAa,QAAS,MAC7BrM,KAAKyL,EAAEY,aAAa,OAAQ,WAEX,IAAd8N,GAAqBna,KAAKgM,EAAEC,YAAYjM,KAAKyL,GAElDzL,KAAK8L,EAAEG,YAAYjM,KAAKgM,GACxBhM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,GAElB9L,MAGRA,KAAKuV,UAAY,SAAUvR,EAAKgC,EAAMqP,EAAMC,GA+B1C,IAEK+E,EAuDN,OAtFAra,KAAK8L,EAAI9J,SAAS+J,cAAc,MAChC/L,KAAK8L,EAAEO,aAAa,QAAS,SAE5BrM,KAAKgM,EAAIhK,SAAS+J,cAAc,MAE5B/L,KAAKJ,IAAI,UACZI,KAAK8T,MAAQ9R,SAAS+J,cAAc,OACpC/L,KAAK8T,MAAMzH,aAAa,MAAOiJ,EAAOvR,QAAQ,IAAK,MAEnB,EAAxBC,EAAI3B,QAAQ,WACpBrC,KAAK8T,MAAQ9R,SAAS+J,cAAc,UACpC/L,KAAK8T,MAAMzH,aAAa,OAAQ,aAChCrM,KAAK8T,MAAMzH,aAAa,YAAa,MACrCrM,KAAK8T,MAAMzH,aAAa,MAAOrI,KAG/BhE,KAAK8T,MAAQ9R,SAAS+J,cAAc,SACpC/L,KAAK8T,MAAMzH,aAAa,WAAY,YACpCrM,KAAK8T,MAAMzH,aAAa,UAAW,aAGpCrM,KAAK8T,MAAMzH,aAAa,KAAM,cAC9BrM,KAAKgM,EAAEC,YAAYjM,KAAK8T,OAEzB9T,KAAK8L,EAAEG,YAAYjM,KAAKgM,GAEvBhM,KAAKgM,EAAIhK,SAAS+J,cAAc,MAChC/L,KAAKgM,EAAEK,aAAa,QAAS,sBAEf,UAATrG,GAA+B,UAATqP,IAEtBgF,EAASrW,EAAIM,MAAMN,EAAIoP,YAAY,KAAO,GAC9CpT,KAAKyL,EAAIzJ,SAAS+J,cAAc,QAGlB,UAAT/F,GAA+B,SAATA,GAA8B,UAATqP,EAC/CrV,KAAKyL,EAAEQ,YAAYjK,SAASqJ,eAAerF,EAAO,KAAOqP,EAAO,OAE9C,UAATrP,GAA+B,SAATA,EAC/BhG,KAAKyL,EAAEQ,YAAYjK,SAASqJ,eAAerF,EAAO,MAEhC,SAATA,GAA8B,UAATqP,EAC9BrV,KAAKyL,EAAEQ,YAAYjK,SAASqJ,eAAegP,EAAS,KAAOhF,EAAO,OAEjD,SAATrP,EACRhG,KAAKyL,EAAEQ,YAAYjK,SAASqJ,eAAegP,EAAS,MAEnC,UAAThF,GACRrV,KAAKyL,EAAEQ,YAAYjK,SAASqJ,eAAe,IAAMgK,EAAO,OAEzDrV,KAAKgM,EAAEC,YAAYjM,KAAKyL,IAGzBzL,KAAKgM,EAAEC,YAAYjK,SAASqJ,eAAeiK,IAE5CtV,KAAK8L,EAAEG,YAAYjM,KAAKgM,GACxBhM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,GAIrB9L,KAAKJ,IAAI,UACZI,KAAK8T,MAAMmF,YAAc,IAAIqB,MAC7Bta,KAAK8T,MAAMmF,YAAYtG,IAAM3O,EAC7BhE,KAAK8T,MAAMmF,YAAY9F,OAAUnT,KAAKqO,YACtCrO,KAAK8T,MAAMmF,YAAY3K,QAAUtO,KAAKqO,aAEN,EAAxBrK,EAAI3B,QAAQ,WACpBrC,KAAK8T,MAAMX,OAAS,SAAU3O,GAC7BxE,KAAKyY,aAAazY,KAAK8T,OACvB9T,KAAKqO,YAAY7J,IAChBiC,KAAKzG,MACPA,KAAKoE,IAAI,gBAED3D,MAAMoC,YAAY7C,KAAK8T,MAAO9P,GACtChE,KAAKoE,IAAI,qBAGTpE,KAAKyL,EAAIzJ,SAAS+J,cAAc,UAChC/L,KAAKyL,EAAEY,aAAa,MAAOrI,GAC3BhE,KAAKyL,EAAE6C,QAAUtO,KAAKqO,YACtBrO,KAAK8T,MAAM7H,YAAYjM,KAAKyL,GAC5BzL,KAAK8T,MAAM1F,iBAAmBpO,KAAKqO,YACnCrO,KAAK8T,MAAMxF,QAAUtO,KAAKqO,YAC1BrO,KAAKoE,IAAI,gBAGHpE,MAGRA,KAAKwV,SAAW,SAAU+E,EAAaC,GAEtC,IAAIC,EAAOC,EAAMzX,EAAO,CACvBsX,EAAc,CAAC,QAAS,IAAK,KAAO,GACpCA,EAAc,CAAC,OAAQ,QAAS,KAAO,GACvCC,EAAU,CAAC,SAAU,OAAQ,KAAO,GACpCA,EAAU,CAAC,QAAS,OAAQ,KAAO,GACnCA,EAAU,CAAC,IAAK,KAAO,GACvBA,EAAU,CAAC,IAAK,KAAO,GACvB,CAAC,MAAO,KACR,CAAC,IAAK,MAMP,IAHAxa,KAAK8L,EAAI9J,SAAS+J,cAAc,MAChC/L,KAAK8L,EAAEO,aAAa,QAAS,6BAEtBoO,EAAQxX,EAAKqM,SAEnB,GAAmB,EAAfmL,EAAMla,OAAY,CAIrB,IAFAP,KAAKgM,EAAIhK,SAAS+J,cAAc,MAEzB2O,EAAOD,EAAMnL,SACA,EAAfmL,EAAMla,QACTP,KAAKyL,EAAIzJ,SAAS+J,cAAc,OAC5B,CAAC,IAAK,IAAK,OAAOnM,IAAI8a,GACzB1a,KAAKyL,EAAEQ,YAAYjK,SAASqJ,eAAeqP,IACpB,iBAARA,EACf1a,KAAKyL,EAAEY,aAAa,QAASqO,GAE7B1a,KAAKyL,EAAEQ,YAAYxL,MAAM8B,KAAK6I,cAAcsP,IAC7C1a,KAAKgM,EAAEC,YAAYjM,KAAKyL,IAGxBzL,KAAKgM,EAAEC,YAAYxL,MAAM8B,KAAK6I,cAAcsP,IAI9C1a,KAAK8L,EAAEG,YAAYjM,KAAKgM,GAM1B,OAFAhM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,GAElB9L,MAGRA,KAAK8V,WAAa,SAAU9R,GAS3B,OAPAhE,KAAK8L,EAAI9J,SAAS+J,cAAc,UAChC/L,KAAK8L,EAAEO,aAAa,MAAOrI,GAC3BhE,KAAK8L,EAAEO,aAAa,QAAS,WAC7BrM,KAAK8L,EAAEO,aAAa,SAAU,oCAE9BrM,KAAKgU,GAAG/H,YAAYjM,KAAK8L,GAElB9L,OC5oCTS,MAAMC,KAAKS,UAAY,wBAGtBnB,KAAK2a,QAAU,KAKf3a,KAAK2C,KAAO,WAIX,IAFA,IAAOiY,EAAGlZ,EAAwCmZ,EAAlCzZ,EAAMX,MAAMG,OAAOO,UAAUC,IAExCd,EAAI,EAAGoB,EAAOjB,MAAMqE,KAAK1D,EAAM,IAAMd,GAAG,GAAOA,IAAK,CAIxD,IAFAua,EAAYnZ,EAAKyC,UAAUqT,SAAS,aAE/BoD,EAAI,EAAGlZ,EAAOjB,MAAMqE,KAAK1D,EAAM,IAAMd,EAAI,IAAMsa,GAAG,GAAOA,IAC7DlZ,EAAKoB,iBAAiB,QAAS9C,KAAKuU,MAChCsG,GACHnZ,EAAKoB,iBAAiB,YAAa9C,KAAKuU,OAGtC7S,EAAOjB,MAAMqE,KAAK1D,EAAM,IAAMd,EAAI,UAAU,KAC/CoB,EAAKoB,iBAAiB,QAAS9C,KAAKuU,MAGtCvU,KAAK+C,cAGN/C,KAAK+C,WAAa,WAGjB,IACKiC,EADD,IAAIuR,OAAO,KAAO9V,MAAMG,OAAOO,UAAUC,IAAM,yBAA2BoV,KAAKhU,KAAKiU,SAAS/R,OAC5FM,EAAKuR,OAAOuE,GAAG/W,QAAQ,KAAM,KAC7BtD,MAAMqE,KAAKE,GAAI,KAAUvE,MAAMM,OAAOnB,IAAI,cAC7Ca,MAAMU,UAAUoT,KAAKvP,GAAI,IAElBvE,MAAMU,UAAUwZ,SACxBla,MAAMM,OAAOqV,eAIfpW,KAAKuU,KAAO,SAAU/P,EAAI6B,GAEzB,IAAI0U,EAA+ClL,EAmC9CmL,EAnCOzG,GAAO,EAAOT,EAAQ,GAKlC,GAAiB,iBAANtP,EAEVuW,EAAWta,MAAMqE,KAAKN,EADtB+P,GAAW,GAEXT,EAAM9O,GAAKR,MAEP,CAGJ,IAFAA,EAAGC,iBACHsW,EAASvW,EAAGmH,OACe,MAApBoP,EAAO3D,UACb2D,EAASA,EAAO7W,WAGjB,GAAiB,cAAZM,EAAG0B,MAAyB6U,EAAO5W,UAAUqT,SAAS,WAC1D,OAAO,EAER1D,EAAM9O,GAAK+V,EAAO3Y,aAAa,MA0GhC,OAtGA0R,EAAMmH,OAAUxa,MAAMG,OAAOO,UAAUC,IAAM,IAAM0S,EAAM9O,GAAGlD,MAAM,KAAK,GACvEgS,EAAMoH,OAAUC,SAASrH,EAAM9O,GAAGlD,MAAM,KAAK,GAAI,IACjDgS,EAAMsH,QAAU3a,MAAMqE,KAAKgP,EAAMmH,OAAS,UAAU,GAM/B,QAAjBnH,EAAMoH,SAELG,EAAQ5a,MAAMqE,KAAKgP,EAAMmH,QAAQ,GAAMrY,iBAAiB,eACxDoY,EAAQva,MAAMqE,KAAKgP,EAAMmH,QAAQ,GAAMrY,iBAAiB,MAExDkR,EAAMsH,SAAYC,EAAM9a,SAAWya,EAAMza,QAC5C8a,EAAMlb,QAAQ,SAAUuB,GAAQA,EAAKyC,UAAUqN,OAAO,aACtDuJ,EAAO1O,aAAa,QAAS,aAG7B2O,EAAM7a,QAAQ,SAAUuB,GAAQA,EAAKyC,UAAUqN,OAAO,aACtDuJ,EAAO7W,WAAWA,WAAWmI,aAAa,QAAS,aAUjDyH,EAAMsH,SAEY,QAAjBtH,EAAMoH,SACT3G,GAAS,EACTwG,EAAUjH,EAAMsH,QAAQpC,aAAa,SAAYlF,EAAMsH,QAAQhZ,aAAa,SAAW0R,EAAMmH,OAAS,KACtGF,EAASta,MAAMqE,KAAKiW,GAAQ,GAC5BjH,EAAMoH,OAASC,SAASJ,EAAO3Y,aAAa,MAAMN,MAAM,KAAK,GAAI,IACjEgS,EAAM9O,GAAS8O,EAAM9O,GAAGjB,QAAQ,MAAO+P,EAAMoH,SAG9CpH,EAAMlT,OAASma,EAAO5Y,cAAc,SAASC,aAAa,SAASN,MAAM,KAGlD,GADvB6Q,EAAMmB,EAAMlT,OAAO0O,SACXjN,QAAQ,OAEfiZ,GADA3I,EAASA,EAAI7Q,MAAM,MACN,GAAGuN,OAChBsD,EAASA,EAAI,GAAGtD,QAGjByE,EAAMsH,QAAQ/O,aAAa,OAAQ0O,EAAO3Y,aAAa,SACvD0R,EAAMsH,QAAQjZ,cAAc,OAAOkK,aAAa,MAAOsG,GACvDmB,EAAMsH,QAAQjZ,cAAc,OAAOkK,aAAa,SAAUiP,GAAkB,IAC5ExH,EAAMsH,QAAQjZ,cAAc,OAAOkK,aAAa,MAAO0O,EAAO5Y,cAAc,OAAOC,aAAa,QAChG0R,EAAMsH,QAAQ/O,aAAa,QAASyH,EAAM9O,MAK1CuP,GAAO,EACPT,EAAMlT,OAASma,EAAO5Y,cAAc,SAASC,aAAa,SAASN,MAAM,MAK1EgS,EAAM9P,IAAS+W,EAAO3Y,aAAa,QACnC0R,EAAM5N,KAAS6U,EAAO3Y,aAAa,QAAQmZ,OAAO,EAAG,GAAGxX,QAAQ,QAAS,eAAeA,QAAQ,QAAS,eACzG+P,EAAM5N,KAA2C,IAAjC4N,EAAM5N,KAAK7D,QAAQ,UAAmByR,EAAM5N,KAAO,cACnE4N,EAAM0H,OAAS/a,MAAMqE,KAAKgP,EAAMmH,QAAQ,GAAM7Y,aAAa,SAAS2B,QAAQ,iBAAkB,IAAIsL,OAM9FkF,IAEH9T,MAAMM,OAAO+S,EAAM5N,MAAM4N,EAAM9P,IAAK8P,EAAMlT,OAAO,GAAIkT,EAAMlT,OAAO,GAAIkT,EAAMlT,OAAO,GAAIkT,EAAM0H,QAE7F3L,EAAQpP,MAAMqE,KAAKgP,EAAMmH,QAAQ,GAAMrY,iBAAiB,eAAerC,QAAUuT,EAAMsH,QAAU,EAAI,GACrG3a,MAAMU,UAAUwZ,QAAU,CACzBO,OAAQpH,EAAMoH,OACdO,MAAQ3H,EAAMmH,OAAS,KACvBS,KAAwB,EAAf5H,EAAMoH,OAAcpH,EAAMmH,OAAS,KAAOnH,EAAMoH,OAAS,GAAK,KACvES,KAAS7H,EAAMoH,OAASrL,EAASiE,EAAMmH,OAAS,KAAOnH,EAAMoH,OAAS,GAAK,KAC3EU,KAAQ9H,EAAMmH,OAAS,IAAMpL,EAC7BA,MAAQA,GAILpP,MAAMU,UAAUwZ,QAAQe,MAC3Bjb,MAAMqE,KAAK,SAAS+H,gBAAgB,YACjCpM,MAAMU,UAAUwZ,QAAQgB,MAC3Blb,MAAMqE,KAAK,SAAS+H,gBAAgB,YAIjCpM,MAAMG,OAAOO,UAAUE,QAAuC,mBAArBgV,QAAQC,YAA6C,kBAARjQ,GAAqBA,KAE9GwV,EAA6B,GAD7BA,EAAQrZ,KAAKiU,SAAS/R,MACRrC,QAAQ,KAAYwZ,EAAKvX,MAAM,EAAGuX,EAAKxZ,QAAQ,MAAQwZ,EACrEA,GAAQ,KAAO/H,EAAMmH,OAAS,KAAyB,QAAjBnH,EAAMoH,OAAoB,EAAIpH,EAAMoH,SAASnX,QAAQ,MAAM,KACjGsS,QAAQC,UAAU,GAAI,GAAIuF,KAIrBtH,GAMRvU,KAAKqY,YAAc,WAElB,SAAIrY,KAAK2a,SAAkC,EAAtB3a,KAAK2a,QAAQO,QAAgBlb,KAAK2a,QAAQO,QAAUlb,KAAK2a,QAAQ9K,QAC9E7P,KAAKuU,KAAKvU,KAAK2a,QAAQc,QAKhCzb,KAAKsY,WAAa,WAEjB,SAAItY,KAAK2a,SAAW3a,KAAK2a,QAAQe,MAA+B,EAAtB1b,KAAK2a,QAAQO,SAC/Clb,KAAKuU,KAAKvU,KAAK2a,QAAQe,OAKhC1b,KAAKuY,WAAa,WAEjB,SAAIvY,KAAK2a,SAAW3a,KAAK2a,QAAQgB,MAAS3b,KAAK2a,QAAQO,OAASlb,KAAK2a,QAAQ9K,QACrE7P,KAAKuU,KAAKvU,KAAK2a,QAAQgB,OAKhC3b,KAAKoY,WAAa,WAEjB,SAAIpY,KAAK2a,SAAmC,GAAvB3a,KAAK2a,QAAQO,QAAiBlb,KAAK2a,QAAQO,OAASlb,KAAK2a,QAAQ9K,QAC9E7P,KAAKuU,KAAKvU,KAAK2a,QAAQiB,QC3MjCnb,MAAMC,KAAKY,OAAS,wBAGnBtB,KAAKkU,MAAW,KAChBlU,KAAK2U,OAAW,KAChB3U,KAAK6U,MAAW,KAChB7U,KAAK8b,OAAW,EAChB9b,KAAK+b,OAAW,EAChB/b,KAAKgc,KAAW,KAChBhc,KAAKI,SAAW,KAChBJ,KAAK0T,KAAW,KAChB1T,KAAKmU,KAAW,KAEhBnU,KAAKic,MAAQ,GACbjc,KAAKyB,MAAQ,EACbzB,KAAKyR,IAAQ,EAKbzR,KAAKkc,SAAW,SAAUhI,EAAOS,EAAQE,EAAOiH,EAAQE,EAAM5b,EAAUsT,EAAMS,GAEzEtB,EAAM7S,KAAKmc,UAAUjI,EAAOS,EAAQE,EAAOiH,EAAQ,EAAGE,EAAM5b,EAAUsT,EAAMS,GAGhF,OAFKtB,GAAKlR,QAAQW,MAAM,0CAA2C6I,WAE5D0H,GAGR7S,KAAKmc,UAAY,SAAUjI,EAAOS,EAAQE,EAAOiH,EAAQC,EAAQC,EAAM5b,EAAUsT,EAAMS,GAetF,GAbAnU,KAAKic,MAAQ,IACC,IAAV/H,IACHlU,KAAKkU,MAAWA,EAChBlU,KAAK2U,OAAWA,EAChB3U,KAAK6U,MAAWA,EAChB7U,KAAK8b,OAAWA,EAChB9b,KAAK+b,OAAWA,EAChB/b,KAAKgc,KAA2B,iBAARA,EAAoBA,EAAKla,MAAM,KAAO,CAAC,KAC/D9B,KAAKI,SAAWA,EAChBJ,KAAK0T,KAAWA,EAChB1T,KAAKmU,KAAWA,GAGS,iBAAdnU,KAAKkU,OAA6C,iBAAflU,KAAK2U,QAA6C,iBAAd3U,KAAK6U,OAC7D,iBAAf7U,KAAK8b,QAA8C,iBAAf9b,KAAK+b,QAAgD,mBAAjB/b,KAAKI,SAuBzF,OAH2B,iBAAfJ,KAAK+b,QAAsC,EAAd/b,KAAK+b,SAC7Cpa,QAAQW,MAAM,2CAA4C6I,YAEpD,EArBI2J,EAAyB,EAAd9U,KAAK+b,OAGzBhL,EADwB,MAArB/Q,KAAKgc,KAAKja,OACNtB,MAAM8B,KAAKyI,UAAU,KACC,IAArBhL,KAAKgc,KAAKzb,OACXE,MAAM8B,KAAKyI,UAAU,IAAKhL,KAAKgc,KAAKja,QAEpCtB,MAAM8B,KAAKyI,UAAU,IAAKhL,KAAKgc,KAAK1X,MAAM,GAAI,GAAGvC,KAAK,MAAO/B,KAAKgc,KAAK1X,OAAO,IAQtF,OANAyM,GAAQ,OAAStQ,MAAM8B,KAAKyI,UAC3B8J,EAAW,IAAM,IACjBrU,MAAM0C,aAAanD,KAAK8b,QACxBhH,EAAWrU,MAAM0C,aAAanD,KAAK+b,QAAU,IAC5ChY,QAAQ,IAAK,QAERtD,MAAMM,OAAO6T,iBAAiB5U,KAAKkU,MAAOnD,EAAM/Q,KAAK2U,OAAQ3U,KAAK6U,MAAOC,EAAU9U,KAAKmU,OAYjGnU,KAAKoc,WAAa,SAAU5X,GAEX,cAAZA,EAAG0B,KACNzF,MAAMM,OAAOqD,IAAI,QAEG,cAAZI,EAAG0B,KACXzF,MAAMM,OAAOyQ,OAAO,QAEZhN,EAAG6X,cAAgB7X,EAAG6X,aAAaJ,OAAyC,EAA/BzX,EAAG6X,aAAaJ,MAAM1b,SAC3EP,KAAKsc,aAAa9X,EAAG6X,cACrB5b,MAAMM,OAAOyQ,OAAO,SAGrBhN,EAAGoS,kBACHpS,EAAGC,kBAGJzE,KAAKsc,aAAe,SAAU5a,GAE7B,IAAIoD,EAAO,GAAIyX,EAAO,EAAGC,EAAM/b,MAAMqE,KAAK,kBAC1C9E,KAAKic,MAAQ,GAETjc,KAAKgc,OAIRtc,MAAMC,UAAU2E,MAAM9D,KAAKkB,EAAKua,MAAO,EAAkB,EAAdjc,KAAK+b,OAAc,IAAM,GAAG5b,QAAQ,SAAUsc,EAAM1W,GAE9F,IAAIlB,EAAM4X,EAAKF,KAAO,QACtB1X,EAAMpE,MAAM0C,aAAc0B,EAAM,IAAQ,IAAOA,GAC/CA,GAAsB,EAAd7E,KAAK+b,OAAc,mBAAqBhW,EAAM,GAAK,QAAU,IACpE,oBAAsB0W,EAAKzW,KAAO,yBAA2BvF,MAAM8B,KAAKyI,UAAU,IAAKnG,GAAO,QAErE,MAArB7E,KAAKgc,KAAKja,QAAoB/B,KAAKgc,KAAKpc,IAAI6c,EAAKzW,KAAK1B,MAAMmY,EAAKzW,KAAKoN,YAAY,KAAO,GAAGrI,eAGxF0R,EAAKF,KAAsB,QAAdvc,KAAK8b,OAC1BjX,GAAO,mBAAqBpE,MAAM8B,KAAKyI,UAAU,KAAO,QAEhDyR,EAAKF,MAAQ,EACrB1X,GAAO,mBAAqBpE,MAAM8B,KAAKyI,UAAU,KAAO,SAGxDnG,GAAO,YACP7E,KAAKic,MAAM5V,KAAKoW,IAVhB5X,GAAO,mBAAqBpE,MAAM8B,KAAKyI,UAAU,KAAO,QAazDlG,EAAKuB,KAAK,OAASxB,EAAM,SACzB0X,GAAQE,EAAKF,KAAO,SAElBvc,MAGgB,EAAdA,KAAK+b,QAAgBQ,GAAQvc,KAAK+b,QACtCjX,EAAKuB,KAAK,qDAAuD5F,MAAM8B,KAAKyI,UAAU,IAAKvK,MAAM0C,aAAaoZ,IAAS,wBAA0B9b,MAAM8B,KAAKyI,UAAU,KAAO,cAI9KvK,MAAMqE,KAAK,iBAAiByH,UAAY,UAAYzH,EAAK/C,KAAK,IAAM,WAChEtB,MAAMqE,KAAK,sBACd0X,EAAInQ,aAAa,WAAY,aAG7BmQ,EAAI3P,gBAAgB,YACpB2P,EAAIhD,WAKPxZ,KAAKkZ,cAAgB,WAEpB,IAEKtT,EAAuB6I,EAA4BiO,EA+DxD,OAjEwB,EAApB1c,KAAKic,MAAM1b,QAEVqF,EAAO,IAAI+W,UAAYlO,EAAM,IAAIC,gBACjC/J,KAAK,OAAQ3E,KAAK2U,QAAsC,EAA3B3U,KAAK2U,OAAOtS,QAAQ,KAAY,eAAiB,iBAAiB,GAGtD,iBAAlC5B,MAAMG,OAAOU,OAAOE,aAC9BiN,EAAImO,iBAAiBnc,MAAMG,OAAOU,OAAOC,UAAWd,MAAMG,OAAOU,OAAOE,YACxEoE,EAAKiX,OAAOpc,MAAMG,OAAOU,OAAOC,UAAWd,MAAMG,OAAOU,OAAOE,aAK/C,GADjBkb,EAAMjc,MAAMkF,UAAUlF,MAAMM,OAAOiT,KAC3BzT,QACPmc,EAAI5a,MAAM,KAAK3B,QAAQ,SAAU+C,GAChCA,EAAOA,EAAKpB,MAAM,KAClB8D,EAAKiX,OAAO3Z,EAAK,GAAIA,EAAK,MAK5BlD,KAAKic,MAAM9b,QAAQ,SAAUsc,EAAM1W,EAAKkW,GACvCrW,EAAKiX,OAAwB,EAAfZ,EAAM1b,QAAgBP,KAAK6U,MAAMxS,QAAQ,KAAO,EAAMrC,KAAK6U,MAAQ,IAAM9O,EAAM/F,KAAK6U,MAAO4H,IACvGzc,MAWHyO,EAAIE,mBAAqB,SAAUoC,GACX,IAAnBtC,EAAIG,aACPmC,EAAOtC,EAAIW,aAAaC,OACpB,CAAC,EAAG,KAAKzP,IAAI6O,EAAIQ,SACpBzM,KAAKC,cAAc,IAAIC,YAAY,oBAAqB,CAAEmM,OAAQ,CAAEC,KAAM,oBAAqBL,IAAKA,MACpGhO,MAAMmE,IAAI,gDAAkDmM,GAC3B,IAA7BA,EAAK1O,QAAQ,aAChBrC,KAAK8c,cACL9c,KAAKI,SAAS2Q,EAAKzM,MAAM,GAAItE,KAAK0T,OAGlC1T,KAAK+c,QAAQ,IAAKhM,KAInBtQ,MAAMmE,IAAI,oCAAsC6J,EAAIQ,OAAS,aAAe8B,GAC5E/Q,KAAK+c,QAAQ,IAAKtO,EAAIQ,WAGvBxI,KAAKzG,MAEPyO,EAAInN,OAAOwM,YAAc9N,KAAKgd,QAAQvW,KAAKzG,MAC3CyO,EAAInN,OAAOmM,WAAczN,KAAKgN,WAAWvG,KAAKzG,MAC9CyO,EAAInN,OAAO6R,OAAcnT,KAAKgN,WAAWvG,KAAKzG,MAC9CyO,EAAInN,OAAOgN,QAActO,KAAK+c,QAAQtW,KAAKzG,MAC3CyO,EAAIkB,KAAK/J,IAGTnF,MAAMqE,KAAK,iBAAiB0U,SAGtB,GAGRxZ,KAAKgd,QAAU,WAEdhd,KAAKyB,MAAQzB,KAAKyR,IAAMrB,KAAK6M,OAAM,IAAI5F,MAAOC,UAAY,KAC1D7W,MAAMM,OAAOiU,eAAehV,KAAKkU,MAAOzT,MAAM8B,KAAKyI,UAAU,KAAMhL,KAAKmU,OAGzEnU,KAAK+c,QAAU,SAAUjd,EAAK+E,GAE7B7E,KAAK8c,cAEa,iBAAPhd,EACV+E,EAAM,MAAQpE,MAAM8B,KAAKyI,UAAUlL,GAAO,QAAU+E,EAC9B,iBAAPA,IACfA,EAAM,MAAQpE,MAAM8B,KAAKyI,UAAU,KAAO,QAE3CnG,GAAO,MAAQpE,MAAM8B,KAAKyI,UAAU,IAAK,+EAAiF,OAC1HvK,MAAMM,OAAOkT,kBAAkBjU,KAAKkU,MAAOrP,EAA0B,iBAAb7E,KAAKmU,KAAoB,gBAAkBnU,KAAKmU,KAAO,iBAGhHnU,KAAKgN,WAAa,SAAUxI,GAE3B,IAAI0Y,EAASpd,EAAKqd,EAAMvM,EAAMwM,EAA+EC,EAAvDxM,EAAcT,KAAK6M,OAAM,IAAI5F,MAAOC,UAAY,KAIlG9S,EAAG8Y,kBAAiC,aAAZ9Y,EAAG0B,MAAyB2K,GAAgB7Q,KAAKyR,IAAM,GAElFzR,KAAKyR,IAAMZ,EAQI,GAFfqM,EAAU9M,KAAKc,MAAmB,IAAZ1M,EAAG+Y,OAAgB/Y,EAAGqL,SAEtBqN,EAAU,MAE/Bld,KAAK8c,YAAYI,GAKjBM,EAA4B,KAD5BJ,EAAcvM,EAAc7Q,KAAKyB,OACCyb,EAAU,GAE1B,GAAdE,IAGHxM,EAAOR,KAAK6M,MAAMO,EAAYJ,GAC9BxM,EAA8B,GAAvBR,KAAKqN,KAAK7M,EAAO,IACxByM,EAAOjN,KAAKqN,KAAK7M,EAAO,IAGxBuM,EAAO/M,KAAK6M,MAAMzY,EAAG+Y,OAASH,EAAc,MAEvCA,EAAc,IAAQI,EAAY,IAAO1d,EAAM,IAAK8Q,EAAO,MAChD,EAAPyM,GAAavd,EAAM,IAAK8Q,EAAOyM,GACxB,GAAPzM,GAAa9Q,EAAM,IAAK8Q,EAAO,GAClB9Q,EAAM,KAG7BE,KAAK0d,eAAeR,EAASpd,EAAKqd,EAAMvM,KAKrB,SAAZpM,EAAG0B,OAGX0K,EAAOR,KAAK6M,OAAM,IAAI5F,MAAOC,UAAY,KAAQtX,KAAKyB,MACtD4b,EAAOjN,KAAKqN,KAAK7M,EAAO,IAKZ,GAFZuM,EAAO/M,KAAK6M,MAAMzY,EAAG+Y,OAAS3M,EAAO,QAElBuM,IAASlM,EAAAA,EACX,EAAPoM,GAAavd,EAAM,IAAK8Q,EAAOyM,GACxB,GAAPzM,GAAa9Q,EAAM,IAAK8Q,EAAO,GACxB,GAAPA,EAAa9Q,EAAM,KACNA,EAAM,IAAK8Q,EAAO,MAG3BA,EAAbuM,EAAO,KAGRnd,KAAK8c,YAAY,KACjB9c,KAAK0d,eAAe,IAAK5d,EAAKqd,EAAMvM,KAItC5Q,KAAK0d,eAAiB,SAAUR,EAASpd,EAAKqd,EAAMvM,GAEnD,IAA+D1N,EAM1DxB,EANDic,EAAOld,MAAMqE,KAAK,QAASiM,EAAOtQ,MAAMqE,KAAK,aAEnC,GAAVoY,GACHha,EAAO,OACPya,EAAKtR,aAAa,QAAS,OAC3BsR,EAAKxM,MAAMC,MAAQ,IACf1P,EAAOjB,MAAMqE,KAAK,MACjBuH,aAAa,WAAY3K,EAAKwK,aACnCxK,EAAK2K,aAAa,WAAY5L,MAAM8B,KAAKyI,UAAU,MACnDtJ,EAAK2K,aAAa,QAAS,QAC3B3K,EAAKwK,YAAc,KAGnByR,EAAKxM,MAAMC,MAAQlO,EAAOga,EAAU,IAChCS,EAAK3E,aAAa,UACrB2E,EAAK9Q,gBAAgB,UAGJ,iBAAP/M,GAAoC,iBAARqd,GAAqC,iBAARvM,EACpE1N,EAAOzC,MAAM8B,KAAKyI,UAAUlL,EAAKod,EAASzc,MAAM0C,aAAaga,GAAM,GAAQvM,GACpD,iBAAP9Q,GAAoC,iBAARqd,IAC5Cja,EAAOzC,MAAM8B,KAAKyI,UAAUlL,EAAKod,EAASzc,MAAM0C,aAAaga,GAAM,KAEpEpM,EAAK7E,YAAchJ,GAGpBlD,KAAK8c,YAAc,SAAUI,GAEN,iBAAXA,EACVlb,SAASkS,MAAS,eAAesC,KAAKxU,SAASkS,OAC9CgJ,EAAU,OAASlb,SAASkS,MAAM5P,MAAMtC,SAASkS,MAAM7R,QAAQ,OAAS,GAAK6a,EAAU,OAASlb,SAASkS,MAElG,eAAesC,KAAKxU,SAASkS,SACrClS,SAASkS,MAAQlS,SAASkS,MAAM5P,MAAMtC,SAASkS,MAAM7R,QAAQ,OAAS"}